English

程序员部落酋长Joel给计算机系学生的八个建议

2010-02-10 来源:中华读书报  我有话说

2005年1月2日,星期日

大概在一两年前,我还在高喊,有着良好用户体验的Windows图形界面式客户端(rich Windows GUI client)将是未来的潮流。尽管我这样说了,但是时不时地还是有大学生写信给我,问我对于

找工作有何建议。既然现在又到了招聘季节,我想我还是把我的标准建议写下来,让那些大学生读一读,笑一笑,然后忘掉。

大多数大学生都很自以为是,从不会虚心向前辈求教,他们觉得那样太麻烦。但是,很幸运,在计算机领域,这样做是对的。因为他们的前辈很可能会说一些不靠谱的话,比如“到2010年之前,对纸带打孔员的需求将超过1亿人”,还有“目前Lisp语言的相关人才非常抢手”。

我也不能例外,当我在给大学生提供建议时,我完全不知道我在说些什么。我已经无可救药地属于过时人物了。我真的搞不清楚AIM是什么,我仍然在使用一种老掉牙的叫做Email的东西,真是太恐怖了。那玩意流行的年代,人们听音乐还是用一种又扁又圆叫做CD的小圆盘。

所以,你最好直接漠视我在这里说的话,将时间用来开发某种可以使其他学生找到约会对象的在线软件上。

尽管如此,我还是会说出我的建议。

如果你喜欢编程,那么你真是受到了上天的眷顾。你是非常幸运的少数人之一,能够以自己喜欢的事谋生。大多数人没有这么幸运。

二话不说,下面就是Joel针对计算机专业学生的7条免费建议。(绝对超值哦。)

(1)毕业前练好写作。(2)毕业前学好C语言。

(3)毕业前学好微观经济学。

(4)不要因为枯燥就不选修非计算机专业的课程。

(5)选修有大量编程实践的课程。

(6)别担心所有工作都被印度人抢走。

(7)找一份好的暑期实习工作。

我会一一解释这7条建议。如果你头脑简单到我说什么你就做什么,那么你就不必读下去了。在这种情况下,我还要加上一条:

(8)寻求专业人士的帮助,培养你的自信心。

毕业前练好写作

如果不是Linus Torvalds不断地散布福音,请问Linux操作系统会成功吗?虽然他是一个非常聪明的计算机天才,但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过电子邮件和邮件列表用书面形式传播自己的想法,最终引起了所有人的注意。

你听说过现在风靡一时的“极限编程”(Extreme Programming)吗?我在这个地方不谈我对极限编程的看法,我只说如果你听过这个词,那么原因就是它的倡导者都是一些非常有才华的作家和演说家。

一个普通程序员与一个优秀程序员的区别,不在于他们懂得的编程语言谁多谁少,也不在于他们喜欢用Python语言还是喜欢用Java语言,而在于他们能否与他人交流思想。如果你能说服其他人,你的力量就可以得到放大。如果你能写出清晰的注释和技术规格说明书,其他程序员就能够理解你的代码,因此他们就能在自己的代码中使用,而不必重写。如果你做不到这一点,你的代码对其他人就没有价值。如果你能为最终用户写出清晰的使用手册,其他人就能明白你的代码是用来干什么的,这是唯一让别人明白你的代码有何价值的方法。SourceForge上有许多优美的、有用的代码,但是它们都像被埋葬了一样,根本没人来用,原因就是作者没有写好使用说明(或者压根就没写)。这样一来,他们杰出的代码就衰亡了。

大学里有些课程被公认为“写作密集型”(writing intensive)课程,这就是说为了拿到学分,你必须写作多得可怕的文字。一定要去上这样的课程!

你还可以动手写日记或者网志。你写得越多,写作就会变得越容易。写起来越容易,你就会写得越多。这是一个良性循环。

毕业前学好C语言

第二点我要讲的是C语言(是C语言,而不是C++)。虽然在实际使用中C语言已经越来越罕见,但是它仍然是当前程序员的共同语言。C语言让程序员互相沟通,更重要的是,它比你在大学中学到的“现代语言”(比如ML语言、Java语言、Python语言或者其他正在教授的流行垃圾语言)都更接近机器。你至少需要花一个学期来了解机器原理,否则你永远不可能在高级语言的层次写出高效的代码。你也永远无法开发编译器和操作系统,而它们恰恰属于目前程序员能够得到的最佳工作之列。别人也永远不会放心将大型项目的架构设计交给你。我不管你懂多少延续(continuation)、闭包(closure)、异常处理(exception handling),只要你不能解释为什么while(*s++=*t++);这句代码的作用是复制字符串,或者不觉得这是世界上对你来说再自然不过的事情,那么你就是在盲目无知的情况下编程。在我看来,这就好像一个医生不懂得最基本的解剖学就在开处方,他看病的根据完全是因为那些娃娃脸的医药厂商销售代表说这种药有用。毕业前学好微观经济学

如果你没有上过任何经济学课程,那么我首先来做一个超短的评论:经济学是这样的学科之一,刚开始学的时候轰轰烈烈,有许多有用的、言之有理的理论和可以在真实世界中得到证明的事实,等等;但是,再学下去就每况愈下,有用的东西就不多了。经济学一开始那个有用的部分正是微观经济学,它是商业领域所有重要理论的基础。

为什么计算机系的学生也应该学经济学?我无法告诉你有多少次我是那样地充满挫折感,因为我看到了太多的提出一些疯狂的想法的程序员,这些想法在代码上也许可行,但在资本主义世界中毫无意义。如果你懂得商业规则,你就是一个更有价值的程序员,你会因此得到回报的,但是前提是你要去学习微观经济学。

