这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的程序员那么糟糕?简而言之,什么原因成就了一位优秀的程序员呢?

根据我的经验,成为一个优秀程序员同年龄,教育程度,还有和你赚多少钱没有任何关系。关键在于你的做法,更深入地说,就是你的想法。我注意到我所钦佩的程序员都有一些相似习惯。不是他们所选语言的知识,也不是对数据结构和算法的深入理解,甚至不是多年的工作经验。而是他们的沟通方式,他们管理自己的方式,以及以他们精湛技术水平编程演讲的方式。

当然成为一个优秀的程序员还要具备更多特质,我也不能单单依靠是否存在(或者缺少)这些特质来评判一个程序员。但是我知道当我看见它,当我看见一个程序员具备这些特质的时候,我认为,“这个人真的知道他们正在做什么”。

他们做调查研究

或者叫“三思而后行”,或者叫“谷歌一下”

不论你怎么称呼它,大多数可能会遇到的编程问题已经以某种形式解决,传道书早就记载着世界上本来就没有什么新鲜事。优秀的程序员在解决问题之前知道通过GitHub图书馆、网络博客,或者通过与经验丰富的程序员交流等形式来做调查研究。

我见过甚至是优秀的程序员可以快速找出解决方案,但是和我一起工作过的糟糕的程序员从来不求助于他人,结果做了大量的重复工作或者错误地解决问题,不幸的是,后来他们终将为自己犯下的错误付出了代价。

他们阅读错误信息(并按照它们行事)

这包括解析堆栈路径信息。是的,这是一件非常不幸的事情。但是如果你不愿意这么做的话,怎么才能知道哪里错了呢?我知道的高效程序员是不会害怕深究问题的。低效的程序员看见有错误,但就是不愿意甚至是去读这些错误信息。(这听起来很可笑,但你会惊讶我遇到它的频率)

更进一步地说,优秀的程序员发现问题马上就解决它。读错误信息对他们来说仅仅是个开始,他们渴望深究问题并查出问题的根源。他们不喜欢推卸责任,而是愿意查找解决问题的方案,问题在他们这里止步。

他们去看源代码

文档、测试、团队,这些都会说谎。尽管不是故意的,但是如果你想确切地知道事情是怎么回事,你必须自己亲自看源代码。

如果它不是你最擅长的语言,你也不要害怕。如果你是一个Ruby的程序员,你怀疑在Ruby的C语言库中有个错误,破解打开看看。是的,你可能拿不到源代码,但是谁知道呢?你只是可能而已,你有更好的机会,总比你根本不去尝试好吧。

不幸的是,如果你处在一个封闭源代码的环境中,这会变得非常难,但道理是不变的。糟糕的程序员对于查看源代码没有丝毫的兴趣,结果问题困扰他们时间,要比愿意看源代码的时间长得多。

They just do it

优秀的程序员趋向于主动去做。他们的内心有着难以控制的冲动,当他们确定问题或者发现新的需求时他们立刻会实现解决方案,有时过早有时太过激进。但是他们对问题本能的反应是正面解决问题。

有时这会令人很烦恼,但是他们的热情是他们做好事情的一个重要部分。一些人可能拖延时间回避问题或者等待问题自己能够消失,然而优秀的程序员一开始就解决它。简而言之(或者显而易见),如果你看见有人兴致勃勃地查找问题并在解决,很可能你的手下有位优秀的程序员。

他们避免危机

这通常是糟糕程序员的特点:他们轻易地从一个人为危机跳到另一个人为危机,在没有真正理解一个问题之前就进入到下一个问题。他们会把责任归咎于程序的错误,然后花费大把的时间调试已经运行良好的代码。他们让情感占据主动,相信直觉,而不是仔细严谨的分析。

如果你匆匆忙忙地解决一个问题,甚至视每一个问题为震惊世界的灾难。你很可能犯错误或者没有解决潜在的问题。优秀的程序员花时间去了解发生了什么错误,哪怕灾难来临的时候;但更重要的是,他们对待平常的问题像是要解决的重要问题,因此他们更准确地解决更多的问题,并且这样做没有提高团队的紧张程度。

他们善于沟通交流

说到底,编程是一种形式的沟通交流。写代码和写散文创作一样,能够简洁地表达你的想法很重要。我发现那些可以写简洁邮件,优雅的状态报告,或者甚至只是一个有效的备忘录的程序员也将会是优秀的程序员。

这能应用在写代码还有英语上。用圆括号、括号和单个字母的函数写出一行代码当然是有可能的,但是如果没有人理解它,有什么意义呢。优秀的程序员会花时间以各种渠道交流他们的想法。

他们激情四射

我认为这可能是优秀的程序员最重要的方面(也许这点也适用于除计算机科学领域的其它领域)

