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