给计算机科学专业大学生的建议--Joel on Software

给计算机科学专业大学生的建议

by Joel Spolsky
Sunday, January 02, 2005
translated by  visayafan

尽管距离我夸夸其谈Windows图形用户界面客户端是大势所趋才一两年了,我仍时不时收到一些大学生的邮件,向我请教工作建议,因为现在正是招新的季节,我想我应该写一些标准的建议来供大家阅读,嘲笑或者忽略。

幸运的是许多大学生傲慢地懒得向他们的前辈请教,这在计算机科学领域是件好事,因为他们的前辈往往会说一些愚蠢的陈旧的事,例如,“到2010年打孔员的需要量将达到100,000,000“,”lisp工作现在很热门“。

我也不知道我在给大学生建议的时候会说些什么,我已经无可救药的落伍了,我是真的不明白即时通并且我现在还在使用(令人震惊的)古老的东西:“邮件”,它流行的时候音乐还必须保存在平圆盘状的CD上。

所以你现在应该比较富裕,忽略掉我所说的去建个可以令其它同学找到约会对象的在线软件(thefacebook)。

然而。

如果你很喜欢编程,那祝福你:你是那些靠做自己喜欢事来赚钱的小部分人中的一员。大多数人就没有这么幸运了。“喜欢你的工作”的想法是一个现代概念,工作应该是一种令人不快的东西,你通过它来赚钱,于是当你65岁终于可以退休了你可以用这些钱来做一些你真正喜欢做的事——如果你还负担得起并且还不是太老不是太衰弱并且这些事情不需要膝盖不抖,眼睛不花,走20公尺不需要上气不接下气的体力等等。

我本想谈什么来着?噢,对了,建议。

闲话不多说了,这里是我的给计算机科学大学生七个免费的建议(值得你花钱来买的):

  1. 毕业前学写东西
  2. 毕业前学C语言
  3. 毕业前学微观经济学
  4. 不要只因无聊就翘掉非计算机科学的课
  5. 上集中编程课
  6. 不要担心所有的工作都去了印度
  7. 不管你做什么,参加一个好的暑期实习

现在是解释,除此之外,如果只因为我告诉你去做你就轻易地去做,那我再添一条:8:向专业人士寻求自尊方面的帮助。

毕业前学写东西

如果当初Linus没有传播它,Linux会像现在这样成功吗?Linus是个聪明的黑客,正是他通过邮件和邮件列表用书写来表达自己想法的能力使得Linux吸引了全世界大批的志愿者。

你听说过最近比较热的极端编程吗?好吧,不卷入我对XP的看法,你听说过的原因一定是它被一些有写作和演讲天赋的人们所宣传。

甚至小规模情况下,当你观察任何编程组织,最有权力和影响力的程序员是那些能清楚地,有说服力的,令人舒服地用英语写和说的人。虽然它会导致夸张,但你无能为力。

一个差的程序员和一个优秀的程序员之间的差别不在于会多少种编程语言,也不在于他们喜欢Python或者Java,而在它们能否传达他们的想法。通过说服别人来提升影响力。通过写清楚地注释和技术说明,他们让其它程序员读懂他们的代码,这意味着其它程序员可以使用他们的代码而不是重写它。如果没有这一点,他们的代码一无是处。通过给最终用户写清楚的技术文档,他们可以让人们明白他们的代码是干什么的,这是让其它用户了解他们代码价值的唯一途径。sourceforge上被掩埋了很多没有人使用的奇妙的有用的代码,因为这些代码是一些写作能力不好(或者压根就不会写的)程序员写的,所以没有人知道他们到底做了什么,他们优秀的代码被埋没了。

我不会雇一个不会用流利使用英语读写的程序员。如果你能写,不管你被雇到哪,你将很快发现你被要求写说明书,这也就意味着你提高了自己的影响力并且得到了经理的赏识。

多数大学把某个课称为“集中写作”,意思是你必须要写大量的东西来通过考核,找此这样的课并通过它们!找任何领域的每周或每天都有写作作业的课。

开始写日志或者博客。你写得越多,它也就越容易,写得越容易,你就写得越多,良性循环。

毕业前学C语言

第二部分:C语言,注意我没有说C++。尽管C变得越来越少,但它仍然是程序员的通用语。它是程序员和另一个交流的语言,更重要的是,它比你将在大学里被教授的“现代”语言像ML, Java, Python不管他们教的什么趋势垃圾语言,更加接近机器底层。你至少要花一个学期的时间来了解机器否则你将永远不能用高级语言写出高效的代码。你将永远不能做些和编译器和操作系统相关的工作,这些算是最好的编程工作了。你将永远不能被任命创建大型项目构架。我不管你懂多少连续,闭包和异常处理:如果你不能解释为什么while(*s++=*t++);拷贝一个字符串或者如果这不是最适合你的世界,因为据我了解,你写代码是建立在迷信上的:一个不懂解剖学常识的医生根据制药公司销售新手说管用来开药方。

