Loading...

本科教育

Original

2005年3月

(这篇文章的部分内容最初是对写信给我的学生提问的回复。)

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

黑客

你在大学里应该做些什么才能成为一个 优秀的黑客?你可以做两件主要的事情:变得非常擅长编程,并学习很多特定的、有趣的问题。这两者实际上是等价的,因为每一项都促使你去做另一项。

要在编程方面表现出色的方法是(a)大量工作(b)解决困难的问题。而让自己去解决困难问题的方法是参与一些非常吸引人的项目。

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

另一种提高编程能力的方法是找到其他擅长编程的人,学习他们所知道的。程序员往往根据他们所做的工作类型和使用的工具将自己分成不同的部落,而有些部落比其他部落更聪明。环顾四周,看看聪明的人似乎在做什么;通常是有原因的。

你周围一些最聪明的人是教授。因此,找到有趣工作的一个方法是自愿担任研究助理。教授特别希望能找到能够为他们解决繁琐的系统管理问题的人,这样你就可以借此机会进入这个领域。他们最害怕的是那些不靠谱和简历造假的人。助理的工作往往会导致工作量的净增加。因此,你必须明确表示你会带来净减少。

如果他们拒绝你,不要气馁。拒绝几乎总是比被拒绝者想象的要少个人化。继续寻找下一个机会吧。(这同样适用于约会。)

要小心,因为虽然大多数教授都很聪明,但并不是所有人都在做有趣的事情。教授必须发表新颖的研究成果以推进他们的职业生涯,但在更有趣的研究领域竞争更为激烈。因此,不那么雄心勃勃的教授所做的事情是发表一系列结论新颖的论文,因为没有其他人关心这些结论。你最好避免这些。

我从未担任过研究助理,因此推荐这条路让我感到有些不诚实。我是通过编写自己的东西来学习编程的,特别是试图逆向工程温格拉德的SHRDLU。我对那个程序的痴迷程度就像母亲对新生儿的痴迷。

独自工作虽然有缺点,但好处在于项目完全是你自己的。你不必妥协或征求任何人的许可,如果你有一个新想法,你可以直接坐下来开始实施。

在你自己的项目中,你不必担心新颖性(如教授所做的)或盈利性(如企业所做的)。唯一重要的是项目在技术上的难度,而这与应用的性质没有相关性。“严肃”的应用程序,如数据库,在技术上往往是微不足道和乏味的(如果你曾经失眠,可以试着阅读关于数据库的技术文献),而“轻松”的应用程序,如游戏,往往非常复杂。我相信有一些游戏公司正在开发的产品,其智力内容超过了大学计算机科学系底部九分之一的研究。

如果我现在在大学,我可能会专注于图形:例如,一个网络游戏,或者一个3D动画工具。当我还是本科生时,周围没有足够的计算能力来使图形变得有趣,但现在很难想象还有什么比这更有趣的工作。

数学

当我在大学时,很多教授相信(或至少希望)计算机科学是数学的一个分支。这个想法在哈佛最为强烈,直到1980年代那里甚至没有计算机科学专业;在那之前,必须主修应用数学。但在康奈尔大学的情况几乎一样。当我告诉可怕的康威教授我对人工智能(当时的热门话题)感兴趣时,他告诉我我应该主修数学。我仍然不确定他是认为人工智能需要数学,还是认为人工智能是无稽之谈,主修一些严谨的学科会治愈我这种愚蠢的野心。

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

但是,虽然在大多数类型的黑客工作中你不需要字面上的数学,知道1001种求导公式的技巧,数学本身是非常值得学习的。它几乎是任何工作中有价值的隐喻来源。[3] 我希望我在大学时能多学一些数学,正是出于这个原因。

像很多人一样,我在童年时遭受了数学的虐待。我学会了把数学视为一系列既不美丽也与我的生活无关的公式(尽管尝试将其转化为“文字问题”),但必须记住这些公式才能在考试中表现良好。

在大学里你能做的最有价值的事情之一就是学习数学真正的意义。这可能并不容易,因为很多优秀的数学家都是糟糕的老师。虽然有很多关于数学的流行书籍,但似乎很少有好的。我能想到的最好的书是W. W. Sawyer的书。当然还有欧几里得。[4]

一切

托马斯·亨利·赫胥黎说过:“试着了解一切,了解某一事物的一切。”大多数大学都以这个理想为目标。

