Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

本科生那些事

原文:Undergraduation
作者:Paul Graham 发表:2005-03
译者:Claude(baoyu-translate)

2005 年 3 月

(本文部分内容最初是给写信问我问题的学生的回复。)

最近我收到几封计算机科学本科生的邮件,问大学里该做些什么。我可能不是最合适的请教对象,因为我在大学读的是哲学。但我修了那么多 CS 课,多数 CS 专业的学生都以为我是同行。至少,我确实是个黑客。

Hacking

要在大学里成为一个出色的黑客,你该做什么?主要有两件事:把编程练得很好,以及深入了解一些具体而酷的问题。这两件事其实是同一件,因为它们彼此驱动。

把编程练好的方式是 (a) 大量地工作 (b) 在难的问题上工作。而让自己在难的问题上工作的方式,是去做一个非常吸引你的项目。

这个项目大概率不会是课程作业。我的朋友 Robert 在本科时通过编写网络软件学到了很多。其中一个项目是把哈佛接入 Arpanet——它本来就是最早的节点之一,但到了 1984 年,那条连接已经死掉了。[1] 这工作不仅不是为了课程,而且因为他把所有时间都花在上面、荒废了学业,他被学校开除了一年。[2] 最后一切都扯平了,如今他是 MIT 的教授。但你大概不要走到那种极端会更幸福;那时候他焦虑得很。

练好编程的另一种方式,是找到那些已经擅长编程的人,学他们所知道的。程序员往往按工作类型和工具把自己分成不同的部落,有些部落比另一些更聪明。环顾四周,看看聪明人都在做什么;这通常是有原因的。

身边最聪明的人里,有一些是教授。所以找到有趣工作的一个办法,是去给教授当研究助理。教授尤其欢迎那些能替他们解决琐碎的系统管理类问题的人,那是叩门的好办法。他们怕的是不靠谱的人和来刷简历的人。请到一个助理结果反而让自己工作量净增加,这种情况太常见了。所以你必须让对方明白:你会让他的工作量净减少。

如果他们说不,别气馁。被拒几乎总是没有当事人想得那么针对个人。直接换下一个。(这条对约会也适用。)

不过要小心,虽然多数教授是聪明的,但并非所有人都在做有趣的事。教授必须发表新颖的成果来推进职业生涯,而越有趣的研究领域竞争越激烈。所以野心较小的教授会做一些结论“新颖“的论文——之所以新颖,是因为没人在乎。这种你最好绕开。

我自己从没做过研究助理,所以推荐这条路时我有点心虚。我学编程是靠自己写东西,尤其是试着对 Winograd 的 SHRDLU 做逆向工程。我对那个程序的痴迷不亚于一个母亲对刚出生的孩子。

不管单干有什么坏处,好处是项目完全是你自己的。你不必妥协,不必征得任何人同意;如果有了新想法,你坐下来直接动手实现就行。

在自己的项目里,你不必担心新颖性(教授要担心的)或盈利能力(公司要担心的)。唯一重要的是这个项目在技术上有多难,而难度跟应用本身的性质毫无关系。“严肃“应用比如数据库,技术上往往琐碎而无聊(你要是失眠,试试读读数据库的技术文献);而“无聊“应用比如游戏,技术上往往非常精妙。我敢说,外面的某些游戏公司在做的产品,其智识含量超过了大学 CS 系底下九成研究的水平。

要是我现在还在读大学,我大概会做图形:比如一款网络游戏,或者一个 3D 动画工具。我读本科那会儿,机器周期还不够多,做图形没什么意思;但今天,很难想象有比这更好玩的事了。

数学

我在大学时,很多教授相信(或至少希望)计算机科学是数学的一个分支。这种想法在哈佛最强烈,那里直到 1980 年代才有 CS 专业;在那之前你必须主修应用数学。康奈尔也好不到哪去。当我告诉那位令人生畏的 Conway 教授我对 AI(当时的热门话题)感兴趣时,他叫我去主修数学。我至今不确定他是认为 AI 需要数学,还是认为 AI 是胡扯,主修一门严谨的学科可以治好我这种愚蠢的野心。

