阅读更多

40顶
3踩

编程语言

原创新闻 明星软件工程师的10种特质

2010-11-25 08:53 by 见习编辑 jobbole 评论(36) 有23677人浏览

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


 

  代码质量不仅成为了一个必需品,更成为了一个竞争优势。因为众多公司围绕软件而竞争,开发软件的人——软件工程师正显得越发重要。但是,你该如何发现那种百里挑一的程序员呢?在本文中,我们简明扼要地列出了明星开发人员的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. 知晓基本的计算机科学知识

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


  结束语

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

  引用网上看到的一段话:对于知识,要求知若渴;对于自己,要虚怀若谷。保持开放的心态,保持孩童般的好奇心看待新鲜事物。当今世界,日新月异,不仅要从书中获取知识,更要尽可能从其他途径来学习经验和知识,在求知过程中,《请谨记5件事,做一名快速的学习者》。

  如果你觉得一位明星软件工程师还应具备其他特质,请在评论或微博中和大家分享讨论。



  本文出处:伯乐在线 - 职场博客
  本文链接:http://www.jobbole.com/entry.php/344

  Via:RWW 编译:伯乐在线 敏捷翻译组 - @关关

  如需转载,但请注明文章来源和超链接等版权信息,否则视为侵权,谢谢合作!

  • 大小: 40.6 KB
来自: www.jobbole.com
40
3
评论 共 36 条 请登录后发表评论
36 楼 rcjjian 2010-11-27 15:57
   頂上去
35 楼 tonynju 2010-11-27 14:29
成为一个好程序员的还需要的重要特性
* 善于沟通,注重团队合作
   在一个团队之中,一个出色的程序员需要能很好的理解需求,讨论设计。
* 优良的解决问题能力,能够缜密有绪的思考问题
   很好的分析问题能力可以帮你找到合理的问题解决方案,基于一个好的方案才能写出优良的代码
34 楼 张亮亮 2010-11-27 12:09
顶一个!!!!
33 楼 scwwc55555 2010-11-26 23:02
我错了,只是实验一下回复有没有做文字限制
32 楼 scwwc55555 2010-11-26 23:01
 































































































 













































































31 楼 飞语001 2010-11-26 22:23
编程的人也没有那么惨吧。
30 楼 qgymje 2010-11-26 16:43
langyu 写道
chex227 写道
编程的都是SB

顶这句,尽管我就是一个

顶,我也是~无奈
29 楼 flootball 2010-11-26 15:15
写代码就是个杯具。
28 楼 ottoliu 2010-11-26 12:53
   又有激情了
27 楼 flamenco 2010-11-26 12:42
看完之后,觉得自己应该改变一下了,自从做软件开发,起初是因为爱好编程而选择这一步,如今工作两年多时间,认为编程只是为了工作,挣点钱罢了,而并没有当成爱好,兴趣也不浓厚,但工作起来是非常认真的对待,感觉以下几点表现还不错:
2. 完成事情,争取把事情做漂亮,能多想一步就多做一步,不留下漏洞
3. 持续重构代码,把代码简法化,不想弄的太复杂,也是为维护着想
5. 编写测试,这点很有必要,防止牵一发而动全身 
7. 专注可用性 ,每次做事都思考的较深
8. 编写可维护的代码 ,这点最重要,因为看别人代码太痛苦了,所以希望自己能减轻别人的痛苦.
还需要继续加油.
26 楼 langyu 2010-11-26 12:35
chex227 写道
编程的都是SB

顶这句,尽管我就是一个
25 楼 jh3522 2010-11-26 12:34
明星啊,都谈到明星啦,
下一篇是不是叫 明星软件工程师之潜规则  ,你懂的!
24 楼 yuwenrui20101025 2010-11-26 11:22
写的不错,软件工程师是这样锻炼出来的 顶
23 楼 chex227 2010-11-26 11:08
编程的都是SB
22 楼 jallin 2010-11-26 10:08


学习了!
21 楼 witcheryne 2010-11-26 08:36
引用

简而言之,编程所用语言,远远没 有语言相应的函数库重要。优秀的工程师能够认知到这一点,并愿意去学习新语言、新函数库和构建系统的新方法。

的确··  每种语言都能带来不同的便利···
最近对Groovy很感兴趣..
20 楼 罗卜头 2010-11-26 01:32
这不是说我吗?
19 楼 飞语001 2010-11-25 22:29
说的挺对的。
18 楼 给一理由先 2010-11-25 21:39
说的好,程序员时刻保持孩童般的心
17 楼 damoqiongqiu 2010-11-25 19:20
Copperfield 写道
"知晓基本的计算机科学知识"
非常赞同!