如果你真的在乎你所做的事情,如果不把它当成工作,当作一个业余爱好、兴趣或一件很有吸引力的事情,那么在该领域你比其他人更有优势。优秀的程序员一直不断编程。普通程序员一天工作八小时,并且没有业余项目,也没兴趣回馈社区。他们不会不断地尝试新方法,而只是为了看看它们是如何运行而执着于编程语言。

当我看见一个程序员利用周末的时间做自己喜欢的项目时,参与创作他们每天能用到的工具时,执着于新的有意义的事情时:那个时候我确信我眼前的是一个令人惊奇的人。最后,优秀的程序员视他们的职业不仅仅是赚钱的途径,更是让生活变得有些不同的方法。我认为那就是成就最优秀程序员的真正原因。对于他们来说,编写代码是改变世界的一种方法,也是我非常尊敬崇拜他们的原因。

什么原因成就了一位优秀的程序员?相关推荐

  1. 什么原因成就了一位优秀的程序员?(转)

    这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸.不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀, ...

  2. 技术人生:如何成为一位优秀的程序员

    良好的习惯:包括生活习惯和编程习惯. 健康的身体:事业需要你,媳妇更需要你. 偏执型人格:对自己想要的东西近乎疯狂的追求. 双重型人格:集艺术家的感性与学者的理性为一体:在超越正常人的成熟度之下,始终 ...

  3. 什么原因成就了以为优秀的程序员

    这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸.不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀, ...

  4. 如何成为优秀的程序员

    1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:  问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等.  系统集成:C++和Java等面 ...

  5. 一位外包女程序员的心酸史和无奈

    [ 爱开发]陪伴你一起成长 一位外包女程序员的心酸史和无奈 文 | 洪生鹏 1 不知不觉已在IT行业里混了五年了,这五年来,每天如同勤劳的蚂蚁搬默默地搬砖.写这篇文章,主要是想和大家分享一下自己的成长 ...

  6. 寻找优秀的程序员之实战指南-1

    寻找优秀的程序员之实战指南 --选自<软件随想录:程序员部落酋长Joel谈软件> [好消息]本书今天(12.10)互动有货,感兴趣的朋友可以 逛逛去 2006 年 9 月 7 日 ,星期四 ...

  7. 漫画:优秀的程序员具备哪些属性?

    很多人问我,你是一个优秀的程序员吗? 我还差得远,但我在朝这个目标努力. 那么,怎样才能成为一个优秀的程序员呢? 优秀的程序员往往具有几方面的特点,这些特点里有的更重要,有的作用略低,我以个人的见解, ...

  8. 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?

    怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 ...

  9. 你在成长为一个优秀的程序员吗

    在软件开发过程中,你经历的每件事情都会潜移默化地影响着你.随着时间的流逝,年纪的增长,对于程序开发技术(相同/或者相关能力)以及自身的理解也会不断沉淀,这些最终也会帮助你达成目标--成为一名优秀的程序 ...

最新文章

  1. 最新Java中Date类型详解
  2. 泼点冷水,P2P借款限额是不是想的太美好?
  3. 补8.python之面相对象part.7(类相关函数的补充)
  4. Java基础知识强化83:System类之gc()方法(垃圾回收)以及和finalize()区别
  5. 【字节网盘】emlog版收录导航主题模板
  6. Windows server 2008 R2搭建主域控制器 + 辅域控制器
  7. ios apns netty java codec 防止粘包
  8. atan和atan2反正切计算
  9. hdu 1540 Tunnel Warfare (线段树维护左右最长连续区间)
  10. 小米笔记本linux系统下载,传小米笔记本不用Win10用Linux系统 推12.5寸/13.3寸两款...
  11. 游戏辅助原理与制作02-植物大战僵尸03-冷却时间基址
  12. MIMIC数据库数据提取教程-提取时间维度数据
  13. 通过优化提高网站转化率
  14. Linux 中的一些文件简介
  15. 类美团外卖、骑手、类快递取餐柜、整合菜品供应商、前厅、后厨、配送、智能厨电设备的智慧餐饮业务
  16. Visualization领域研究以及会议分类
  17. 神经网络模型无法正常工作时我们应该做什么(系列)——数据标准化处理(Normalize)
  18. 湫湫系列故事——减肥记I(HDU-4808)
  19. MAC M1芯片可下载的安卓模拟器Android Emulator
  20. 文献翻译神器---助你轻松阅读理解英文文献论文

热门文章

  1. java中数组的返回值是什么类型_Java数组也是一种数据类型
  2. arcgis判断两个字段是否相等
  3. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python上下文管理器)
  4. 【转】修饰符new将父类中的该方法隐藏掉有什么意义 不隐藏有什么弊端
  5. 第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建
  6. 了解Entity Framework中事务处理
  7. 2.3)深度学习笔记:超参数调试、Batch正则化和程序框架
  8. dmsetup remove_all 这命令干啥的_分一个小知识,服务器上的一个解压与压缩文件的命令....
  9. java的et5_Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
  10. 渲染服务器位置,如何用服务器做渲染