但什么是一切?对我来说,这意味着人们在诚实地解决困难问题的过程中所学到的所有知识。所有这样的工作往往是相关的,因为一个领域的思想和技术通常可以成功地移植到其他领域。即使是那些看似相当遥远的领域。例如,我写文章的方式与我编写软件的方式相同:我坐下来尽快打出一个糟糕的版本1,然后花几周时间重写它。

解决困难问题本身并不足够。中世纪的炼金术士正在解决一个困难的问题,但他们的方法是如此虚假,以至于从研究中几乎没有什么可学的,除了可能了解人们自我欺骗的能力。不幸的是,我在大学时试图学习的人工智能也有同样的缺陷:一个非常困难的问题,轻率地用无望的技术来处理。大胆?更接近于欺诈。

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

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

你可以跳过社会科学、哲学以及最近因政治压力而设立的各种系。许多这些领域确实讨论重要问题。但他们讨论这些问题的方式是无用的。例如,哲学讨论我们彼此之间的义务;但你可以从一位聪明的祖母或E. B. 怀特那里学到比从一位学术哲学家那里更多的东西。

我在这里是根据经验说的。当人们嘲笑克林顿说“这取决于‘是’这个词的含义”时,我本应该感到被冒犯。我在大学里上过大约五门关于“是”的含义的课程。

找出哪些领域值得学习的另一种方法是创建辍学图表。例如,我知道许多人因为觉得数学太难而转向计算机科学,而没有人做出相反的选择。人们不会无缘无故地做困难的事情;没有人会在没有相应(或至少是log(n))回报的情况下去解决更困难的问题。因此,数学可能比计算机科学更值得学习。通过类似的比较,你可以绘制出大学中所有系的图表。在底部,你会发现那些智力内容最少的学科。

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

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

美术和创意写作课程是变数。通常你不会学到太多:你只是根据自己的意愿工作(或不工作),然后在老师的模糊监督下坐在一起对彼此的创作进行“批评”。但写作和艺术都是非常困难的问题,某些人对此诚实地努力,因此值得去做,尤其是如果你能找到一位好老师。

工作

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

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

你应该学习什么以获得工作,取决于你想要的工作类型。如果你想在大公司工作,学习如何在Windows上黑客Blub。如果你想在一个酷的小公司或研究实验室工作,学习Linux上的Ruby会更好。如果你想创办自己的公司,我认为这将变得越来越普遍,掌握你能找到的最强大的工具,因为你将与竞争对手竞争,他们将是你的马。

你在大学里应该学习的技能与工作中使用的技能之间没有直接的相关性。你在大学里应该稍微高一些。

在锻炼中,足球运动员可能会卧推300磅,尽管他在比赛中可能从未需要施加如此大的力量。同样,如果你的教授试图让你学习在工作中不需要的更高级的东西,这可能不仅仅是因为他们是学术界,与现实世界脱节。他们可能是在试图让你用大脑举重。

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

你不必等到离开(甚至进入)大学才能学习这些技能。例如,如果你想学习如何处理现有代码,你可以参与开源项目。你想要工作的雇主会对这点和课堂作业的好成绩一样印象深刻。

在现有的开源项目中,你不会获得太多关于第三项技能——决定解决什么问题的实践。但没有什么可以阻止你开始自己的新项目。而且,好的雇主会对这点更加印象深刻。

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

研究生院

研究生院怎么样?你应该去吗?你如何进入一个好的研究生院?

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

因此,如果你主要对黑客感兴趣并且去研究生院,你会发现很多其他人也同样不在自己的领域。如果你周围一半的人都在同样的方式中不在自己的领域,你真的不在自己的领域吗?

“计算机科学”中存在一个根本性的问题,它在这种情况下显露出来。没有人确定“研究”应该是什么。很多研究是黑客工作,必须被塞进学术论文的形式,以产生更多的出版量。

因此,问你是否会在研究生院感到自在有点误导,因为很少有人在计算机科学中感到完全自在。整个领域在自己的皮肤中都感到不舒服。因此,你主要对黑客感兴趣并不应该阻止你去研究生院。只是要警告你,你将不得不做很多你不喜欢的事情。

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

但在你之前,成千上万的人都经历了写论文的痛苦。除此之外,研究生院几乎是天堂。许多人将其视为他们一生中最快乐的时光。几乎所有其他人,包括我,记得这是一个本可以是美好的时期,如果他们不必写论文的话。[5]