这一点貌似很重要,你们懂的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • jcifs-1.3.15.jar

    通过jcifs.jar 创建远程文件和文件夹, 注意jcifs-1.3.15.jar 需要 远程计算机在局域网内,并且开启共享磁盘权限 。 一般用来连接域控,解析DNS,验证用户名密码。

  • java jcifs ntlm_jcifs的NTLMHTTP验证及所犯错误

    一、错误提示:0xC0000022: jcifs.smb.SmbAuthException: Access is deniedThe NTLM HTTP SSO Filter that used to be included withJCIFS cannot support NTLMv2.1) jcifs.smb.lmCompatibility = 0 or 1: SendLM ...

  • jCIFS非法用户名验证绕过漏洞

    信息提供: 安全公告(或线索)提供热线:51cto.editor@gmail.com 漏洞类别: 非法用户名验证绕过漏洞 攻击类型: 远程攻击 发布日期: 2004-06-01 ...jCIFS jCIFS 0.9.0b jCIF

  • jcifs-1.3.3.jar

    //验证是否能够成功登录 //创建Smb文件,地址一定要使用smb:// SmbFile remoteSmbFile = new SmbFile("smb://" + host + filePath, auth); --------------------- 作者:sand_clock 来源:CSDN 原文:...

  • jcifs-ng:jCIFS库的清理和改进版本

    统一身份验证子系统,NTLMSSP / Kerberos支持 大型ReadX / WriteX支持 流列表操作 NtTransNotifyChange支持 Google补丁:各种错误修复,lastAccess支持,重试请求 适当的测试套件 各种修复 移民 jcifs-ng 2.1 此...

  • jcifs文件上传到另一台服务器,使用JCIFS获取远程共享文件

    import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import jcifs.smb.SmbFile;import jcifs.smb.SmbFileInputStream;/*** 使用JCIFS获取远程共享文件* @see 关于jcifs的介...

  • jcifs

    SDescription说明 Packages 软件包 jcifs jcifs   jcifs.netbios jcifs.netbios   jcifs.smb jcifs.smb ...jcifs.util ...jcifs.util

  • JCIFS实现域单点登入遇到的问题

    [b]需求说明[/b] ... [b]实现方法[/b] ...通过查询资料,JCIFS可以实现域单点登入,实现原理可以查看这个链接: http://www.cnblogs.com/adylee/articles/975213.html 实现方法也比较简单,步骤如下...

  • jcifs:JCIFS是一个开放源代码客户端库,该库以100%Java实现CIFSSMB网络协议

    联合会 JCIFS是一个开放源代码客户端库,该库以100%Java实现了CIFS / SMB...统一身份验证子系统,NTLMSSP / Kerberos支持 大型ReadX / WriteX支持 流列表操作 NtTransNotifyChange支持 Google补丁:各种错误修正,las

  • jcifs java_JAVA中使用jcifs集成AD域用户认证

    jcifs是samba组织下的一帮牛开发的一套兼容SMB协议的library,我们可以用它来在java里访问Windows共享文件,当然,既然它帮我们实现了SMB协议,那要用它来实现NTLM SSO就很容易了。在这个网址可以下载到jcifs的...

  • java jcifs ntlm_GlassFish(或任何servlet容器)上的HTTP连接的JCIFS NTLM身份验证

    似乎我在Java 5/6中已经支持我尝试做的事情,因此我可以删除JCIFS API并执行类似的操作:public static String getResponse(final ConnectionSettings settings,String request) throws IOException {String url = ...

  • java如何实现单点登录 jcifs_JCIFS实现单点登录

    这个站点下载 jcifs-1.3.2.jar包。2。把这个包放到相应的lib文件下面。3。对web.xml文件进行配置,添加如下内容NtlmHttpFilterjcifs....

  • 使用jcifs进行域单点登录

    通俗点来说就是单点登录,基本的实现就是通过jcifs。 原理为配置jcifs获取当前电脑登录的域账号,然后通过域账号去登录系统。 参考了一些资料,实现起来还是比较简单的。首先,项目引入要使用的jar包,即jcifs-...

  • jcifs-windows密码验证的方式

    发现使用windows密码验证的方式楼主shangqiao(伤桥(千万不要理解为我可怜桥,是“伤心桥下”的缩写))2004-11-01 18:29:48 在 Java / 安全专题 提问...哪位兄弟搞定了知会一声,

  • java jcifs_Java通过JCIFS访问操作Windows(smb)共享目录方法代码

    1、引入JCIFS的方法1) 通过Maven引入(pom.xml)org.samba.jcifsjcifs1.2.192) JCIFS官网下载Jar2、连接共享目录和验证帐户密码//import jcifs.smb.NtlmPasswordAuthentication;//import jcifs.smb.SmbFile;//import ...

  • java远程共享文件访问jcifs解决密码中特殊符号问题

    注意,先通过NtlmPasswordAuthentication进行验证,验证通过后用SmbFile 加入即可解决jcifs密码中的特殊符号问题 public void smbGet(String remoteUrl,String localDir) {  NtlmPasswordAuthentication ...

  • java如何实现单点登录 jcifs_JCIFS实现单点登录 | 学步园

    这个站点下载 jcifs-1.3.2.jar包。2。把这个包放到相应的lib文件下面。3。对web.xml文件进行配置,添加如下内容NtlmHttpFilterjcifs....

  • 单项海洋环境影响评价等级表.docx

    单项海洋环境影响评价等级表.docx

  • 基于AT89C51 单片机为核心器件,程序设计采用C 语言,Keil 软件编译程序,配以相关外围接口电路,实现了方波、锯齿波、正弦波、三角波、梯形波五种特定波形的产生【论文+源码】

    【作品名称】:基于AT89C51 单片机为核心器件,程序设计采用C 语言,Keil 软件编译程序,配以相关外围接口电路,实现了方波、锯齿波、正弦波、三角波、梯形波五种特定波形的产生【论文+源码】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:本设计中的波形发生器系统要求基于51单片机,因此选用以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个波形发生器的硬件系统。使用C 语言对单片机编程可产生相应的正弦波,方波,三角波,锯齿波梯形波波形信号。在程序运行时,当接收到按键信息后,需要输出某种波形时,调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出即可得到要求的波形。 当需要改变频率时只需要改变单片机的波形发生程序中的递增或者递减变量即可。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

  • 数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 完全多元图的最大匹配问题研究 共9页.pdf

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 完全多元图的最大匹配问题研究 共9页.pdf

Global site tag (gtag.js) - Google Analytics