Loading...

大学未毕业

Original

2005年3月

(这篇文章的部分内容起源于我回复学生的问题。)

最近我收到了几封来自计算机科学专业本科生的电子邮件,询问在大学期间应该做些什么。我可能不是最好的建议来源,因为我在大学时主修的是哲学。但我上了那么多计算机科学课程,大多数计算机科学专业的学生都认为我是计算机科学专业的。至少我确实是一名黑客。

黑客

要成为一名优秀的黑客,你在大学期间应该做些什么?主要有两件事:成为一名非常擅长编程的人,并学习大量关于特定有趣问题的知识。这两件事实际上是等价的,因为每一件都会推动你去做另一件。

成为一名优秀的程序员的方法是(a)大量工作(b)解决困难的问题。而让自己去解决困难问题的方法是从事一个非常吸引人的项目。

这个项目很可能不会是一个课程作业。我的朋友罗伯特在本科期间通过编写网络软件学到了很多东西。他的一个项目是将哈佛大学连接到阿帕网;它曾经是最初的节点之一,但到1984年这个连接已经中断了。[1] 这项工作不仅不是为了一个课程,而且因为他把所有时间都花在这个项目上,忽略了学习,结果被学校开除了一年。[2] 最终一切都好起来了,现在他是麻省理工学院的教授。但你可能会更开心,如果你不要走到那种极端;那给他当时带来了很多担忧。

另一种成为优秀程序员的方法是找到其他擅长编程的人,并学习他们的知识。程序员倾向于根据他们从事的工作类型和使用的工具而划分成不同的部落,而有些部落更聪明。观察一下你周围的人,看看智力最强的人似乎在做什么;通常都有原因的。

你周围一些最聪明的人就是教授。所以一种找到有趣工作的方法是当研究助理。教授特别喜欢那些能为他们解决繁琐的系统管理类问题的人,这是进入门槛的一种方式。他们最担心的是浮夸和简历填充者。很常见的情况是,一名助理的结果会导致工作量净增加。所以你必须明确表示,你会让工作量净减少。

不要被拒绝所打击。拒绝通常比被拒绝者想象的要少个人因素。只需转向下一个。(这也适用于约会。)

要当心,因为尽管大多数教授都很聪明,但并不是所有人都从事有趣的工作。教授必须发表新颖的研究成果来推进自己的职业,但在更有趣的研究领域存在更大的竞争。所以一些野心较小的教授所做的就是输出一系列结论新颖但没人关心的论文。你最好避开这些。

我从未担任过研究助理,所以我觉得推荐这条路有点不诚实。我通过编写自己的东西来学习编程,特别是试图逆向工程Winograd的SHRDLU。我对那个程序着迷,就像一个母亲对待自己的新生儿一样。

独自工作的缺点虽然有,但优点是项目完全属于自己。你永远不需要妥协或征求任何人的许可,如果你有新的想法,你可以直接坐下来开始实现它。

在自己的项目中,你不必担心新颖性(像教授那样)或盈利能力(像企业那样)。唯一重要的是项目在技术上有多难,这与应用程序的性质无关。"严肃"的应用程序,如数据库,通常在技术上是平凡和乏味的(如果你曾经因失眠而苦恼,试着阅读关于数据库的技术文献),而"无关紧要"的应用程序,如游戏,通常非常复杂。我相信,有些游戏公司正在开发的产品,其知识含量要高于大学计算机科学系下九成的研究。

如果我现在在上大学,我可能会研究图形:一个网络游戏,或一个3D动画工具。当我还是本科生的时候,周围还没有足够的计算能力来使图形变得有趣,但现在很难想象还有什么比此更有趣的东西可以去研究。

数学

当我上大学的时候,很多教授相信(或至少希望)计算机科学是数学的一个分支。这种想法在哈佛大学最为强烈,直到20世纪80年代才有计算机科学专业;在此之前,人们必须主修应用数学。但在康奈尔大学也差不多如此。当我告诉那位可怕的康威教授我对人工智能感兴趣(那时是一个热门话题)时,他告诉我我应该主修数学。我还不确定他是认为人工智能需要数学,还是认为人工智能是胡说八道,主修一些严谨的东西会治愈我这种愚蠢的野心。