事实上,作为黑客你需要的数学,比大学院系愿意承认的要少得多。我觉得超过高中数学加上几个计算理论的概念,并不需要更多。(你得知道什么是 n^2 算法,才能避免写出这种算法。)当然,除非你打算写数学应用。比如机器人,那全是数学。

但是,虽然多数 hacking 字面上不需要数学——不需要 1001 种求导公式的技巧——数学本身仍非常值得学习。它是几乎任何工作的隐喻富矿。[3] 出于这个原因,我希望大学里我多学了点数学。

像很多人一样,我从小被数学折磨过。我学到的数学是一堆公式:既不美,也跟我的生活毫无关系(虽然总有“应用题“试图把它翻译过去),只能背下来才能考好。

大学里你能做的最有价值的事之一,就是搞清楚数学到底是怎么一回事。这未必容易,因为不少出色的数学家都是糟糕的老师。市面上数学普及书很多,但好的没几本。我能想到最好的是 W. W. Sawyer 写的几本。当然还有欧几里得。[4]

万物

赫胥黎说:“试着对万物了解一些,对一物了解所有。“多数大学瞄准的就是这个理想。

但什么算“万物“?对我来说,它指的是人们诚实地在难问题上工作时学到的一切。所有这种工作往往是相通的,一个领域的想法和技巧常常可以成功地移植到别的领域。哪怕是看上去离得很远的领域。比如我写随笔的方式跟我写软件一样:坐下来,以最快的打字速度敲出一个糟糕的版本 1,然后花几周重写。

只是在难的问题上工作还不够。中世纪的炼金术士也是在做难的问题,但他们的方法太荒诞,研究他们的工作没多少东西可学,除了也许能学到人有多么自欺。不幸的是,我在大学想学的那种 AI 也有同样的毛病:一个非常难的问题,被人轻佻地用毫无希望的、远远不够的方法去对付。算大胆?更接近欺诈。

社会科学也相当荒诞,因为它们太受智识潮流的影响了。一个物理学家碰到 100 年前的同行,他能教对方一些新东西;一个心理学家碰到 100 年前的同行,他们只会陷入意识形态争论。是的,当然,上一门心理学课你会学到点东西。问题在于,去别的院系上一门课你能学到更多。

在我看来,值得上的院系是:数学、硬科学、工程、历史(特别是经济史、社会史和科学史)、建筑学,以及古典学。艺术史的概论课可能有价值。现代文学很重要,但学习它的方式就是去读。音乐我懂得不够多,不好说。

社会科学、哲学,以及近年因政治压力而设立的各种新院系,可以跳过。这些领域里很多确实在谈重要问题。但他们谈的方式没用。比如哲学谈到的话题之一是我们彼此之间的责任;但关于这件事,从一位睿智的祖母或 E. B. White 那里你能学到的,比从一位学院派哲学家那里多。

这话我是有切身体会的说的。当人们因为克林顿那句“这取决于’是’这个词的’是’是什么意思“而嘲笑他时,我大概应该觉得被冒犯。我在大学里大约上了五门关于“’是’是什么意思“的课。

判断哪些领域值得学的另一个方法,是画出_退学图_。比如,我认识许多从数学转到计算机科学的人,理由是数学太难;反过来转的一个都没有。人不会无缘无故去做难事;除非回报相称地高(或至少是 log(n) 高),没人会去做更难的问题。所以数学大概比计算机科学更值得学。用类似的对比你可以画出整所大学所有院系的图。最底下你会找到那些智识含量最低的科目。

如果你用这个方法,得到的答案会和我刚刚给的差不多。

语言课程是个例外。我觉得它们更应该当作课外活动,跟陶艺课一样。如果能配合在使用该语言的国家住一段时间,会有用得多。我大一时心血来潮学了阿拉伯语。工作量很大,唯一持续的好处是奇怪地能识别闪族语系的词根,以及对人如何识别词语的一点洞见。

工作室艺术和创意写作课是难以预料的。通常你不会被教什么:你只是在老师含糊的督导下做(或不做)你想做的东西,然后围坐互相“讲评“对方的作品。但写作和艺术都是有些人在认真攻克的极难问题,所以值得做,尤其是如果你能找到一位好老师。

