本科学习
Original2005 年 3 月
(这篇文章的部分内容最初是回复那些给我写信询问问题学生的)
最近,我收到了一些来自计算机科学本科生的邮件,询问他们在大学里应该做什么。我可能不是最好的建议来源,因为我在大学里是哲学专业。但我上了很多 CS 课程,以至于大多数 CS 专业学生都认为我也是 CS 专业。我当然是一个黑客,至少。
黑客
你在大学里应该做什么才能成为一个优秀的黑客?你可以做两件主要的事情:精通编程,并学习很多关于特定、酷炫问题的知识。这两者实际上是等价的,因为它们相互促进。
精通编程的方法是(a)大量(b)解决难题。而让自己解决难题的方法是参与一些非常吸引人的项目。
这个项目很可能不是课堂作业。我的朋友罗伯特在本科期间通过编写网络软件学到了很多东西。他的一个项目是将哈佛大学连接到阿帕网;哈佛大学曾经是阿帕网的原始节点之一,但到 1984 年,连接已经断开。[1] 这个工作不仅不是为了课堂,而且因为他把所有时间都花在了上面,而忽略了学习,他被学校开除了整整一年。[2] 最终一切都平衡了,他现在是麻省理工学院的教授。但你可能不会像他那样极端,因为那会让他在当时非常担心。
精通编程的另一种方法是找到其他擅长编程的人,并学习他们的知识。程序员往往根据他们所做的工作类型和使用的工具将自己分成部落,而有些部落比其他部落更聪明。环顾四周,看看聪明的人似乎在做什么;通常是有原因的。
你周围的一些最聪明的人是教授。因此,找到有趣工作的一种方法是自愿担任研究助理。教授们特别喜欢那些能为他们解决繁琐的系统管理类型问题的人,所以这是一个进入他们圈子的途径。他们害怕的是那些不靠谱的人和简历造假的人。助理经常会导致工作量的净增加,这太常见了。所以你必须明确表示你会带来工作量的净减少。
如果他们拒绝了你,不要气馁。拒绝通常比被拒绝者想象的要少个人因素。继续下一个目标。(这同样适用于约会。)
要小心,因为虽然大多数教授都很聪明,但并非所有教授都在做有趣的事情。教授们必须发表新颖的研究成果才能提升自己的职业生涯,但在更有趣的研究领域,竞争更加激烈。因此,那些不太有雄心的教授会发表一系列论文,这些论文的结论之所以新颖,是因为没有人关心它们。你最好避开这些教授。
我从未担任过研究助理,所以推荐这条路让我感觉有点不诚实。我通过自己编写代码来学习编程,特别是通过尝试反向工程 Winograd 的 SHRDLU 程序。我对那个程序的痴迷程度就像母亲对新生儿一样。
无论独自工作有哪些缺点,其优点是项目完全属于你。你永远不必妥协或征求任何人的许可,如果你有新想法,你可以直接坐下来开始实施。
在自己的项目中,你无需担心新颖性(如教授所做)或盈利能力(如企业所做)。唯一重要的是项目的技术难度,而这与应用程序的性质无关。“严肃”的应用程序,如数据库,在技术上通常是微不足道且枯燥的(如果你曾经失眠,试试阅读关于数据库的技术文献),而“无聊”的应用程序,如游戏,通常非常复杂。我相信有些游戏公司正在开发的产品,其智力含量比大学 CS 系底层九十分之九的研究都要高。
如果我现在还在大学,我可能会从事图形学方面的工作:例如网络游戏或 3D 动画工具。在我读本科的时候,周围没有足够的循环来让图形学变得有趣,但现在很难想象还有什么比这更有趣的工作了。
数学
在我读大学的时候,很多教授都相信(或者至少希望)计算机科学是数学的一个分支。这种想法在哈佛大学最为强烈,那里直到 1980 年代才开设 CS 专业;在此之前,人们必须主修应用数学。但在康奈尔大学也差不多。当我告诉可怕的康威教授我对人工智能感兴趣(当时是一个热门话题)时,他告诉我我应该主修数学。我仍然不确定他是否认为人工智能需要数学,或者他是否认为人工智能是胡说八道,主修一些严谨的东西可以治好我这种愚蠢的野心。
事实上,作为一名黑客,你需要的数学知识远比大多数大学系所承认的要少。我认为你只需要高中数学加上计算理论中的一些概念。(如果你想避免编写 n^2 算法,你必须知道什么是 n^2 算法。)当然,除非你打算编写数学应用程序。例如,机器人技术完全是数学。
但虽然你并不真正需要数学来进行大多数黑客活动,从知道 1001 个微分公式的技巧的角度来说,数学本身非常值得学习。它是几乎任何类型工作的宝贵隐喻来源。[3] 我希望我在大学里学过更多数学,就是因为这个原因。
像很多人一样,我在孩提时代遭受过数学虐待。我学会了将数学视为一系列公式,这些公式既不美观,也与我的生活无关(尽管有人试图将它们翻译成“文字问题”),但必须记住它们才能在考试中取得好成绩。
你在大学里能做的最有价值的事情之一就是了解数学的真正含义。这可能不容易,因为很多优秀的数学家都是糟糕的老师。虽然有很多关于数学的通俗读物,但很少有好的。我能想到的最好的就是 W. W. Sawyer 的书。当然还有欧几里得。[4]
一切
托马斯·赫胥黎说:“尝试了解一切,并深入了解某件事。”大多数大学都以这个理想为目标。
但什么是“一切”?对我来说,这意味着人们在诚实地解决难题的过程中所学到的所有东西。所有这些工作都倾向于相互关联,因为一个领域的想法和技术通常可以成功地移植到其他领域,即使是看起来很遥远的领域。例如,我写文章的方式与我编写软件的方式相同:我坐下来,尽可能快地打出一个糟糕的版本 1,然后花几个星期重写它。
仅仅解决难题是不够的。中世纪的炼金术士正在解决一个难题,但他们的方法是如此荒谬,以至于从研究中几乎没有学到什么,除了可能了解人们自我欺骗的能力。不幸的是,我在大学里试图学习的人工智能也存在同样的缺陷:一个非常难的问题,却用完全不合适的技术轻率地解决。大胆?更接近欺诈。
社会科学也相当荒谬,因为它们受到智力时尚的影响很大。如果一位物理学家遇到 100 年前的同事,他可以教他一些新东西;如果一位心理学家遇到 100 年前的同事,他们只会陷入意识形态争论。 当然,你从心理学课上会学到一些东西。关键是,你从其他系所的课程中学到的东西会更多。
在我看来,值得学习的系所是数学、硬科学、工程学、历史(尤其是经济和社会史,以及科学史)、建筑学和古典文学。艺术史概论课程可能值得一学。现代文学很重要,但学习它的方法就是阅读。我对音乐了解不够,无法发表意见。
你可以跳过社会科学、哲学以及最近为了应对政治压力而创建的各个系所。这些领域中的许多确实谈论了重要的问题。但他们谈论这些问题的方式毫无用处。例如,哲学谈论了我们彼此之间的义务;但你从一位睿智的祖母或 E. B. White 那里学到的东西比从一位学术哲学家那里学到的东西更多。
我从经验中谈论这些。当人们嘲笑克林顿说“这取决于‘是’这个词的含义”时,我可能应该感到被冒犯。我在大学里上了大约五门关于“是”的含义的课程。
确定哪些领域值得学习的另一种方法是创建辍学图。例如,我知道很多人从数学转到计算机科学,因为他们发现数学太难了,而没有人反过来。人们不会无缘无故地做难事;没有人会解决更难的问题,除非它有相应的(或至少是 log(n))回报。所以,数学可能比计算机科学更值得学习。通过类似的比较,你可以制作一张大学所有系所的图表。在底部,你会发现智力含量最低的科目。
如果你使用这种方法,你会得到与我刚才给出的答案大致相同的答案。
语言课程是一个例外。我认为它们更适合被视为课外活动,就像陶艺课一样。如果与在语言使用国家生活一段时间相结合,它们会更有用。我一时兴起在大学一年级学习了阿拉伯语。这需要很多努力,而唯一持久的益处是奇怪地能够识别闪米特语词根,以及对人们如何识别单词的一些见解。
工作室艺术和创意写作课程是通配符。通常你不会学到很多东西:你只是做(或不做)你想做的任何事情,然后在老师的模糊监督下,围坐在一起互相评论彼此的作品。但写作和艺术都是非常难的问题,有些人诚实地努力解决,所以它们值得做,尤其是如果你能找到一位好老师。
工作
当然,大学生必须考虑的不仅仅是学习。还有两个实际问题需要考虑:工作和研究生院。
理论上,博雅教育不应该提供职业培训。但每个人都知道这有点虚假。每个大学的黑客都会学习实际技能,而且并非偶然。
你应该学习什么才能找到工作取决于你想要什么样的工作。如果你想在一家大公司工作,学习如何在 Windows 上黑Blub。如果你想在一家酷炫的小公司或研究实验室工作,学习 Ruby on Linux 会更好。如果你想创业,我认为这将越来越普遍,那么掌握你所能找到的最强大的工具,因为你将与竞争对手展开竞争,而他们将是你的马。
你在大学里应该学习的技能与你在工作中使用的技能之间没有直接的联系。你在大学里应该稍微高一点。
在训练中,一名橄榄球运动员可能卧推 300 磅,即使他在比赛中可能永远不会需要施加那么大的力量。同样,如果你的教授试图让你学习比你在工作中需要的更高级的东西,这可能不仅仅是因为他们是学者,与现实世界脱节。他们可能试图让你用大脑举重。
你在课堂上编写的程序与你在现实世界中编写的程序在三个关键方面有所不同:它们很小;你可以从头开始;问题通常是人为的和预先确定的。在现实世界中,程序更大,往往涉及现有代码,并且经常需要你在解决问题之前先弄清楚问题是什么。
你不必等到离开(甚至进入)大学才能学习这些技能。例如,如果你想学习如何处理现有代码,你可以为开源项目做出贡献。你想要为之工作的雇主会对你的贡献印象深刻,就像对你在课堂作业中取得的好成绩印象深刻一样。
在现有的开源项目中,你没有太多机会练习第三项技能,即决定要解决什么问题。但没有什么能阻止你开始自己的新项目。而好的雇主会对你的新项目更加印象深刻。
你应该尝试解决什么问题?回答这个问题的一种方法是问问你自己作为用户需要什么。例如,我偶然发现了一种针对垃圾邮件过滤的良好算法,因为我想要停止接收垃圾邮件。现在,我希望我有一个邮件阅读器,它可以以某种方式防止我的收件箱填满。我倾向于将我的收件箱用作待办事项列表。但这就像用螺丝刀开瓶子;人们真正想要的是开瓶器。
研究生院
研究生院怎么样?你应该去吗?你如何进入一所好学校?
原则上,研究生院是研究的专业培训,除非你想要以研究为职业,否则你不应该去。然而,获得 CS 博士学位的人中有一半并没有从事研究工作。我上研究生院不是为了成为教授。我去是因为我想学到更多东西。
所以,如果你主要对黑客感兴趣,并且你上了研究生院,你会发现很多其他与你一样不适应环境的人。如果周围有一半的人和你一样不适应环境,那你真的不适应环境吗?
“计算机科学”存在一个根本问题,它在这种情况下显露出来。没有人确定“研究”应该是什么。很多 研究都是黑客行为,必须塞进学术论文的形式,才能产生一个新的出版量。
所以,问你是否会适应研究生院有点误导,因为很少有人真正适应计算机科学。整个领域都对自己感到不舒服。所以,你主要对黑客感兴趣的事实不应该阻止你上研究生院。只是要提醒你,你将不得不做很多你不喜欢的事情。
第一件事将是你的论文。几乎每个人在完成论文时都讨厌自己的论文。这个 过程本身往往会产生一个令人不快的结果,就像用全麦面粉做的蛋糕,烤了 12 个小时。很少有论文能让人愉快地阅读,尤其是作者自己。
但你之前有成千上万的人经历过写论文的痛苦。除此之外,研究生院几乎是天堂。许多人将其视为他们一生中最快乐的时光。而几乎所有其他人,包括我,都将其视为一段时光,如果他们不必写论文,这段时光本来会是。[5]
研究生院的危险在于,你一开始看不到可怕的部分。博士项目从大学第二部分开始,包括几年的课程。所以,当你面对写论文的恐怖时,你已经读了几年了。如果你现在退出,你将成为研究生院的辍学者,你可能不喜欢这个想法。当罗伯特因编写 1988 年的互联网蠕虫而被研究生院开除时,我非常羡慕他,因为他找到了一种摆脱失败耻辱的方法。
总的来说,研究生院可能比大多数其他选择都要好。你会遇到很多聪明人,而你沉闷的拖延症至少会成为一个强大的共同纽带。当然,你最终会获得博士学位。我忘了这一点。我想这还是有点价值的。
博士学位最大的优势(当然,除了它是学术界的工会卡之外)可能是它能给你一些基本的自信。例如,我家里的霍尼韦尔恒温器有最糟糕的用户界面。我母亲,她使用的是同一型号,勤奋地花了一天时间阅读用户手册,学习如何操作它。她 认为问题出在她身上。但我可以对自己说:“如果一个拥有计算机科学博士学位的人都不理解这个恒温器,那它一定是设计得很糟糕。”
如果你在读完这个模棱两可的建议后仍然想去研究生院,我可以给你一些关于如何入学的可靠建议。我有很多朋友现在是 CS 教授,所以我了解入学的内幕。这与大学完全不同。在大多数大学,招生官决定谁可以入学。对于博士 项目,教授们决定。他们试图做得很好,因为他们录取的人将为他们工作。
显然,在最好的学校,只有推荐信才真正重要。标准化考试毫无用处,成绩也很少有用。论文主要是一个让你说出愚蠢的话来让自己被淘汰的机会。教授们 唯一信任的是推荐信,最好是来自他们认识的人的推荐信。[6]
所以,如果你想进入博士项目,关键是给你的教授留下深刻印象。从我那些当教授的朋友那里,我知道什么能打动他们:不仅仅是试图打动他们。他们 不会被那些成绩好或想成为他们研究助理的学生打动,因为他们想进入研究生院。他们 会被那些成绩好并且想成为他们研究助理的学生打动,因为他们对这个主题真正感兴趣。
所以,你在大学里能做的最好的事情,无论你是否想进入研究生院,或者只是想精通黑客技术,就是弄清楚你真正喜欢什么。很难欺骗教授让你进入研究生院,也不可能欺骗问题让你解决它们。大学是伪装停止起作用的地方。从这一点开始,除非你想去一家大公司工作,这就像回到高中,否则前进的唯一途径就是做你 热爱的事情。
注释
[1] 似乎没有人介意,这表明阿帕网(后来成为互联网)在 1984 年之前是多么不重要。
[2] 这就是为什么当我成为雇主时,我不关心 GPA。事实上,我们积极寻找那些被学校开除的人。我们曾经在哈佛大学周围张贴海报,上面写着:“你是否因为把所有时间都花在了自己的项目上而成绩不好而被学校开除?来我们这里工作!”我们设法找到一个被开除的孩子,他是一个很棒的黑客。
当哈佛大学将本科生开除一年时,他们必须找工作。这样做是为了向他们展示现实世界是多么糟糕,让他们明白他们在大学里是多么幸运。这个计划对那个来我们这里工作的人来说适得其反,因为他比在学校里更快乐,而且他那一年从股票期权中赚到的钱比他任何一位教授的工资都多。所以,他并没有在年底悔恨地爬回来,而是又休了一年假,去了欧洲。他最终在大约 26 岁的时候毕业了。
[3] 埃里克·雷蒙德说,黑客最好的隐喻是在集合论、组合学和图论中。
特雷弗·布莱克韦尔提醒你参加为数学专业学生设计的数学课程。 “‘工程师的数学’课程非常糟糕。事实上,任何‘x for engineers’ 课程都很糟糕,其中 x 包括数学、法律、写作和视觉设计。”
[4] 其他强烈推荐的书籍:什么是数学?,作者:库朗和罗宾斯;几何与想象力,作者:希尔伯特和 科恩-沃森。 对于那些对平面设计感兴趣的人, 伯恩的欧几里得。
[5] 如果你想拥有完美的生活,你需要做的事情是上研究生院,在第一年或第二年秘密写完论文,然后在接下来的三年里尽情享受,每次只写出一章。这个想法会让研究生们垂涎欲滴,但我认识的人中没有人有足够的纪律来做到这一点。
[6] 一位教授朋友说,他们每年录取的研究生中,有 15% 到 20% 是“长线”。但他所说的长线是指那些申请材料在各个方面都完美无缺的人,只是招生委员会没有人认识写推荐信的教授。
所以,如果你想进入 科学领域的研究生院,你需要在有真正研究型教授的大学上大学。否则,无论你有多优秀,在招生委员会看来,你都是一个冒险的赌注。
这意味着 一个令人惊讶但显然不可避免的结果: 小型文理学院注定要消亡。 大多数聪明的 高中生至少会考虑进入科学领域,即使他们最终选择不进入。 为什么要上一个限制他们选择的大学?
感谢特雷弗·布莱克韦尔、亚历克斯·莱温、杰西卡·利文斯顿、 罗伯特·莫里斯、埃里克 雷蒙德,以及几位 匿名 CS 教授 阅读了这篇文章的草稿,以及那些问题引发了这篇文章的学生。