事实上,作为一名黑客所需要的数学知识,要远远少于大多数大学系所愿意承认的。我认为你只需要掌握高中数学加上一些计算理论的概念就足够了。(如果你想避免编写n^2算法,你必须知道什么是n^2算法。)除非你打算编写数学应用程序,比如机器人技术,它完全是数学。

但是,虽然你在技术上并不真的需要数学(在需要知道1001种微分公式的意义上),但学习数学本身是非常值得的。它是几乎任何工作的一个宝贵的隐喻来源。[3] 我希望我在大学时学习更多的数学,就是为了这个原因。

和很多人一样,我在童年时期遭受了数学虐待。我学会把数学看作一堆必须背诵以在考试中取得好成绩的公式,它们既不漂亮也与我的生活毫无关系(尽管有人试图把它们转化为"字词问题")。

在大学里你能做的最有价值的事情之一就是了解数学到底是什么。这可能并不容易,因为很多优秀的数学家都是糟糕的教师。虽然有很多关于数学的流行读物,但很少有看起来很好的。我能想到的最好的就是W. W. Sawyer的著作,当然还有欧几里得。[4]

一切

托马斯·赫胥黎说过"尽量学习一点关于所有事物的知识,并深入学习某一个领域的知识"。大多数大学都致力于实现这一理想。

但什么是"一切"呢?对我来说,它意味着人们在努力解决艰难问题的过程中所学到的一切。所有这些工作都倾向于相互关联,因为一个领域的思想和技术往往可以成功地移植到其他领域,即使它们看起来相当遥远。例如,我写文章的方式和我写软件的方式是一样的:我坐下来尽快打出一个糟糕的版本1,然后花几个星期重写它。

仅仅努力解决艰难的问题是不够的。中世纪的炼金术士们正在努力解决一个艰难的问题,但他们的方法如此荒谬,以至于几乎没有什么可从研究中学到的,除了可能是关于人们自我欺骗的能力。不幸的是,我在大学试图学习的那种人工智能也存在同样的缺陷:一个非常艰难的问题,却用毫无希望的技术来解决。大胆?更接近于欺骗。

社会科学也相当虚假,因为它们受到知识分子时尚的很大影响。如果一个物理学家遇到100年前的同事,他可以教他一些新东西;如果一个心理学家遇到100年前的同事,他们只会陷入意识形态的争论。是的,当然,你上一个心理学课程会学到一些东西。关键是,你在另一个系上课会学到更多。

在我看来,值得学习的系有数学、硬科学、工程、历史(尤其是经济史、社会史和科学史)、建筑和古典文化。艺术史概论课也可能有价值。现代文学很重要,但学习它的方式就是阅读。我对音乐了解不足,无法评论。

你可以跳过社会科学、哲学和最近因应政治压力而创立的各种系。这些领域确实谈论了重要的问题。但他们谈论的方式是无用的。例如,哲学谈论我们对彼此的义务;但你可以从一个睿智的祖母或E. B. White那里学到更多,而不是从一个学院派哲学家那里。

我是根据自己的经验说的。当人们嘲笑克林顿说"这取决于'是'这个词的含义"时,我可能应该感到被冒犯。我在大学里上了大约五门关于"是"这个词含义的课程。

另一种确定哪些领域值得学习的方法是创造退学图。例如,我知道很多人从数学转到计算机科学,因为他们发现数学太难了,但没有人反过来做。人们不会无缘无故地做一些很难的事情;除非它的回报成比例地(或至少是log(n))更丰厚,否则没有人会去研究一个更难的问题。所以数学可能比计算机科学更值得学习。通过类似的比较,你可以绘制出一个大学所有系的图表。在底部你会发现智力含量最低的学科。

如果你使用这种方法,你得到的答案大致会和我刚才给出的一样。

语言课程是一个例外。我认为它们更应该被视为课外活动,就像陶艺课一样。如果能结合在该语言国家生活一段时间,它们会更有用。我在大一的时候随意学习了阿拉伯语。这需要大量的工作,唯一持久的好处是一种奇怪的识别闪米特语根的能力和一些关于人们如何识别单词的见解。

绘画和创作写作课程是不确定因素。通常你不会学到太多东西:你只是在老师的模糊监督下,自己努力(或不努力)完成你想做的事情,然后围坐在一起评论彼此的作品。但写作和艺术都是非常困难的问题,有(一些)人诚实地努力解决,所以它们是值得做的,特别是如果你能找到一个好老师的话。