工作

当然,大学生要考虑的不只是学习。还有两个实际问题:工作和研究生院。

理论上,liberal education 不该是职业培训。但人人都知道这话有点哄人。每所大学的黑客都在学实用技能,且不是偶然的。

为了找工作你该学什么,取决于你想要哪种工作。如果你想去大公司,就学怎么在 Windows 上 hack Blub。如果你想去酷的小公司或研究实验室,你最好学会在 Linux 上写 Ruby。如果你想自己开公司——我相信这会越来越普遍——那就掌握你能找到的最强大的工具,因为你将和你的竞争对手赛跑,而工具就是你的马。

你在大学里该学的技能和工作中要用到的,并不是直接对应的。在大学里你应该把目标定得稍微高一点。

橄榄球运动员训练时可能卧推 300 磅,尽管比赛中可能从不会用到这么大的力。同理,如果教授让你学的东西比工作中需要的更高深,未必只是因为他们是学者、脱离了现实世界。他们可能是想让你用脑子举重。

你在课上写的程序,跟你在现实世界里要写的,有三处关键不同:它们小;你可以从零开始;问题通常是人为的、给定的。在现实世界里,程序更大,往往涉及已有代码,并且常常需要你先搞清楚问题是什么,才能着手解决。

学会这些技能,你不必等到离开(甚至进入)大学。比如要学会处理已有代码,你可以为开源项目做贡献。你想去的那种雇主,会把这看得跟课程作业的好成绩一样重要。

在已有的开源项目里,你不太能练到第三种技能——决定要解决什么问题。但没什么阻止你自己启动新项目。好的雇主会更看重这一点。

你该尝试解决什么样的问题?回答这个问题的一种方法,是问问自己作为用户需要什么。比如我之所以撞上一个不错的反垃圾邮件算法,是因为我想不再收到垃圾邮件。现在我想要的是一个能阻止收件箱被填满的邮件客户端。我老把收件箱当 todo list。但这就像拿螺丝刀开瓶盖;人真正想要的是开瓶器。

研究生院

研究生院呢?该不该去?怎么进一所好的?

原则上,研究生院是对研究的职业训练,除非你想以研究为业,否则不该去。然而 CS 拿到博士的人里有一半不去做研究。我读研不是为了当教授,是因为想多学点东西。

所以如果你的兴趣主要在 hacking 而你去读了研,你会发现身边一大堆同样不在状态里的人。如果身边一半人和你一样不在状态里,那你算不算真的不在状态里?

“计算机科学“里有一个根本问题,在这种场景下会冒出来。没人确定“研究“应该是什么。很多研究就是 hacking,被硬塞进一篇学术论文的形式里,挤出多一份发表量。

所以问你在研究生院会不会感到自在,这问题本身就有些误导,因为很少有人在计算机科学里真正自在。整个学科都跟自己的皮肤格格不入。所以你的兴趣主要在 hacking,这不该让你打消读研的念头。只是要先知道:你将不得不做很多你不喜欢的事。

排第一的是你的论文。几乎每个人写完论文时都恨它。这个过程天然倾向于产出一个不愉快的结果,像一块用全麦面粉烤了十二小时的蛋糕。能让人愉快读完的论文很少,尤其作者本人。

但在你之前,已经有数千人熬过了写论文这件事。除此之外,研究生院近乎天堂。许多人记得它是一生中最快乐的时光。剩下的几乎所有人,包括我自己,都记得它本来会是——如果不必写论文的话。[5]

研究生院的危险是你看不到吓人的部分在前面等着。博士项目一开始像大学第二季,先上几年课。所以等你直面写论文的恐怖时,已经投入了好几年。这时退出,你就成了研究生院的退学者,你大概不会喜欢这个标签。1988 年 Robert 因为写了那个互联网蠕虫被研究生院开除时,我无比羡慕他找到了一种体面退出而不带失败污名的方式。

总的来说,研究生院大概比大多数替代选项要好。你会遇到很多聪明人,你那阴郁的拖延症至少能成为彼此之间强韧的纽带。当然最后你拿到了一个博士。我差点忘了。我想这总归值点什么。

