这些年我曾和不少程序员一块儿工做,他们之中的一些人很是厉害,而另外一些人显得平庸。不久前由于和一些技术很是熟练的程序员工做感受很愉快,我花了一些时间在考虑我佩服他们什么呢?什么缘由让优秀的程序员那么优秀,糟糕的程序员那么糟糕?简而言之,什么缘由成就了一位优秀的程序员呢?程序员
根据个人经验,成为一个优秀程序员同年龄,教育程度,还有和你赚多少钱没有任何关系。关键在于你的作法,更深刻地说,就是你的想法。我注意到我所钦佩的程序员都有一些类似习惯。不是他们所选语言的知识,也不是对数据结构和算法的深刻理解,甚至不是多年的工做经验。而是他们的沟通方式,他们管理本身的方式,以及以他们精湛技术水平编程演讲的方式。算法
固然成为一个优秀的程序员还要具有更多特质,我也不能单单依靠是否存在(或者缺乏)这些特质来评判一个程序员。可是我知道当我看见它,当我看见一个程序员具有这些特质的时候,我认为,“这我的真的知道他们正在作什么”。编程
他们作调查研究网络
或者叫“三思然后行”,或者叫“谷歌一下”数据结构
不论你怎么称呼它,大多数可能会遇到的编程问题已经以某种形式解决,传道书早就记载着世界上原本就没有什么新鲜事。优秀的程序员在解决问题以前知道经过GitHub图书馆、网络博客,或者经过与经验丰富的程序员交流等形式来作调查研究。数据结构和算法
我见过甚至是优秀的程序员能够快速找出解决方案,可是和我一块儿工做过的糟糕的程序员历来不求助于他人,结果作了大量的重复工做或者错误地解决问题,不幸的是,后来他们终将为本身犯下的错误付出了代价编程语言
他们阅读错误信息(并按照它们行事)函数
这包括解析堆栈路径信息。是的,这是一件很是不幸的事情。可是若是你不肯意这么作的话,怎么才能知道哪里错了呢?我知道的高效程序员是不会惧怕深究问题的。低效的程序员看见有错误,但就是不肯意甚至是去读这些错误信息。(这听起来很好笑,但你会惊讶我遇到它的频率)工具
更进一步地说,优秀的程序员发现问题立刻就解决它。读错误信息对他们来讲仅仅是个开始,他们渴望深究问题并查出问题的根源。他们不喜欢推卸责任,而是愿意查找解决问题的方案,问题在他们这里止步。测试
他们去看源代码
文档、测试、团队,这些都会说谎。尽管不是故意的,可是若是你想确切地知道事情是怎么回事,你必须本身亲自看源代码。
若是它不是你最擅长的语言,你也不要惧怕。若是你是一个Ruby的程序员,你怀疑在Ruby的C语言库中有个错误,破解打开看看。是的,你可能拿不到源代码,可是谁知道呢?你只是可能而已,你有更好的机会,总比你根本不去尝试好吧。
不幸的是,若是你处在一个封闭源代码的环境中,这会变得很是难,但道理是不变的。糟糕的程序员对于查看源代码没有丝毫的兴趣,结果问题困扰他们时间,要比愿意看源代码的时间长得多。
They just do it
优秀的程序员趋向于主动去作。他们的心里有着难以控制的冲动,当他们肯定问题或者发现新的需求时他们马上会实现解决方案,有时过早有时太过激进。可是他们对问题本能的反应是正面解决问题。
有时这会使人很烦恼,可是他们的热情是他们作好事情的一个重要部分。一些人可能拖延时间回避问题或者等待问题本身可以消失,然而优秀的程序员一开始就解决它。简而言之(或者显而易见),若是你看见有人兴致勃勃地查找问题并在解决,极可能你的手下有位优秀的程序员。
他们避免危机
这一般是糟糕程序员的特色:他们轻易地从一我的为危机跳到另外一我的为危机,在没有真正理解一个问题以前就进入到下一个问题。他们会把责任归咎于程序的错误,而后花费大把的时间调试已经运行良好的代码。他们让情感占据主动,相信直觉,而不是仔细严谨的分析。
若是你匆匆忙忙地解决一个问题,甚至视每个问题为震惊世界的灾难。你极可能犯错误或者没有解决潜在的问题。优秀的程序员花时间去了解发生了什么错误,哪怕灾难来临的时候;但更重要的是,他们对待日常的问题像是要解决的重要问题,所以他们更准确地解决更多的问题,而且这样作没有提升团队的紧张程度。
他们善于沟通交流
说到底,编程是一种形式的沟通交流。写代码和写散文创做同样,可以简洁地表达你的想法很重要。我发现那些能够写简洁邮件,优雅的状态报告,或者甚至只是一个有效的备忘录的程序员也将会是优秀的程序员。
这能应用在写代码还有英语上。用圆括号、括号和单个字母的函数写出一行代码固然是有可能的,可是若是没有人理解它,有什么意义呢。优秀的程序员会花时间以各类渠道交流他们的想法。
他们激情四射
我认为这多是优秀的程序员最重要的方面(也许这点也适用于除计算机科学领域的其它领域)
若是你真的在意你所作的事情,若是不把它当成工做,看成一个业余爱好、兴趣或一件颇有吸引力的事情,那么在该领域你比其余人更有优点。优秀的程序员一直不断编程。普通程序员一天工做八小时,而且没有业余项目,也没兴趣回馈社区。他们不会不断地尝试新方法,而只是为了看看它们是如何运行而执着于编程语言。
当我看见一个程序员利用周末的时间作本身喜欢的项目时,参与创做他们天天能用到的工具时,执着于新的有意义的事情时:那个时候我确信我眼前的是一个使人惊奇的人。最后,优秀的程序员视他们的职业不只仅是赚钱的途径,更是让生活变得有些不一样的方法。我认为那就是成就最优秀程序员的真正缘由。对于他们来讲,编写代码是改变世界的一种方法,也是我很是尊敬崇拜他们的缘由。