Joel在耶鲁大学的演讲
Joel Spolsky是一个美国的软件工程师,他的网络日志"Joel谈软件"(Joel on Software)非常有名,读者人数可以排进全世界前100名。
上个月28号,他回到母校耶鲁大学,与计算机系的学生座谈。他发表了一个演讲,回顾自己的人生经历,并总结了一些个人的体会。
我读完他的演讲稿,很受触动,觉得他的人生体会非常具有启示性。这篇演讲非常长,分为三个部分(一、二、三)。下面是其中的一些精彩段落,共有四段。
(更新:此篇演讲的全文收录在我翻译的《软件随想录》一书,人民邮电出版社,2009年出版。)
一、大学里最有用的课程
Joel说,他在大学里上过的最有用的课,是一门他只上了一回、然后就再也没有去过的课。
由于父母都是大学教授,亲戚朋友都是学术界里的,大多有博士学位,所以Joel从小就认定自己也会去读博士,将来搞学术。可是,有一门课程改变了他的想法,使他最终没有去报考研究生院。
这门课程叫做"动态逻辑"(Dynamic Logic)。在第一堂课上,教授证明了一个命题。假定有一个程序"f := not f," f是表示真假的逻辑值,那么结论是程序运行偶数次后,f的值保持不变。整个证明过程非常冗长,要花几个小时讲解,一共有几十步。课后习题则是,证明如果f值保持不变,那么程序必然运行了偶数次。
课后,Joel花了很多时间做题,还去图书馆借来了参考书。但是,他逐渐感到这样做没有意义:用大量琐碎的、容易出错的步骤,去证明一个凭直觉就能认定成立的命题,这不是一个富有实效的工作方法。在Joel看来,计算机更应该用来解决错误,而不是让人们陷入逻辑的陷阱,去产生错误。(I decided that this Dynamic Logic stuff was really not a fruitful way of proving things about actual, interesting computer programs, because you're more likely to make a mistake in the proof than you are to make a mistake in your own intuition.)通过这件事,他认识到,自己不适合做纯思辨性的学术研究。因此,他就退掉了这门课,并且以后也没有选择去上研究生院。
Joel认为,就是这门只上了一次的课,恰恰成为了他在大学中上过的最有用的课,因为它帮助他选择了正确的人生道路。
所以,Joel的第一个结论是:人生中重要的,是关注那些真正的问题(real problem),而不是陷入那些没有意义的琐碎问题(trivial problem)。就像苏格拉底说的,"认识你自己"。
此外,Joel说,还有一门叫做CS 323的课,也很有用。这门课有大量的课后习题,都是关于编程的,平均每星期要花40个小时来做题。
Joel发现他能够做出大部分的题目,更重要的是,他发现自己喜欢做这些题。这样一来,他就明白自己是适合编程的。另一方面,很多其他学生对这门课感到无比头疼,觉得编程既枯燥又痛苦,每周40小时做这种题简直是一种刑罚。这些人于是明白,虽然同样是计算机系的学生,但是他们并不适合编程。这是一件好事,因为这样他们就避免了以后选择错误的职业。否则,让一个不喜欢编程的人,一生都与程序打交道,这是多么悲惨的一件事啊!
二、在Viacom的日子
毕业以后,Joel先在微软公司干了一段日子,然后回到纽约,进入维亚康母公司(Viacom),为这家巨型的娱乐传播公司编写软件,成为IT部门里一个程序员(in-house programmer)。
后来,Joel回忆起来,认为这是他一生中最痛苦的日子,并且劝告计算机系的学生尽可能不要去做"in-house programmer"。
原因有三个。
首先,你永远没有办法正确地编写软件,你不得不用最方便的方法编写软件。因为软件支出非常高昂,所以公司会要求尽可能节省成本,你不可能试用新技术,只能使用现有的最成熟、最保守的技术。
其次,你没有办法将一个项目做到尽善尽美。一旦程序可以正常运行,你的工作也就结束了,可以接下去干公司的下一个项目了。你的作用是解决问题,而不是将软件写得尽可能好。如果你是在一个专业的技术性公司,比如Google或Facebook,情况就完全不一样,你的软件写得越好,公司就会越成功,所以公司会支持你在一个项目上不断做下去。
最后,传统公司IT部门里的程序员,只属于公司内部的维护人员,而不是直接从事核心业务的人员。因此,你永远办法进入管理层。但是,在技术性公司,程序员会变成CEO。
因为这三个原因,Joel觉得in-house programmer不是一个好的职业,不幸的是,80%的程序员属于这一类,年复一年,很多人的生命就是这样被耗干的。(it's frightening because this is what probably 80% of programming jobs are like, and if you're not very, very careful when you graduate, you might find yourself working on in-house software, by accident, and let me tell you, it can drain the life out of you.)
Joel的第二个结论是:选择职业时,不要只考虑职位是否专业对口,应该尽量选择业务方向与你专业相同的公司。
虽然,维亚康母公司(Viacom)口头表示很重视互联网,但是,分配给程序员的工作间,总是很小的屋子,光线黯淡,而且还用搁板分割出小间,供三个人使用。经理们各自的办公室则完全不同,都有大玻璃窗,可以俯视哈德逊河。
在一次公司内部的圣诞晚会上,Joel见到了负责互联网战略的执行董事。Joel问他,公司打算怎么使用互联网,后者只是泛泛地说,互联网很重要,这是未来的发展方向。Joel感到很失望,他相信这个执行董事其实对互联网毫无认识,只不过是人云亦云。说到底,这个董事对这一切可能根本无所谓,反正他每年都有200万美元的年薪,保持现状就是最好。对他来说,Joel就是一个打字员似的"写网页的人",Joel做了什么和工作中的付出,他并不关心。(It convinced me that he had no flipping idea whatsoever what it was that was happening and what the internet meant or what I did as a programmer, and he was a little bit scared of it all, but who cares, because he's making 2 million dollars a year and I'm just a typist or "HTML operator" or whatever it is that I did, how hard can it be, his teenage daughter can do that.)
所以,Joel决定辞职了。
三、管理人员的作用
离开维亚康母以后,Joel进了一家叫做Juno Online Services的互联网公司,这家公司提供网上免费电子邮件服务。那个时候是90年代中期,hotmail和gmail都还没有成立。
作为程序员,Joel在这里工作得很愉快,但是公司本身的经营却不成功。虽然是一家互联网公司,但是,Juno Online Services完全采用传统的"从上至下"的管理方式,就是领导想出来一个主意,然后命令程序员负责实现,结果就是对技术细节一无所知的人,决定了一切。
这同硅谷的方式完全不同,在那里,管理人员只负责创造一个良好的工作环境,然后让真正的聪明人把东西做出来。(What I was used to from the west coast was an attitude that management is just an annoying, mundane chore someone has to do so that the smart people can get their work done.)硅谷公司内部的运作更像大学里的学术讨论会,会议主席的作用只是主持会议而已。
Joel的第三个结论是,公司管理层的作用就是搬动家具、清理出空间,让有才华的研究人员做出一流产品。(Managers exist to get furniture out of the way so the real talent can do brilliant work.)
Juno Online Services经营得不成功,以及对员工才华的不尊重,使得Joel在2000年下定决心,不再为别人打工了,开始创业。
四、表达能力的重要性
在创业之初,Joel并不知道该去做什么。他看到许多很蠢的人,拿着很蠢的商业计划,开办互联网公司。他想,这样的公司都能开出来,那么我也能开公司,只要我比他们少蠢10%就可以了,我要按照我的想法来管理,对每一个程序员都给予最大的尊重,那样就有机会做出高质量的产品。我们不关心风险资本家怎么说,也没有高高在上的领导,我们只关心客户的感受,用软件解决客户的问题,从而获得报酬,生存下去。(In those days, I was seeing lots of really dumb people with really dumb business plans making internet companies, and I thought, hey, if I can be, say, 10% less dumb than them, that should be easy, maybe I can make a company too, and in my company, we'd do things right for a change.) We'd treat programmers with respect, we'd make high quality products, we wouldn't take any shit from VCs or 24-year-olds playing President, we'd care about our customers and solve their problems when they called, instead of blaming everything on Microsoft, and we'd let our customers decide whether or not to pay us.)
在这种想法的鼓励下,Joel创办了Fog Creek软件公司。
从创业之初,Joel就开始将自己的想法和遇到的事情,写成文章,发表在互联网上。当时还没有Blog这种东西,但是他其实已经在写了。Joel慢慢发现,他的文章真的有人看,并且读者越来越多,其中很多人最终都接受了他的想法。实际上,Joel写的很多东西都不是原创性的,其中还时不时包括一些笑话,但是读者不在乎,"Joel谈软件"成了一个热门网站,平均每篇文章都有几十万、甚至上百万的读者。
这对Joel的创业帮助极大,Fog Creek本来是一家无名的小软件公司,但是由于很多人读Joel的文章,因此他们也了解并且相信Joel的公司。这使得Fog Creek从创业的第一年起就是盈利的,并且每年都在发展。
Joel将创业的成功,部分归功于他在大学里受过的写作训练,那时有一个教授每周都要布置写论文,并且对平庸的文章恨之入骨,不给学分。这使得Joel学会了将复杂的话题说得清晰易懂,并且引人入胜。
因此,Joel的第四个结论是,一个普通工作人员和一个领袖之间的差别,就是有没有良好的表达能力。(Being able to write clearly on technical topics is the difference between being a grunt individual contributor programmer and being a leader.)
Joel在耶鲁大学的演讲的更多相关文章
- 给未来的你——李开复2011级大学新生演讲
2011年09月26日08:30 来源:<中国青年报> <中国青年报>的读者朋友们: 你们肩负着中华的未来,你们身上正涌动着创新的血脉! 无论你在哪所学校,哪个城市,你都是与众 ...
- Sample Means(耶鲁大学教材)
Sample Means The sample mean from a group of observations is an estimate of the population mean. Giv ...
- 效仿盖茨:PPstream创始人的心路历程
http://www.jianglb.com/2007/08/15/about-ppstream.html “P2P网络视频软件的目标是成为网民肚子里的蛔虫.”PPstream总裁徐伟峰自信地说道.他 ...
- Joel Spolsky对计算机学生的七大建议
/*先来介绍下作者:Joel Spolsky,世界最具影响的程序员网志Joel on Software的主人,软件业一位旗帜鲜明的思想者,一位传统软件管理理念的挑战者.他创办的这个网站被程序员誉为“反 ...
- 【转载】许纪霖教授在上海财经大学演讲——漫谈“大学生的四个Learn”
这几年,越来越多的大学毕业生抱怨找不到合意的工作.很多单位又感叹,找一个称职的大学生真难.这就形成一个非常大的反差和矛盾.那么,社会究竟需要怎样的大学生?我们的大学到底应该培养怎样的大学生?我们作为大 ...
- 世界名校网络课程大盘点,美国大学CS专业十三大研究方向,世界50所知名大学提供开放课程
世界名校网络课程大盘点 加州大学伯克利分校http://webcast.berkeley.edu/ 加州大学伯克利分校与斯坦福大学. 麻省理工学院等一同被誉为美国工程科技界的学术 领袖,其常年位居 ...
- 美国大学排名之本科中最用功的学校top15
美国大学排名之本科中最用功的学校top15 威久留学2016-07-29 13:15:59美国留学 留学新闻 留学选校阅读(490)评论(1) 去美国留学的同学可能都知道USnews美国大学排名, ...
- 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感[转]
近日,在网易公开课视频网站上看完了<机器学习>课程视频,现做个学后感,也叫观后感吧. 学习时间 从2013年7月26日星期五开始,在网易公开课视频网站上,观看由斯坦福大学Andrew Ng ...
- 计算机专业-世界大学学术排名,QS排名,U.S.NEWS排名
2015年美国大学计算机专业排名 计算机专业介绍:计算机涉及的领域非常广泛,其分支学科也是非常多.所以在美国将主要的专业方向分为人工智能,程序应用,计算机系统(Systems)以及计算机理论(theo ...
随机推荐
- Linux例行工作crontab
第一步编辑要定时执行的脚本: myScript.sh myScript.sh的内容为:touch /root/`date +%F' '%T`.txt 为myScript.sh增加可执行权限:chmod ...
- java中三种常见内存溢出错误的处理方法
更多 10 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的 ...
- Google AdSense的CPC点击单价超百度联盟(2014)
很久没有关注AdSense了,一是访问不太方便,二是网站投放AdSense广告相当少,估计每天收入都不到1美元,所以就懒得去看了,一般都是几个月才去看一看. AdSense还行吗? AdSense点击 ...
- FPGA STA(静态时序分析)
1 FPGA设计过程中所遇到的路径有输入到触发器,触发器到触发器,触发器到输出,例如以下图所看到的: 这些路径与输入延时输出延时,建立和保持时序有关. 2. 应用背景 静态时序分析简称STA,它是一种 ...
- Android学习路线(二十)运用Fragment构建动态UI
要在Android系统上创建一个动态或者多面板的用户界面,你须要将UI组件以及activity行为封装成模块.让它可以在你的activity中灵活地切换显示与隐藏. 你可以使用Fragment类来创建 ...
- CreateFileMapping使用方法
CreateFileMapping的MSDN翻译和使用心得 測试创建和打开文件映射的时候老是得到"句柄无效"的错误, 细致看了MSDN以后才发觉是函数认识不透, 这里把相关的解 ...
- python学习(序章)
好久没写过笔记了,最近听说写博客笔记能使知识记忆更深刻,于是就开始写写,不为推广,只为增加记忆.好了,开始python的学习: 学习一门语言的快慢,与人无关,主要是与学习的目的有关,python语言目 ...
- 行内元素有哪些?块级元素有哪些?CSS的盒模型?转载
块级元素:div p h1 h2 h3 h4 form ul行内元素: a b br i span input selectCss盒模型:内容,border ,margin,padding css中的 ...
- C++运算符重载为非成员函数
#include<iostream> using namespace std; class Complex{ public: Complex(double r=0.0,double i=0 ...
- CXF详细介绍
首先介绍下CXF的拦截器:简单地说,CXF使用流水线型(或者说总线型)处理机制,它的核心是一个Bus.一个客户端的请求或者一个对客户端桩代码的调用被组织成为一个Message.同时,所有的CXF功能都 ...