是什么成就了卓越的程序员?
这件事仿佛发生在昨天一样令我印象深刻。那是2000年,帕尔加斯博士站在我们的数据结构课教室的前方,讲解着一些y型数据结构的内容,同时把一个SSH 的窗口投影在我们前面的墙上。有人提出了一个问题,随后他用下面的话回答道:“如果你想成为一个真正的计算机科学家,你就得开始用 Vi 。”我感觉他在说这些话的时候还在微微笑着,而事后发现他说的这个观点根本不对。 但是由于年轻并且易受影响,当时的我回到宿舍后立刻了开始了自学如何使用 Vi 。我度过了很长一段艰苦的时间,但是当我开始变得对其熟悉的时候,我意识到我用 Vi 会干的非常快。
(译者注:SSH 为 Secure Shell的简称;Vi 是 linux 环境下的文本编辑器。)
六年之后的我爱上了TextMate。我当时的工作是Java开发,而在那同时我也在闲暇时间学习 Rails 并制作 Rails 项目。我感觉我看过的所有文章和视频都在讲述如何使用 TextMate 来完成文本编辑的苦行。其实,每天使用Eclipse 使我像书呆子一样脾气暴躁。于是我买了台Mac,并且十分钟之内就购买并安装上了 TextMate.
(译者注:TextMate是一款文本编辑软件,Eclipse是一个著名的集成开发环境。)
老实说,我并没有因哪款文本编辑器而成为一个更优秀的程序员。
特别好用的工具并不能让你变得突飞猛进。你所使用的那些工具的确很重要,或者说,它们其实非常好用。然而老虎伍兹就算用一套烂球杆也会打败我们所有人,梅 西就算不穿球鞋都能胜过我们,拉斐尔·纳达尔也许用一把六十年代的老式木质球拍就能在网球场上击败我们中的任何一个人。见鬼,估计他用一个乒乓球拍就能打败我。你所积累的那些技术,知识和经验才是最重要的部分。
工具并不能使你变成一个程序员。那什么可以呢?我认为,成为一个优秀的程序员在很多方面取决于:你做什么工作,你和什么人一起工作。然而我发现,在软件开发领域取得很大成功的人身上都有些共有的特质,是值得我们分享的。我不确定这些是你需要去特地学习的技巧亦或是你与生俱来的能力,但我非常确定的是,我若在这些方面多花些心思,少花些功夫更换文本编辑器,那么我一定比现在的职位更高。
(补充:关于编程工具,罗布·沃林(Rob Walling)在《成为更优秀的开发人员》中的观点是:从长远看,程序员必须使用可以最大地提高工作效率并且不会影响到其他的组员的工具。)
1. People First 以人为本
我所认识的最好的程序员们会把人放在第一位。他们已经意识到就算他们编写的软件,其实只是个复杂系统的后台或是只有开发者会使用的协议,它还是给人们使用的。他们为软件编写文档,因为这很重要,他们为别人重用他们的代码伸出援手。他们愿意去做额外的工作,并且处理更复杂的问题,只为了给使用他们软件的人们一 个最好的解决方案。
2. Appetite for Learning 求知若渴
那些出类拔萃的程序员们都对知识如饥似渴。他们总是告诉你一些前沿的或有趣的东西。他们读着成百上千的书(既有在线读物也有离线读物),而且他们似乎总是乐于亲手尝试,也乐于在经验中汲取知识。他们不惧怕尝试新语言或者新平台。
3. Skillful at Problem Pattern Matching 擅长匹配问题
当你写了一阵软件程序后,你开始发现问题的存在。那些问题和你曾解决过的问题看起来相似得让人头痛。认识到这件事情并把原来的解决方案应用到当前状况,这种能力是非常重要的。如果你能每次改进你的解决方案那就更好了。
注意,就算如此,你也不应该盲目的说什么“因为用这个旧方案解决过老问题,所以它肯定可以用来解决新问题”。 这个部分才是应用“问题模式匹配”的技巧所在。你必须拥有一双可以甄别应用旧方案是否可行的慧眼。
4. A Little Bit Insane 少许疯狂
我的兄弟在高中四年级上了Python课程,当我问起他喜不喜欢这个课的时候,他表示我想当程序员这个主意真是疯了,那个课是他上过的最无聊的课程之一。在某些程度上,我同意他的观点。我和计算机交流的时间比和人交谈的时间更多。我能把一行行基本上称之为胡言乱语的东西变成可以运行的软件,这一事实令我大吃一惊。并不是所有的人都热爱这些东西,但是那些我所认识的最好的程序员们绝对是热爱制作软件的。
5. Persistentence 坚持不懈
软件开发总是比所有人想象的都要慢。它很花时间。有时候你只能足够耐心的去做出你需要写的代码。有时,作为开发者,我们想去写一些很有趣的代码,但是有时我们也会因为要去敲打那些已经写了上百遍的代码而厌烦。我相信那些最棒的开发者们能坚持下来,是因为他们可以看到一幅他们正在干的事情的宏图,并且他们喜欢为最终结果而添砖加瓦的过程。
以上这些特点是我认为一个真正优秀的程序员所应该具备的,这当然不尽完善,所以我也乐于了解你们的意见。你觉得要怎样才成为一个卓越的程序员呢?