伟大的程序员是怎样炼成的?


伟大的程序员是怎样炼成的?

文章插图
英文原文:What makes a great software engineer?
原文发布于 2009-8-21
近几周 , 一份反映 Netflix 公司企业文化的报告在网上广为流传 。这份报告里列举了很多Netflix公司里令人称赞的做法 , 包括这个公司是如何的招聘和辞退员工的 。里面有大量的信息是描述Netflix公司是怎样对待员工的 , 这使Netflix公司变成了一个很有吸引力的工作场所 。报告里面提到过有一个关于员工所期望的内容的清单 , 但没有把清单列出来 。报告的开始部分就谈及了企业价值问题 , 而且是按照员工的立场角度写的 , 可惜并没有把这个问题展开 。
我并不在Netflix工作 —— 你也知道 (我在 Yahoo!工 作) —— 但我深切的感觉到 , 不管你在哪里工作 , 成为一个优秀的员工、优秀的软件开发工程师的过程是一样的 。下面所列举的都是伟大的程序员所具有的经验和品质 。
只做正确的事
对于软件这一行的人 , 我们有个很大的挑战 , 就是如何能够用正确的方法做事情 。什么是正确的方法 , 这依赖于你在做什么和为谁做 。而究竟所谓 “正确的方法”里都包括了什么内容 , 这并不是重点 , 重点是你是否能坚持按照这种方式做事 。初级程序员的问题通常是不能做到坚持 , 而资历较深的程序员却能始终坚持原则 。也许会有一个“非常紧急”的项目 , 或者这个项目很特殊 , 不能按常规过程开发 。这只是个假象 。好的程序员知道即使在任何情况和环境下都要坚持做正确的事情 。如果说按正确的方式开发将导致不能按时完成任务 , 那么 , 他们就会知道 , 这个项目是不能按时完工的 。不要妥协 , 工程质量是你作为一个优秀程序员的唯一终极证明 。确保你所有的代码都是在正确的方法下100%正确的写出的 。要按一个优秀的程序员的标准来要求自己 。
甘愿受苦
听起来很傻 , 但却是真的 , 优秀的程序员都乐于承担工作上给他们带来的痛苦 。你说出一个伟大的程序员 , 我都能告诉你 , 在他或她的职业生涯里 , 各个阶段 , 都曾有花好几天时间去解决一个问题的经历 。优秀的程序员品味着困难给他们带来的挑战 , 这让他们日以继夜 , 他们明白 , 问题必须要解决掉 。
不太优秀的程序员就不一样了 , 他们在刚刚碰到有麻烦的迹象时就先想到要寻求帮助 。在问题面前 , 他们习惯于去寻求帮助 , 而不是自己去努力解决这个问题 。他们最喜欢的一句话是:“帮我看看这个问题” 。伟大的程序员的第一反应是我要自己解决这个问题 。解决问题是种技能 , 是优秀的程序员非常看重的一种技能 。
好的程序员是通过痛苦的磨练才成为伟大的程序员的 。痛苦的磨练是说当你对这个问题实在无能为力时才去请求外援 。求助就意味着认输 ,  所有尽量减少这种处境的发生 。甘愿受苦 。和问题做不懈的斗争 。这就是你要学会的 。
注意: 我并不是说你不能寻求他人的帮助 。我说的是 , 你首先要尝试自己去完成任务 , 如果你不能完成 , 再寻求帮助 。不要在自己没有努力过前就轻易的求助 。你经常会发现 , 当你知道了解决方法后 , 你才认识到 , 你用自己的力量本也能解决这个问题的 。
学无止境
如果有人敢声称他不需要再学任何 新的知识 , 我是绝对不愿意和他共事的 。在有些行业 , 你也许很多年不学新的东西也能干的很好 , 但软件技术革新的如此之快 , 你不能不时刻关注 。你的老板是由于你有某些技能才花钱雇你的 , 如果你的技能已经落伍、过期了 , 那你也就没有价值了 。想成为一名伟大的程序员 , 你首先要承认你不是无所不知 , 你必须每天都要努力的寻找、学习新的知识 。
在你现在的公司里或组织里寻找能让你学习、让你钦佩的人 。在复杂的问题上征求他们的意见 , 看看他们是怎么思考的 。向他们介绍你的解决思路 , 请他们给予批评指点 。如果在你的周围你不能找出一个能作为你的导师的人 , 这要么是你还没有认真的寻找 , 要么是你留在了一个不该留的公司里 。如果你在现在的工作上不能学习进步 , 那是到了你该换个工作的时候了 。


推荐阅读