工作

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

理论上,博雅教育不应该提供职业培训。但每个人都知道这有点虚伪。黑客们在每所大学都学习实用技能,这并非偶然。

你应该学习什么来获得工作,取决于你想要的工作类型。如果你想在大公司工作,学习如何在Windows上hack Blub。如果你想在一家酷酷的小公司或研究所工作,你最好学习Ruby on Linux。如果你想自己创业,我认为这种情况会越来越普遍,那就掌握你能找到的最强大的工具,因为你将与竞争对手展开一场竞赛,他们将是你的马。

你在大学学习的技能和你在工作中使用的技能之间没有直接的对应关系。你在大学应该瞄准稍微高一些的目标。

在健身训练中,一个足球运动员可能会举起300磅,即使他在比赛过程中可能永远不需要施加这么大的力量。同样,如果你的教授试图让你学习比你在工作中需要的更高级的东西,这可能不仅仅是因为他们是学者,与现实世界脱节。他们可能是在试图让你用大脑举重。

你在课堂上编写的程序与你在现实世界中编写的程序有三个关键的不同之处:它们很小;你可以从头开始;问题通常是人为的和预先确定的。在现实世界中,程序更大,往往涉及现有的代码,而且通常需要你先弄清楚问题是什么,然后才能解决它。

你不必等到离开(或进入)大学才能学习这些技能。如果你想学习如何处理现有代码,你可以为开源项目做贡献。你想要工作的那种雇主会和你在课堂作业上获得的好成绩一样印象深刻。

在现有的开源项目中,你没有太多机会练习第三项技能,即决定要解决什么问题。但是你完全可以自己启动新项目。而且,好的雇主会对此更加印象深刻。

你应该尝试解决什么样的问题?回答这个问题的一种方法是问自己作为用户需要什么。例如,我偶然发现了一种很好的垃圾邮件过滤算法,因为我想停止收到垃圾邮件。现在我希望拥有一个能够阻止收件箱被塞满的邮件阅读器。我倾向于把收件箱当作待办事项列表。但这就像用螺丝刀开瓶子一样;我们真正需要的是开瓶器。

研究生院

那么研究生院呢?你应该去吗?如何进入一所好的研究生院?

原则上来说,研究生院是从事研究的专业培训,除非你想把研究作为职业,否则不应该去。然而,获得计算机科学博士学位的人中有一半并没有从事研究工作。我没有去研究生院是为了成为教授。我去是因为我想学习更多。

所以,如果你主要对编程感兴趣,而你去了研究生院,你会发现很多其他人和你一样处于不适应的状态。如果你周围一半的人和你一样不适应,你真的就不适应吗?

"计算机科学"中存在一个根本性的问题,这个问题在这种情况下浮现出来。没有人确定"研究"应该是什么样的。很多研究都是不得不以学术论文的形式呈现的黑客行为,以产生一个发表的机会。

所以问你是否会在研究生院感到自在有点误导,因为很少有人真正在计算机科学中感到自在。整个领域都不太适应自己的皮囊。所以你主要对编程感兴趣的事实并不应该阻止你去读研究生院。只是要警告你,你会不得不做很多你不喜欢的事情。

第一个就是你的论文。几乎每个人在完成论文时都会讨厌它。这个过程本质上倾向于产生一个令人不快的结果,就像用全麦面粉做的蛋糕,烘烤12个小时。很少有论文是被人愉快地阅读的,尤其是作者自己。

但在你之前已经有成千上万的人经历了写论文的痛苦。除了这个,研究生院几乎就是天堂。很多人回忆它是他们生命中最快乐的时期。而其余的人,包括我在内,也会回忆它是一个如果没有写论文就会很好的时期。[5]

研究生院的危险在于你看不到可怕的部分。博士项目一开始就像大学第二部分,有几年的课程。所以当你面临写论文的恐怖时,你已经在里面待了几年了。如果你现在退出,你就会成为一个研究生退学生,你可能不会喜欢这个想法。当罗伯特因为编写1988年的互联网蠕虫而被逐出研究生院时,我非常羡慕他找到了一种不带失败耻辱的方式退出。

总的来说,研究生院可能比大多数替代方案要好。你会遇到很多聪明的人,你阴郁的拖延也至少会成为一个强大的共同纽带。当然,最后你还有一个博士学位。我忘了这一点。我想这也值得一些东西。

