回想起来就像是在昨天。那是2000年,在数据结构课程的课堂上,Pargas博士站在前面给我们讲一些关于数据结构的话题,一个SSH的画面投影在我们前面的墙上。有人问了一个问题,他说了一些东西,差不多是这样的话“是这样,如果你想成为一个真正的计算机科学家,你需要从现在开始就使用vi编辑器”。我想他是在笑谈,课后感觉他说的话并不是完全的正确,但作为年轻且容易被感染的我,回到寝室立刻就开始学习如何使用vi。学习过程不容易,花费了不少时间,但一旦掌握了其中的窍门,我发现,使用vi的确可以更快的做事情。
时间推到6年前,那时我对TextMate十分的着迷。我的工作是做Java开发,但同时我学习Rails,在业余时间开发一些Rails项目。那时几乎所有我读的文章和观看的视频都是说明和演示如何使用TextMate来完成文本编辑工作的方法技巧的。事实上,我每天都在使用的Eclipse想要把我变成一头蠢猪。于是,我买了一台Mac电脑,开机后十分钟内我就买了一套TextMate装了上去。 说老实话,这两种编辑器没有一种使我成为一个更好的程序员。
优秀的工具并不会把你变得更优秀。你使用的工具确实很重要。事实上,它们非常棒。但老虎伍兹即使用几根树枝也能把我们全部打败,梅西即使不穿鞋也能把我们踢的很惨,拉斐尔-纳达尔即使使用一个60年代产的老式木质网球拍也能把我们任何一个人打败。该死,他即使用乒乓球拍也能打败我们。技术,知识,以及锻炼出来的经验是你在与人对比中最重要的部分。
所以,工具造就不出程序员。那什么可以呢?我想,造就一个伟大的程序员的诸多因素都依赖于你所从事的事和与你共事的人,但从很多在软件开发领域取得了巨大成功的人身上,我看到了很多共同的特征,我觉得值得与你们分享一下。我并不确定这些特征你是否能学得到,或者你天生就有,但我强烈的感觉到,如果我能花更多了时间去追求这些特征,而不是钟情于更换编辑器,我一定能取得更大的进步。
以人为本我知道的最好的程序员总是把人放在第一位。他们明白他们是在为人写软件,即使那只是一些复杂系统的后台程序或协议,除了程序员没有人会用到它们。他们写文档,因为这很重要。他们帮助其它人如何使用自己的程序代码。他们愿意付出更多的努力去解决更复杂的问题来让人们以正确的方式使用他们的软件。
对学习有很大的胃口神奇的程序员对知识有一种可笑的饥渴感。他们总是对你说一些新的、有趣的东西。他们习惯于大量的阅读(不论在线的还是线下的),他们喜欢尝试,从中学到经验。他们对新出现的语言和平台毫不担忧恐惧。
掌握问题规律的本领当你做开发有了一段时间后,你会发现有时出现的问题和你曾经处理过的问题看起来惊人的相似。能够识别这些问题,把过往的解决方案应用到你当前的问题上,这是一个很有用处的本领。如果每次都能改进这个方案,那是更好了。 注意,这并不意味这你可以盲目的认为过去这个方案可行,现在它就一定可行。这种过往问题和现在出现的问题的类型匹配是很有技巧性的。你需要认真判断何时使用一个历史方案是可行的,什么时候是不行的。
有一点神经质我弟弟在高中时上了一次Python课,当我问他是否喜欢这课时,他说我脑袋一定出问题了才去愿意当一名程序员,他说编程是他这辈子子做过的最无聊的一件事。从某种程度上讲,他是对的。大多数的日子里我是对着计算机说话,而不是人。想到这些要把一行一行的基本的长长短短的语句拼成一个软件,我不由的打了大大一个冷战。并不是所有的人都喜欢做这种事情,但是我知道的最优秀的程序员绝对是热爱制作软件的。
执着软件开发是一个实际上比任何人的想像都要缓慢的开发过程。它很费时间。有时候你必须要有最够的耐心去精雕细琢出你需要的代码。有时,作为程序员,我们会写出非常有趣的代码,但也有时候,我们不得不哭丧着脸去写一大堆过去曾经写过的代码。想想伟大的程序员之所以能坚持下来,是因为他们能看到他们所从事的事业的大蓝景,他们喜欢这一点一点走向目标的开发过程。 这就是我想到的构成一个优秀程序员的一些特征,但这并不是全部,所以我想听听你的观点。你认为是什么使一个程序员变的优秀?
|