`
mengqingyu
  • 浏览: 333814 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

(转载)明星软件工程师的10种特质

阅读更多
如今,每家公司都似乎成了科技公司。从软件创业公司到投机性投资公司、制药巨头和媒体巨头,它们都越来越多地加入到软件业务行列。

  代码质量不仅成为了一个必需品,更成为了一个竞争优势。因为众多公司围绕软件而竞争,开发软件的人——软件工程师正显得越发重要。但是,你该如何发现那种百里挑一的程序员呢?在本文中,我们简明扼要地列出了明星开发人员的10种特质。

•1. 热爱编程
•2. 完成事情
•3. 持续重构代码
•4. 使用设计模式
•5. 编写测试
•6. 善用现有代码
•7. 专注可用性
•8. 编写可维护的代码
•9. 能用任何语言编程
•10. 知晓基本的计算机科学

  1. 热爱编程

  编程是一种为了满足兴趣而心甘情愿去做的劳动(Programming is a labor of love)。和其他任何职业一样,唯有真正的热情,才能完成真正的伟大事情。这里有个误解,认为编写代码是机械化并纯科学性的。事实上,最优秀的软件工程师是工匠,他们能把能量、独创性和创造力融入到每一行代码中。伟大的工程师知道何时该把代码雕琢至完美,知道何时把大型系统像拼图一样组装到一块。热爱编程的工程师从构建软件中获得满足,就好比一位作曲家在完成一部交响乐后而欣喜若狂。正是兴奋感和成就感,才造就了喜爱编程的明星工程师。


  2. 完成事情

  有很多技术人员只谈论软件而不编写代码(只说不做型)。而伟大软件工程师会真正去编码,这也是他们最为重要的品质之一。他们是实际做事的人。聪明人都知道,解决问题的最佳途径是直面问题,而不是花上数周来设计复杂又不必要的架构和函数库。优秀工程师应当会问:解决手头问题的最简单方法是什么?最近的软件开发方法——敏捷实践,正是专注那个。它的思想是,把复杂的项目拆分为短小的迭代,每个迭代只关注一小部分的增量功能。因为每个迭代对应的编码只需要数周,所以功能易于管理并简单。


  3. 持续重构代码

  编码很像雕刻。要像艺术家一样不断完善自己的作品,软件工程师也要通过可能的最佳方式来持续完善自己的代码,以达到目标。重新塑造代码的原则称为“重构”,Martin Fowler在他的创意书中有相应描述。重构背后的原始思想是:改善代码而不改变其功能,移动调整部分代码以确保系统不腐,还有确保系统完成基于当前需求该完成的事。持续重构可以让开发人员解决另一个著名的问题——“黑盒遗留代码”(这个问题基本无人想触及)。

  几十年的软件开发文化要求我们,不应该去改变正常工作的东西。然而,随着时间推移,问题是我们成为了老旧代码的奴隶,老旧代码变得不稳定和不兼容。而重构正好可以改变这一状况,因为我们是代码的主人,不是它的奴隶。重构在工程师和代码之间建立起持续的“对话”,并带来所有权、确定性、自信心和系统的稳定性。

  千万不要成为老旧代码的奴隶。如果代码是他人所写,或许你可以轻易推脱责任。但大多数时候,那些代码是自己所写,要拿得起放得下,旧代码该埋时,就把它埋了!


  4. 使用设计模式

  自从所谓的“四人帮”(Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides)发表他们的著作——《设计模式》后,全世界的软件工程师一直都在讨论模式。在我们所处世界,不管是自然界还是人类行为,模式无处不在。软件工程自然也不例外。模式就是不断重现的跨语言跨系统的场景和机制。一位优秀的工程师通常能识别并利用模式,而不是受制于模式。工程师不应(强制)让系统去适应某种模式,而需发现在系统中使用模式的时机(恰当使用模式)。在使用模式来确保正确性时,应借鉴利用前人的智慧结晶,使用以前能正当解决特定工程问题的方法。但请切记:模式不是万灵药;不要为了使用设计模式而使用设计模式。


  5. 编写测试

  曾有段时间,软件工程师们认为测试不值得他们去做。然而,如果你不做测试,你怎么能确保代码就能正常工作呢?敏捷实践中的“单元测试”已获得普遍认可,因为它注重编写测试来反映代码是否有效。随着系统增大,测试也随之增大。有经验的工程师知道并了解测试的价值所在,因为测试的目的就是创建一个能正常运作的系统。优秀的工程师通常会确保出现过一次的Bug不会再出现第二次。但优秀的工程师也知道,不应该浪费时间写那些琐碎或多余的测试,而需要专注测试各个组件中的核心部分。


  6. 善用现有代码

  “重新发明轮子”一直是软件行业中的巨大问题之一。从发明新语言到从写函数库,忽视并重写那些已经存在并已能工作的奇怪驱动力,已经造成大量软件开发的失败案例。一位明星工程师会专注三种基本类型的重用:第一,内部基础架构的重用,相应代码是他自己或同事编写的;第二,使用第三方的函数库,比如JDK。最后,研究使用某些大型网络服务商提供的相应服务,比如Amazon。总之,正确善用现有的代码,使得软件工程师能真正专注于最为重要的事情上——应用程序本身。


  7. 专注可用性

  优秀的工程师通常都专注于用户。无论用户是企业还是个人,无论是为消费型的软件公司还是投资银行,需要关注的都是可用性。用户如何和系统交互?系统是否提供一种简单、直接和平稳的操作体验?有种说法,因为软件工程师是技术人员,他/她和“用户如何与系统交互”没有关联,这种说法严重错误。优秀工程师努力工作是为了什么?不正是让系统简单并易于使用。他们无时无刻都会想到用户,不会尝试去发明那些令人费解,只有极客才能理解并欣赏的东西。

  有些时候,一些软件工程师过于投入,反而忘记所编写的程序/软件,是供他人使用,不是做给自己看的“艺术品”。所以,在软件开发过程中,一直要把“用户”放在心中。


  8. 编写可维护的代码

  软件开发界的另外一个小秘密是:编写优秀代码和糟糕代码所花费的时间是一样多。一位训练有素的工程师,他/她会从第一行代码开始就考虑可维护性和代码的演化。没有任何理由编写“丑陋”的代码、长达数页的函数,或是稀奇古怪的变量名。优秀的工程师编写代码会遵循命名惯例,代码编写紧凑、简单和不过度炫耀聪明。代码的每一行,都应恰如其分地展现出其原有目的。在给不便理解的代码(块)合理注释时,别忘了命名规则。清晰明了的函数名和变量名可以让代码不言而明。

  在编码时,有些程序员会有这种心态:过一会儿再来修改或完善某部分代码或某条语句。但谁知这一“过一会”竟然是“一天”、“一周”、“一个月”或“一年”,甚至以后根本就没机会再回头修改。所以,尽量别妥协写出暂时堪用的代码。否则,不仅不会节省开发时间,也可以阻碍整个进程。当然也不利于后续维护人员的工作。


  9. 能用任何语言编程

  优秀的软件工程师活血有自己一门特别钟爱的编程语言,但从不会执迷于当中。如今已有很多优秀的编程语言,也就是说,如果你只会使用其中一门语言,说明你缺乏多样性。你可以用Java、C#或C++编写任何现代软件,可以用PHP、Perl或Ruby编写任何网站的后台。简而言之,编程所用语言,远远没有语言相应的函数库重要。优秀的工程师能够认知到这一点,并愿意去学习新语言、新函数库和构建系统的新方法。


  10. 知晓基本的计算机科学知识

  最后,但肯定不是优秀工程师最不重要的特质就是:扎实的基础。优秀的工程师或许并没有计算机科学的学位,但他/她必须知道基础——数据结构和算法。如果不知道哈希表,或者不知道链表和数组之间的差别,你如何构建一款大型的软件?。这些都是每位从事软件开发的开发人员应当知道的。算法也同样重要,从二分查找到各种排序,到图形遍历,一位明星工程师必须知道并内在消化这些基础东西。因为这些基础就是你在构建任何现代软件中做抉择时的必备品。


  结束语

  以上就是区分伟大软件工程师的诸多特质。其中讨论的“热情”,是非常重要的。代码重用、设计模式、基础数据结构和算法都是必须知道的,而敏捷实践中的重构和单元测试则有助于工程师应对复杂的软件。尤为重要的是,明星工程师相信简洁和常识。也正是这些信念,帮助他们成功构建当今世界所需的看似不可能又错综复杂的系统。

转自:http://www.jobbole.com/entry.php/344
分享到:
评论

相关推荐

    明星软件工程师的十种特质

    "明星软件工程师的十种特质" 在软件开发行业中,明星软件工程师是一个稀缺的资源。随着软件开发的重要性日益增加,每家公司都需要拥有高素质的软件工程师来确保软件质量和竞争优势。在本文中,我们将探讨明星软件...

    明星软件工程师的十种特质.docx编程资料

    ### 明星软件工程师的十种特质解析 #### 1. 热爱编程 热爱编程不仅是对技术的追求,更是对创造价值的一种热忱。真正的编程高手将编写代码视为一种艺术创作,每一行代码都是他们心血的结晶。这种热爱让他们能够持续...

    如何成为杰出的软件工程师

    综上所述,成为杰出的软件工程师需要全面发展,不断提升认知能力,培养积极的个性特质,锻炼社交技能,并在合适的组织环境中寻找工作满足感。通过持续学习和实践,普通工程师也能逐渐成长为业界的佼佼者。

    软件工程师竞聘演讲汇报报告范文模板.pdf

    这样的报告旨在全面展示竞聘者的专业素养、个人特质和对岗位的理解,帮助评审团队评估其是否适合担任软件工程师的角色。在实际竞聘过程中,演讲者应根据具体职位需求和个人经历进行有针对性的准备,确保内容真实、...

    软件工程师简历模板包

    【Java软件工程师简历模板包】是一个专门为求职者准备的资源集合,旨在帮助具有Java编程技能的软件工程师在求职过程中打造专业、吸引人的个人简历。这个压缩包包含了多种设计风格和格式的简历模板,以满足不同求职者...

    软件工程师简历模板20篇

    在IT行业中,软件工程师是需求量大且至关重要的职位,其职责涵盖了软件设计、编码、测试、维护等多个方面。为了在众多应聘者中脱颖而出,一份精心制作的简历至关重要。本资源"软件工程师简历模板20篇"正是为满足这一...

    JAVA软件工程师个人简历—

    【JAVA软件工程师个人简历】 在IT行业中,Java软件工程师是一个至关重要的角色,他们负责设计、开发、测试和维护使用Java编程语言的软件应用。对于一个Java软件工程师来说,一份详尽且专业的个人简历是求职过程中的...

    软件工程师个人简历.docx

    10. 国际化能力:软件工程师需要具备国际化的视野和能力,能够在国际化的环境中工作和交流。 这个文件描述了一个软件工程师的个人简历,包括他的工作经验、技能和个人特质。这些建议可以为软件工程师的职业发展和...

    2021年软件工程师面试自我介绍技巧及简介.pdf

    软件工程师面试自我介绍是软件工程师在面试时的一项重要技能,通过自我介绍,软件工程师可以展示自己的技术能力、实践经验、个人特质等方面的优势,从而让面试官对自己留下深刻的印象。 本文将从四个方面对软件...

    软件工程师 简历模板 项目经验

    在IT行业中,软件工程师是至关重要的角色,他们负责设计、开发和维护各种软件应用程序。对于应届生来说,准备一份专业且突出个人能力的简历至关重要,以便在竞争激烈的就业市场中脱颖而出。本压缩包提供了两个文件,...

    求职自荐信-软件工程师.docx

    1. 软件工程师概况:软件工程师是一种特殊的职业,需要掌握软件开发、设计、测试、维护等方面的知识和技能。本人概况中提到姓名、性别、民族、政治面目、学历、专业、联系电话、手机、联系地址、Email 等个人信息。 ...

    软件工程师英文简历模板

    【软件工程师英文简历模板】是IT行业中用于求职的文档,主要展示了软件工程师Garan Steen的个人技能、专业背景及工作经历。这份简历突出了他在解决问题、自动化过程、Web应用程序和LAMP(Linux, Apache, MySQL, PHP...

    软件工程师专用简历简洁大方

    软件工程师的简历应该突出编程语言掌握、项目经验、技术专长以及解决问题的能力。以下是一份有效的软件工程师简历应包含的主要部分: 1. **个人信息**:包括全名、民族、年龄、学历、专业和联系方式(电话、邮箱)...

    软件工程师简历模板。里面有好多可供你选择

    在准备软件工程师的求职过程中,一份出色的简历是至关重要的。软件工程师简历模板能帮助求职者高效、专业地展示自己的技能、经验和成就,从而提高获得面试机会的可能性。以下是一些关于如何利用这些模板来创建一份...

    简历模板(十六)软件工程师-高级软件工程师待遇.docx

    7. **个人特质**:温和、谦虚、自律、自信,这些性格特点对于一个高级软件工程师来说非常重要,因为这些品质有助于在团队中建立良好的工作关系,保持高效和专注。 综上所述,这份简历突显了一个高级软件工程师所应...

    简历模板(二十三)软件工程师.docx

    【知识点】 1. **软件工程师**:软件工程师...10. **个人性格**:描述中的诗句(《大堰河,我的保姆》选段)虽然与软件工程师的职业无关,但体现了个人情感和韧性,暗示软件工程师可能是一个充满爱心、坚韧不拔的人。

    软件工程师宣贯.pdf

    从提供的文件【部分内容】中,我们可以提取出多个与软件工程相关的关键知识点,包括编程语言、软件测试、系统平台、软件工具、软件工程技能、沟通技能、组织技能以及软件工程中必须的特质和实践经验。以下是对这些...

    软件工程师个人简历模板下载.doc

    8. **自我介绍与求职意向**:自我简介中强调的积极主动、创新思维和抗压能力是成功软件工程师的重要特质。同时,明确的求职意向(目标职位、行业、薪资、地区和到岗时间)展示了职业规划清晰度。 9. **教育背景**:...

    软件测试工程师面试问题.pdf

    标题:软件测试工程师面试问题 描述与标签:这份文档提供了软件测试工程师面试中常见的问题集,旨在帮助求职者准备面试,同时也为招聘方提供了一套评估候选人能力的标准框架。 知识点详解: 1. **参与测试和质量...

Global site tag (gtag.js) - Google Analytics