(译) 是什么让一名程序员优秀

#programmer

原文:What Makes a Good Programmer?
译者:JohnWatsonDev
转载请注明出处 — 有节操工程师必备品质~

我刚刚读完两篇关于 Scott Rosenberg 《梦断代码》的沙龙文章。他认为“编程是困难的”,并且用开发 Chandler 项目的经验来佐证他的观点。Scott 提出一个关于大型项目开发的通用问题 - inconsistent terminology use across the software development team. At the same time he complements the members of the development team as being talented programmers. 这两种想法让我很困惑。一群高手程序员如何解决一个基本问题呢?解决此问题的程序员是否应当被称为“高手”?我期望的高手程序员到底该具备哪些技能呢?

在阐述之前,我想声明我并不是贬低 Scott 和 Chandler 项目。Scott 给出了许多极好的观点,它们丰富了我的阅历。事实上,我见过的每个大型项目都存在 Scott 描述的问题。特别是在我之前工作过的超大型项目里。在这些困难面前,我和其他程序员一样是有罪的。但是 Scott 描述的示例对于讨论软件开发来讲是很好的。

当人们谈论有才华的程序员时,通常认为他们能写出正确的代码,而且解决问题更加快速和优雅。我猜想这些就是 Scott 描述的 Chandler 项目组的高手程序员所具备的。编程技巧是具有个体差异化的,就这点来讲,一些人比其他人在写代码方面更具有天赋。大型团队项目 -- 开发周期几个月并且多于3名程序员 -- 需要的不止是编码技巧。在大型团队中,优秀的编程技巧是必要条件,它仅仅能保证你成为初级程序员,而不是高手程序员。

从入门到优秀

对于我来讲,优秀程序员的标志是不建议重写所有的东西。Scott 指出程序员喜欢编程 -- 并且他们不喜欢好好理解别人写的代码。这真是太对了。我曾一次又一次遇到聪明的初学者建议重写别人的代码。我曾注意到他们之间紧张的关系,许多次我听到他们建议重写一个大型项目。

优秀的程序员是有能力,并且愿意处理那些在项目周期内一个人无法重写的大型项目代码库。他们能认识到代码库有缺点,而且他们有专业素养 -- 知道如果修复每个人的问题代码无疑将杀死整个项目。相反,他们能够辨别哪些是必须修改的,并且有能力对庞大而丑陋的代码库作出有意义的修改而不引起其他冲突。

从优秀到卓越

如果优秀程序员的标志是可以很好的使用别人写的代码,那么卓越程序员的标志便是:他有能力写出团队里别人很乐意使用的代码。程序员是更善变的一类人群,如果你能够写一些低级程序员不建议重写的代码,那么你已经成功晋升到顶级程序员的行列了。卓越程序员可以写出足够好的代码,避免其他程序员搞出连累项目的问题。

不错的评论

普通程序员写出的代码只有大师能看懂。他们不能清晰的表达代码背后的思想。所以其他普通程序员想重写他们的代码。
卓越的程序员能够写出清晰易懂的代码,即使是初学者也能看懂。甚至如果他们的代码没写完,任何人都可以接着编写。
代码创作就是在沟通。顶级程序员相比初学者拥有更好的沟通技巧。

读后感

  • 不重复造轮子,但是要明白轮子的工作原理,这样有利于针对业务进行扩展。
  • 不追求完美,在项目时间允许的情况下尽量选择合适方案(请注意是合适的方案,而不是最优方案,就是怕掉入过度设计和过早优化的坑)。
  • 写出清晰易懂的代码。Martin Fowler 大叔名言送上:“任何傻瓜都能写出计算机可以理解的代码,好的程序员能写出人能读懂的代码。”

P.S.

文中保留的英文语句,本人能力有限,不敢瞎译,欢迎大家贡献合适的译文,谢谢。