毕业前学微观经济学

如果你没有学过任何经济学课程,先快速复习一下:经济学是许多领域中的一个,开始有许多有道理的有用的且可以在这一领域中证实理论和事实,然后就到了这里.这些有用的东西最开始是微观经济学,微观经济学是重要商务每个理论的基石。那些东西开始恶化以后你就进入宏观经济学,关于像利率和失业关系的利率理论,嗯,看起来不被证明比被证明的情况多,然后它就变得更复杂,许多经济专业的学生转到了可以让他们在华尔街得到更好工作的物理学。在你了解为什么商务像它所运行那样运行时你必须保证你演过宏观经济学,因为你必须知道供求和需求,你必须知道竞争优势,你必须要了解净现值和边际效应。

为什么计算机科学专业学生要学经济学呢?因为一个懂得商务基础的程序员对商人来说比那些不懂的程序员将更加有价值。就是这样。跟你说,好多次我被一些程序员搞得很沮丧,他们的想法很疯狂代码上可行但资本上不可行。如果你明白这些东西的话,你会是一个更加有价值的程序员并且你将得到回报,正如在微观经济学中学到的。

不要只因无聊就翘掉非计算机科学的课

翘掉非计算机科学课程是得一个低GPA的最佳方法。

造成不要你低估你的GPA。许多许多招聘人员和招聘经理,包括我,扫描简历的时候直接看GPA,但我们不会为此道歉。为什么?因为GPA较其它数字更加反映出许多教授在长时间里对你在许多不同情况下评价总和,SAT分数呢?哈!那只不过是几个小时里的一场考试而已。GPA反映了四年里几百次论文,期中考试,课堂参与。对,这确实有问题。几年来一直有分数膨胀现象。GPA并不能反映你是在小乡村社区大学参加简单的家政学课还是在加得福尼亚理工学院参加研究生水平的量子力学课。最终,我从乡村社区大学筛选出所有GPA2.5的学生后,我会向他们要成绩单和推荐信。然后我会找全部高分而非只有计算机课程高分的学生。

为什么我做为一个雇主招聘软件开发者却在乎你欧洲历史得了多少分?毕竟,历史很无聊。噢,这么说的话你是在说我应该雇佣你因为当工作无聊的时候你就不努力工作?编程也有枯燥地方,每个工作都有枯燥的地方。我不想雇佣那些只想做有趣事的员工。

我在大学的时候选了人类文明,因为我想,管他呢!我需要学些人类学的东西并且它看起来是个很有趣的概况课程。

有趣?一点都不有趣!我不得不读这些超级无聊的书,巴西热带雨林的印第安人和特罗布里恩岛人,我对他们丝毫不感兴趣。有时候,课堂太无聊了,我希望一些更刺激的事情,比如看草儿生长。我完全地彻底地失去了对这门课的兴趣。我都快哭了,无尽的讨论堆山药让我疲惫不堪,我不明白为什么特罗里恩岛人花那么多时间堆山药,我已经不记得,它太无聊了,但它是我期中考试的科目,所以我费力地坚持读,我最终决定人类文明成为我的无聊障碍:我的个人无聊障碍课。如果我能在一个需要我记忆所有冬季赔礼节地毯的课上得A,我就能处理任何事情,不管它多无聊。然后有一次,我偶然被因在了林肯中心坐在整整18个小时看《尼贝龙指环》,我得多谢我的夸扣特尔人学习,因为相比起来我感到很轻松。

我最终得了A,如果我可以的话,你也可以。

上集中编程课

我还记得那个我发誓不读研究生的时刻。

那是动态逻辑课,老师是耶鲁大学的Lenore Zuck,所有计算机科学系聪明的员工最聪明的一位。

现在,我朦胧的回忆不能给这个领域正确的评价,但让我蒙混过关了,形式逻辑的思想是证明一件事是正确的因为另一件事是正确的。例如多谢形式逻辑,“每个得到好成绩的人将会被录用“加上”Johnny取得好成绩“允许你得到一个新的事实,”Johnny将会被录用”。它非常离奇有趣,只需解构者花费十秒去彻底把形式逻辑中所有有用的东西掀开由此剩下一些有趣但没用的东西。

现在,动态逻辑是一样的,加上时间。例如:“你打开灯后,你能看见鞋子”加上“灯过去开着”暗示着“你能看见你的鞋子”。

动态逻辑对于像Zuck教授这样的天才理论家是非常吸引人的因为它支撑着你能正式证明一些也许很有用的计算机程序东西的希望,如果,例如你可以正式地证明当火星车应该去红色星上寻找火星人马文时它的的闪存卡不会溢出并造成它不断地整天重新启动,