博士学位最大的优势(除了作为学术界的工会卡之外)可能是它给你一些基本的自信。例如,我家里的霍尼韦尔恒温器有最糟糕的用户界面。我的母亲,拥有同样型号的恒温器,勤勉地花了一天时间阅读用户手册,学习如何操作她的恒温器。她认为问题出在她身上。但我可以告诉自己,"如果一个计算机科学博士都不能理解这个恒温器,那一定是设计得很糟糕。"

如果你在这个含糊其辞的推荐之后仍然想去读研究生院,我可以给你一些关于如何进入的可靠建议。我现在有很多计算机科学教授朋友,所以我了解招生的内幕。这与大学有很大不同。在大多数大学,招生官决定谁被录取。对于博士项目,教授们来决定。他们会努力做好,因为他们录取的人将成为他们的助手。

显然,在最好的学校,只有推荐信才真正重要。标准化测试毫无意义,成绩也不太重要。论文主要是一个让你自己说些愚蠢话而被取消资格的机会。教授们唯一相信的就是推荐信,最好是来自他们认识的人。[6]

所以如果你想进入博士项目,关键是给教授留下深刻印象。从我的教授朋友那里我知道,什么能给他们留下深刻印象:不仅仅是试图给他们留下深刻印象。他们不会被那些成绩好或想成为他们的研究助理以便进入研究生院的学生所吸引。他们会被那些成绩好并且想成为他们的研究助理是因为他们真正对这个话题感兴趣的学生所吸引。

所以在大学期间,无论你是想进入研究生院还是仅仅想擅长编程,最好的事情就是找出你真正喜欢的东西。骗骗教授让你进入研究生院是很难的,骗骗问题让你解决它们也是不可能的。大学是假装不再奏效的地方。从这一点开始,除非你想去为一家大公司工作,那就像回到高中,否则前进的唯一道路就是通过做你热爱的事情。

注释

[1] 似乎没有人介意,这表明1984年时,阿帕网(后来成为互联网)还是非常不重要的。

[2] 这就是为什么当我成为雇主时,我并不关心GPA。事实上,我们积极寻找那些从学校退学的人。我们曾在哈佛周围张贴海报,上面写着"你是否因为上课太忙于自己的项目而被开除?来为我们工作吧!"我们设法找到了一个被开除的孩子,他是一个很棒的黑客。

当哈佛开除本科生一年时,他们必须找工作。这个想法是要让他们看到现实世界有多糟糕,这样他们就会明白在大学里有多幸运。但这个计划对于来为我们工作的那个孩子来说适得其反,因为他比在学校玩得更开心,那一年从股票期权中赚的钱比任何教授的工资都多。所以他没有在一年后懊悔地回到学校,而是又休息了一年去了欧洲。他最终在26岁左右毕业。

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

Trevor Blackwell提醒你要上数学专业的数学课。"'面向工程师的数学'课程非常糟糕。事实上,任何'面向工程师的x'都很糟糕,其中x包括数学、法律、写作和视觉设计。"

[4] 其他强烈推荐的书籍:Courant和Robbins的《什么是数学?》;Hilbert和Cohn-Vossen的《几何与想象》。对于对平面设计感兴趣的人来说,Byrne的欧几里德也是一本不错的书。

[5] 如果你想过上完美的生活,最好的做法就是去读研究生,在前一两年内秘密完成论文,然后在接下来的三年里尽情享受,一章一章地发表。这个前景会让研究生垂涎欲滴,但我不知道有谁有足够的自律来做到这一点。

[6] 一位教授朋友说,他们每年录取的研究生中有15-20%是"长镜头"。但他所说的"长镜头"是指申请材料完美无缺,但没有人在录取委员会上认识推荐信的教授。

所以如果你想进入科学研究生院,你需要在一个有真正研究教授的大学上大学。否则,无论你有多出色,你在录取委员会看来都会是一个风险。

这意味着一个令人惊讶但似乎不可避免的结果:小型文理学院注定要衰落。大多数聪明的高中生至少会考虑进入科学领域,即使最终选择不这样做。为什么要去一个限制了他们选择的学院?

感谢 Trevor Blackwell、Alex Lewin、Jessica Livingston、Robert Morris、Eric Raymond以及几位匿名的计算机科学教授在草稿上的阅读,以及那些提出问题开始了这一切的学生。