研究生院的危险在于你不会在一开始就看到可怕的部分。博士项目开始时就像大学的第二部分,有几年的课程。因此,当你面临写论文的恐怖时,你已经过了好几年。如果你现在退出,你将成为研究生辍学者,而你可能不喜欢这个想法。当罗伯特因编写1988年的互联网蠕虫而被研究生院开除时,我非常羡慕他找到了一条没有失败污名的出路。

总体而言,研究生院可能比大多数替代方案更好。你会遇到很多聪明的人,而你沮丧的拖延至少会成为一种强大的共同纽带。当然,最后你会获得博士学位。我差点忘了这一点。我想这也是值得的。

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

如果在这个模棱两可的推荐之后你仍然想去研究生院,我可以给你关于如何进入的可靠建议。我有很多朋友现在是计算机科学教授,所以我对招生有内部消息。这与大学大相径庭。在大多数大学,招生官决定谁能入学。对于博士项目,教授们决定。他们会努力做到这一点,因为他们录取的人将为他们工作。

显然,在最好的学校中,推荐信才是真正重要的。标准化考试几乎没有分数,成绩也不算高。论文主要是一个通过说愚蠢的话来使自己失去资格的机会。教授们唯一信任的是推荐信,最好是来自他们认识的人。[6]

因此,如果你想进入博士项目,关键是给你的教授留下深刻印象。根据我朋友们的经验,我知道什么会让他们印象深刻:不仅仅是试图给他们留下深刻印象。他们对那些获得好成绩或想成为他们的研究助理以便进入研究生院的学生并不感兴趣。他们对那些获得好成绩并希望成为他们的研究助理,因为他们对这个主题真正感兴趣的学生感兴趣。

因此,无论你是想进入研究生院还是只是想成为一个优秀的黑客,你在大学里能做的最好的事情就是找出你真正喜欢的东西。欺骗教授让你进入研究生院是很难的,而欺骗问题让你解决它们是不可能的。大学是伪装失效的地方。从这一点开始,除非你想去为大公司工作,这就像回到高中一样,前进的唯一途径就是做你所热爱的事情。

注释

[1] 没有人似乎对此在意,这表明阿帕网(后来成为互联网)在1984年时是多么不重要。

[2] 这就是为什么当我成为雇主时,我不在乎GPA的原因。实际上,我们积极寻找那些被学校开除的人。我们曾在哈佛周围张贴海报,上面写着:“你是否因为花所有时间在自己的项目上而被开除,导致课堂表现不佳?来为我们工作吧!”我们成功找到了一个被开除的孩子,他是个很棒的黑客。

当哈佛大学将本科生开除一年时,他们必须找工作。这个想法是让他们看到现实世界是多么糟糕,以便他们理解自己在大学里是多么幸运。这个计划在来为我们工作的人身上适得其反,因为他比在学校时更开心,并且那一年从股票期权中赚的钱比他的任何教授的工资都多。因此,他没有在年底悔过自新,而是又休了一年假,去了欧洲。他最终在大约26岁时毕业。

[3] 埃里克·雷蒙德说,黑客最好的隐喻在集合论、组合数学和图论中。

特雷弗·布莱克威尔提醒你参加为数学专业学生开设的数学课程。“‘工程师数学’课程非常糟糕。实际上,任何‘工程师的x’课程都很糟糕,其中x包括数学、法律、写作和视觉设计。”

[4] 其他高度推荐的书籍:《数学是什么?》,作者:库朗和罗宾斯;《几何与想象》,作者:希尔伯特和科恩-沃森。对于那些对图形设计感兴趣的人,推荐伯恩的欧几里得

[5] 如果你想拥有完美的生活,最好的做法就是去研究生院,秘密地在头一两年写好你的论文,然后在接下来的三年里尽情享受,每次慢慢写出一章。这种前景会让研究生们垂涎欲滴,但我知道没有人有足够的自律去做到这一点。

[6] 一位教授朋友说,他们每年录取的研究生中有15-20%是“长线选手”。但他所说的长线选手是指那些申请完美无缺的人,除了招生委员会没有认识写推荐信的教授。

因此,如果你想进入科学领域的研究生院,你需要去有真正研究教授的大学。否则,无论你多么优秀,你在招生委员会眼中都会显得风险很大。

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

感谢特雷弗·布莱克威尔、亚历克斯·刘易斯、杰西卡·利文斯顿、罗伯特·莫里斯、埃里克·雷蒙德,以及几位匿名计算机科学教授阅读这篇文章的草稿,以及那些提出问题的学生。