在这门课的第一天,Zuck博士填了满满两个黑板和黑板旁很大块墙来证明如果你有一个灯开关并且灯是关着的,你打开开关,灯就会打开。

证明非常复杂并且非常容易出错,比较起说服自己打开开关灯就会打开,很难证明那个证明是正确的。实际上多个黑板的证明跳过了很多步骤,之所以跳过是因为正式写的话它们太长了。许多步骤使用梦寐以求的归纳法证明,其它是用归谬法,其它则用到了研究生的证明方法。

为了完成作业,我们得证明相反的情况:如果灯关着,现在它开了,证明你打开了它。

我试过,真的。

我在图书馆花了几个试图证明它。

花了几个小时后我发现我正模仿的Zuck博士的证明中有个错误,也许是我抄错了,但它使我认识到一些事:如果你花了几个小时填满了黑板来证明一些琐碎的事情,有成百上千个错误的机会,这种机理永远不可能证明一些有趣的东西。

并不是说它对动态逻辑者多有用:他们研究它是不是因为实用而是为了自己的职位。

我退了这门课并且发誓不再读计算机科学的研究生。

这个故事的寓意在于计算机科学和软件开发不是一回事。如果你真的幸运,你的学校可能有相当好的软件开发课程,但它们可能没有,因为精英学校认为教授实用技术最好留在高职高专学校和恢复项目。你可以在任何地方学到编程,我们这可是耶鲁大学,我们培育的都是未来世界的领袖,你认为你的160,000美元的学费只会让你学会while 循环吗?你认为这是什么地方,不可信的机场酒店的Java讨论班吗?

问题在于,我们并没有专业的软件开发学校,因为如果你想成为一个程序员,你也许应该攻读计算机科学,这个专业可以读但它和软件开发是不一样的。

如果你幸运,你能在计算机科学系中找到许多集中编程的课程,就像你可以在历史系中找到许多你将写很多关于怎么写的课一样。这些是最值得参加的课程。如果你爱编程,如果你不明白那些从来不需要碰计算机的lambda积分或线性代数的精粹,不要灰心。看看那些400级别的名称中有实习的课。在课程中加此拉丁语才能从那门票价格的管理层中蒙混过关。

不要担心所有的工作都去了印度

好吧,第一,如果你已经在印度了,你就不用担心这个问题了,因为不用开始担心所有工作都去了印度,它们是很好的工作,健康地享受吧。

但我一直听说报考计算机科学系的人数骤降,其中一个我听说的理由是“学生害怕去所有工作都跑印度和中国的领域”。这真是大错特错,第一,根据当前的商业趋势来选择就业是很愚蠢的。第二,即使每个编程工作岗位都去了印度和中国,编程是对所有其它非常有意思的工作的一种非常好的训练,例如,商务处理工程师。第三,相信我,现在美国和印度优秀的程序员仍然十分欠缺,对,有许多失业的IT人抱怨他们失业多久了,但你知道吗?虽然可能惹怒这些人,真正优秀的程序员永远都有工作。第四,你有更好的选择吗?你将去学什么?历史吗?那你就别无选择只好去法律学校了。还有一点我不太清楚:99%的律师讨厌他们的工作,讨厌每一分钟,他们一周也要工作90个小时。正如我所说的:如果你喜欢编程,祝福你:你是那些靠做自己喜欢事来赚钱的小部分人中的一员。

不管怎么样,我不认为学生真的这么想。计算机科学注册人数下降只是网络泡沫后恢复到历史正常水平。这个泡沫包括计算机系一些不是真正喜欢编程只是想着高薪工作和24有可能拥有首次公开招募的人,这些人,谢天谢地,早就该走了。

不管你做什么,参加一个好的时期实习

聪明的招聘人员知道热爱编程的人8年级的时候为他们的牙医写过数据库,大学之前在大学校园里学过三个夏天,为学校新闻建立目录管理系统,有在软件公司实习的经历,这就是我们在你简历上要找的东西。

如果你真的喜欢编程,如果你参加业余夏季工作是你犯的最大的错误,那不是一个编程工作。我知道,好多19岁的人想去商场叠衬衣,虽然你才19但你有非常保贵的技能,浪费时间在叠衣服上实在是太傻了,等你毕业的时候,你的简历上应该列上一大堆的编程工作。A&F毕业生将在企业租车“帮助人们解决他们的租赁需求”。

此段有打广告的嫌疑

如果你遵从了我的建议,你可能过早地用微软的方式来卖股票,拒绝谷歌的工作因为你想有一个自己的有门的办公室,其它一些愚蠢的一生决定,那可不是我的错,我告诉过你不要听我的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值