博士的最大好处(除了它是学术界的工会卡之外),可能是它给你某种基线自信。比如我家里的 Honeywell 恒温器有一套糟糕透顶的 UI。我母亲有同款,她乖乖花了一整天读用户手册才学会怎么操作她那台。她以为问题在自己身上。但我可以这样想:“如果一个有计算机科学博士的人都看不懂这个恒温器,那它_肯定_设计得很烂。”

如果在听完这番暧昧的推荐之后你还想读研,关于怎么进,我可以给你扎实的建议。我很多朋友现在是 CS 教授,所以录取的内幕我是知道的。这跟本科很不同。多数本科招生由招生办决定。博士项目是教授决定的。他们会认真地决定,因为录进来的人将给他们干活。

显然,最好的学校只看推荐信。标化考试不算分,成绩也几乎不算。文书主要是给你一个机会,让你说点蠢话来把自己除名。教授唯一信任的就是推荐信,最好来自他们认识的人。[6]

所以如果你想进博士项目,关键是给教授留下印象。从我那些教授朋友那里,我知道什么能让他们留下印象:不只是想给他们留下印象。他们不会被那些为了进研究生院才去拿好成绩、才想当研究助理的学生打动。他们会被那些拿到好成绩、想当研究助理是因为真的对那个题目感兴趣的学生打动。

所以无论你是想读研还是只想擅长 hacking,大学里你能做的最好的事,就是搞清楚你真正喜欢什么。骗过教授让他们录你进研究生院很难,骗过问题让它们让你解开根本不可能。大学是装不下去的地方。从这一刻起,除非你想进大公司——那等于退回高中——唯一往前走的路就是去做你热爱的事。

注释

[1] 似乎没人在意,可见直到 1984 年 Arpanet(后来变成了互联网)有多么不重要。

[2] 这就是为什么我后来当雇主时不在乎 GPA。事实上我们主动去找那些被学校挂掉的人。我们曾在哈佛各处贴海报:「你刚因为把所有时间都花在自己的项目上、课程挂科被开除了吗?来给我们干活!」我们真找到了一个这样的孩子,他是个非常棒的黑客。

哈佛把本科生开除一年时,要求他们去找工作。本意是让他们见识真实世界有多糟,好懂得自己留在大学有多幸运。这个计划在那个来给我们干活的孩子身上失败了,因为他比在学校时更开心,那一年里靠期权挣的比他任何一位教授的工资都多。所以年底他没有悔改地爬回去,而是又休了一年学跑去欧洲。最后他大约 26 岁才毕业。

[3] Eric Raymond 说,对黑客最好的隐喻来自集合论、组合数学和图论。

Trevor Blackwell 提醒你去上面向数学专业的数学课。「『工程师用的数学』烂得很。事实上任何『给工程师的 x』都烂,x 包括数学、法律、写作、视觉设计。」

[4] 其他强烈推荐的书:Courant 和 Robbins 的 What is Mathematics?;Hilbert 和 Cohn-Vossen 的 Geometry and the Imagination。对平面设计感兴趣的,参见 Byrne 版欧几里得

[5] 假如你想过一种完美的生活,办法是去读研,头一两年偷偷把论文写完,接下来三年尽情享受,再一章一章慢慢吐出来。这个前景能让研究生口水直流,但我没听说过谁有这种自律真的做到了。

[6] 一位教授朋友说,他们每年录取的研究生里有 15-20% 是「冒险投注」。但他说的「冒险投注」指的是申请材料各方面都完美无缺,唯独招生委员会里没人认识写推荐信的那些教授。

所以如果你想进理工科的研究生院,你需要去一所有真正做研究的教授的大学读本科。否则在招生委员会眼里你就是个有风险的赌注,无论你本人多优秀。

由此推出一个出人意料但似乎不可避免的后果:那些小型的文理学院注定要消亡。

多数聪明的高中生至少会考虑过走理工科路线,哪怕最终没选。为什么要去一所限制了他们选项的大学?

致谢 Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond,以及几位匿名 CS 教授阅读了本文的草稿;也感谢那些以提问开启了这篇文章的学生们。