不要因为枯燥就不选修非计算机专业的课程

想提高GPA绩点的一个好方法就是多选修非计算机系的课程。千千万万的人事经理和招聘人员在拿到一份简历的时候,第一眼就会去看GPA,包括我也是这样。GPA中包括了四年大学期间你的小论文、期中考试和课堂表现,总数有几百次之多。

为什么我要关心某人的“欧洲历史”课程成绩呢,毕竟作为雇主我要找的应该是程序员啊?何况,历史是那么枯燥,不得高分很正常。哦,这么说来,你的意思是我应该雇用你,而不用考虑一旦工作变得枯燥你会不会努力工作?别忘了,在编程工作中也有很枯燥的东西。每一项工作都有枯燥难耐的时刻。我不想雇用那些只想干有趣事情的人。

在大学里,我选修过一门叫做“文化人类学”(Cultural Anthropology)的课程。因为我很好奇,想知道这门课会讲什么,想学一点关于人类学的知识,看上去这很像一门有趣的概论类课程。

这门课有趣吗?连有趣的边都沾不上!但是,我忍住了,继续往下学。我逐渐下定决心,就把文化人类学当成我的抗无聊免疫剂。如果我想在这门课的考试中得到A,那么就连印第安人在冬庆节中使用的毯子,我都必须知道得一清二楚。如果我做到了,那么我就无敌了。后来,出于偶然我坐在林肯中心听完了整整8个小时瓦格纳的歌剧《指环》(RingCycle)。幸亏我在文化人类学中已经尝过研究夸扣特尔人(Kwakiutl)的滋味,两相比较,我觉得坐着听8个小时歌剧可谓愉快经历。

最后,我在那门课中得到了A。如果我能做到,你也一定能做到。选修有大量编程实践的课程

计算机科学与软件开发不是一回事。如果你真的非常幸运,你的学校可能会开设很像样的软件开发课程。但是另一种可能是,你的学校根本不教你在现实中如何编程,因为精英学校都觉得,教授工作技能最好留给职业技术学校、犯人重返社会的培训项目去做。你到处都能学怎么写代码。别忘了,我们是耶鲁大学,我们的使命是培养未来的世界领袖。你交了16万美元的学费,却在学循环语句的写法,这怎么可以?你以为这是什么地方,难道是机场沿途的酒店里临时拼凑起来不靠谱的Java语言培训班?哼哼。

麻烦在于我们没有一种真正教授软件开发的专门学校。你如果想成为一个程序员,你可能只能选择计算机科学专业。这是一个不错的专业,但是它同软件开发不是一回事。

不过,你运气好的话,计算机系会开出许多有大量编程练习的课程,你可以选修它们。这就好比历史系里有许多课程要求你大量写作,你因此学会了如何写作一样。在那些400等级的课程代号中,去寻找名称中带有“Practicum”这个词的课程。不要被这个拉丁语单词吓倒,这些都是有用的课程,之所以起这种名字,只是为了让那些文绉绉、装腔作势、满嘴胡说八道的公司经理们觉得高深莫测。

别担心所有工作都被印度人抢走

我首先要说的是,如果你本身就已经在印度了,或者你就是印度人,那么你真的毫无必要去想这件事,根本不用琢磨所有的工作机会是不是都跑到了印度。那些都是非常好的工作,好好的享受吧,祝你身体健康。

但是,我不断听说计算机系的入学人数下降得很厉害,已经到了危险的程度。根据我听到的说法,其中的一个原因是“学生们不愿去学一个工作机会都流向印度的专业”。这种担心大错特错。

首先,根据一时性的商业潮流决定个人的职业选择,这是愚蠢的。其次,即使编程工作无一幸存地都流向了印度和中国,但是学习编程本身依然是一种第一流的素质训练。再次,不管是在美国还是在印度,真正优秀的程序员依然是非常非常短缺的。不错,确实有相当一批失业的IT从业者在那里鼓噪,不过我倒是知道一件事:99%的律师都痛恨他们的工作,痛恨他们当律师的每一分钟。可是,律师每周的工作时间偏偏长达90小时。找一份好的暑期实习工作

精明的招聘负责人都知道,喜欢编程的人高中时就将牙医的信息输入了数据库,进入大学前就去过三次电脑夏令营,为校报做过内容管理系统,有过软件公司的夏季实习经历。招聘负责人就是要在你的简历上找这些东西。

如果你喜欢编程,就不要随便什么工作都答应,否则你会犯下最大的错误。不管是暑期工作,还是兼职或者其他性质的工作,只要与编程无关,就不要轻易接受。我知道,其他19岁的孩子都想去购物中心里打工,在那里折叠衬衫。但是你与他们不同,你19岁时就已经掌握了一门非常有价值的技能。将时间浪费在折叠衬衫上是很愚蠢的,等到毕业的时候,你的简历上本应该写满了一大堆与编程相关的经历。

如果你听从了我的建议,你还是有可能落得一个悲惨的下场,比如很早就卖掉了微软公司的股票,再比如拒绝了谷歌公司的工作机会,原因是你想要一间自己的可以关上门的独立办公室,或者做出了其他生命中愚蠢的决定。但是,这些可不是我的错。我一开始就告诉过你,不要听我的话。

  (本文选自《软件随想录:程序员部落酋长Joel谈软件》,有删节。该书由[美]斯伯尔斯基(JoelSpolsky)著,阮一峰译,人民邮电出版社2009年12月,49.00元)

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有