|
虾米小时候 中级会员
 
- 精华
- 2
- 威望
- 258
|
1#
大 中
小 发表于 2008-9-19 01:24 只看该作者
给计算机系学生的建议
作者: 周思博 (Joel Spolsky)
译: Chen Bin
2005年1月2日
虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流,大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读,嘲笑,忽略。
大多数锐气十足的学生从来不向前辈征求意见。在计算机科学领域,这样做是正确的。因为前辈们很可能说些“在2010年前,市场对于那些只会敲击键盘的代码工人的需求将会超过一亿(因此前景是乐观的)”,或者诸如“Lisp语言现在真的很热门”。
我和那些前辈也差不多,当我给别人建议时,实际上我不知道自己在说些什么。我是如此的落后于时尚,以至于连AIM也搞不明白,而不得不使用email(恐龙时代的产品,在那个时代,音乐是刻在扁扁的的圆圆的盒子上,噢,那种盒子叫cd)。(译者按:我认为祖儿这里在说反话,后文很多地方作者都在说反话,读者尽量理解这种美国式幽默吧。)

所以你最好不要理睬我将要说的,你应该立刻去制作某种 在线交友软件。
然而,如果你喜欢编程,那就感谢上帝吧:你属于幸运的少数人,这些人喜欢工作,他们的工作可以保证他们能过上舒适的生活。大多数人没有这么幸运。对大多数人来说,工作是不愉快的,忍受工作的目的攒钱,是为了在年满65岁退休后能过上自己想过的生活。如果他们想过的生活不需要灵活的膝盖,明亮的眼镜,轻盈的脚步的话。
现在让我回到主题,我将提供一些建议。
好了,不罗嗦了,下面就是Joel给计算机系学生们七条免费的建议:
- 毕业前学会写作
- 毕业前学会C语言
- 毕业前学习微观经济学(microeconomics)
- 不要因为某些非计算机课程枯燥无趣就敬而远之
- 学习有大量编程实践的课程
- 不要担心工作都跑到印度去了
- 好好做夏季毕业实习
让我逐条解释这些建议。但解释之前我要说明一下,如果因为这些建议是Joel的建议你就打算无条件地接受,以至于连我的理由都想跳过,那么你就太单纯,太容易被别人骗了。如果你是那种单纯的人,我还要给你第八条建议,找心理医生咨询一下如何培养自信(self-esteem)。
毕业前学会写作
如果Linus Torvalds不懂如何 布道的话,Linux会成功吗? 正象每一个黑客,Linus精通写作,他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想,所以他能够从全世界召集大量志愿者为Linux工作。
你听说过最近风靡全世界的极限编程(Extreme Programming)吗? 即使你不懂什么是极限编程,你至少听说过这个词。为什么?因为宣传极限编程的人都是天才的作者和演说家。
就看看你身边的那些小型的软件开发组织吧,最有权力和影响力的人是那些可以用自信,准确,舒适的英语交流的人。好吧,我承认这些人也许言过其实,但是你无可奈何。

一个合格的程序员和一个伟大的程序员的区别不在于知道多少种编程语言,不在于他们是 喜欢Python或者Java,而是在于他们是否擅长表达。他们能够说服,所以他们获得权力。他们能够写清楚明白的评论和接口文档,所以他们使得别人不用 重写,而可以重用他们的代码,否则他们的代码就是毫无用处的。他们也能够写出清晰的用户手册,于是最终用户可以理解他们的代码是做什么用的,明白了他们的工作的价值。sourceforge埋葬着许多精美的代码,这些已死的代码无人使用,因为代码的作者很少写(或者根本不写)用户手册。
我不会雇佣一个不懂写作的程序员。如果你擅长写,你就很容易找到工作,紧接着你就会被要求写技术规格文档,这意味着你已经被管理层注意到了。
大学里有一些课程,要求你做很多的写作练习,不要犹豫,赶快参加这些课程。不要错过任何要求你每周或者每天练习写作的课程。
给自己建立一个网络日志(weblog)。在上面写的越多,你会写地越容易。写地越容易,你就写地越多,这是一个正向地循环激励。
毕业前学会C语言
我可没有说是C++。虽然现在用C的工作不多,但是掌握各种编程语言的程序员事实上用C来交流(linguafranca);更重要的是,C比某些“现代”语言更接近机器语言。我不管现在大学里在教什么流行的垃圾语言(trendyjunk),你至少得花一个学期接近机器。否则, 你不可能使用高级语言写出高效的代码。这意味这你不会有机会写编译器或者操作系统,也许这是更好的编程工作;别人不会相信你能够为大项目设计架构。无论你知道多少高级的控制结构,知道如何进行错误处理,如果你不能解释为什么 while (*s++ = *t++);的意思是进行字符串拷贝(而且对你而言这是世界上最自然,最易懂的代码),那么你就是在对编程一窍不通的状态下编程(programming basedonsuperstition)。打个比方,就好比一个医生不懂基本的解剖学就给你开处方,如果你问这个医生为什么开这种药而不是那种药,他会说因为医药销售代表说这种药有用。
毕业前学习微观经济学(microeconomics)

我个人对经济学的一些理解:在经济学刚诞生的时候,它只是局限于有限的领域,在这些领域中人们发展和发现了很多 有用的理论和很有趣的事实,这些理论和事实是从逻辑上是可以证明的。然后, 经济学开始走下坡路了。“有限的领域”就是微观经济学,它对于商业可以进行有意义的指导。然后,事情就开始变糟了(以下部分你可以跳过),你接下来碰到的是讨论诸如失业率和银行利率之间关系之类东东的宏观经济学,很多时候宏观经济学讨论的理论都是无法证明正确或者错误的。接下来事态更加恶化了,经济学中的一些领域开始和物理学搭界,嗯,学习物理经济学也许你帮你在华尔街找到好工作。言归正传,无论如何请学习微观经济学,因为你需要知道什么是“供给和需求”,什么是竞争优势,什么是净现值(NPVs,Net PresentValue,指项目经济寿命期内现金流入总和与现金流出总和之差额),什么是折扣和边际效用(discounting and marginalutility),如果你真想了解商业是如何运作的话。
为什么计算机系的学生要学习经济学?因为理解商业基本规律的程序员对商业界来说是宝贵的程序员。我记得无数个程序员使我非常沮丧,因为他们在代码中坚持某些疯狂的设计,这些设计从技术上来说,完美;从资本主义的角度来看,发疯。如果你是一个理解商业的程序员,商业会给你回报。这就是你要学习经济学的原因。
不要因为某些非计算机课程枯燥无趣就敬而远之
首先,你需要让你的学分平均分(GPA)看起来漂亮点。
不要低估学分平均分的威力。很多雇主和人事经理(包括我)阅读简历时首先看成绩,为什么?因为这代表了大部分的教授在很长的时期内对你的学业的一个平均的看法。托福成绩(美国的托福大致相对于我国的高考中的语文考试)?哈,几个小时的测验而已。当然学分不一定说明了一切,如果你修的是很难的课程,学分就有可能低一点。即使你的学分平均分很高,我还是要看各科分数是否 一致。如果你应聘的是软件工程师职位,我为什么要关心你在大学里学的欧洲历史课程分数的高低呢?毕竟,历史很 枯燥。那么要是你要编程的部分也是很枯燥的,你是不是要放弃了?事实上,有时候编程是枯燥的,如果你不能忍受编程中的枯燥部分的话,你就不能完成整个工作,雇主不愿意雇佣你这样的员工。
我在大学里修过一门叫做“文化人类学”的课程,因为那时候我也搞不懂我到底要学什么,听起来这么课程可能还蛮有意思的。

出乎我的意料。我不得不阅读大量讲述巴西热带雨林中的印第安人如何如何的书,让人真昏昏欲睡。听老师讲解也好不到哪去,我发觉看教室外的草如何长更有趣点。土著人如何烤蕃薯藤和我有什么关系?我为什么要去讨论如何烤蕃薯藤?但是期中考试马上就要到了,我暗暗下定决心,如果我能跨越“文化人类学”这个障碍,以后也许没有什么能难倒我了。我决心得A并且得到了A。以后当我不得不坐在林肯中心,连看18个小时的瓦格纳的《尼伯龙根的指环》时,我终于明白我为什么要学习“文化人类学”了,相比之下,我也能忍受这种歌剧了。
学习有大量编程实践的课程
我还记得决定不去读研究生的那一刻。
就是在学习 《动态逻辑》(Dynamic Logic)这门课的时候,我记得是耶鲁的Lenore Zuck(一个天才的教师)教的。
修这门课的时候,我已经不再是雄心勃勃了。我可不指望在这么课程中得个A,我梦想的是混个及格。逻辑本质上是很简单的:如果结论正确,前提必须正确。例如,如果“所有读书好的人都能找到工作”并且“张三的读书好”,那么“张三能够找到好工作”。就这么简单。
但是我要学的是动态逻辑, 动态逻辑和一般逻辑差不多,但是要考虑时间因素。例如,“在你开灯 之后,你可以看见你的鞋子”加上“过去灯被打开了”意味着“你现在可以看到你的鞋子”
动态逻辑学对于象Zuck教授这样的天才理论家来说非常诱人,因为这门学科的知识也许可以用来证明计算机程序是否正确。我记得在第一堂课上,为了证明“如果你有一盏关着的灯”并且“你按了一下开关”,那么“现在灯亮了”,Zuck教授就使用了两黑板加上边上的墙壁。
证明过程难以置信的复杂。我觉得如此复杂的证明过程很可能会有小错误,但是我没办法证明 证明过程本身是正确的。事实上,写在黑板上的证明跳过了很多中间步骤,许多步的证明使用了演绎法,使用了归纳法,以及一些研究生才懂的证明方法。
作为课后作业,我们需要证明以下命题: 如果灯过去是关着的, 并且现在它是开着的,请证明有人按了开关
我真的试着证明它了。
我花了许多小时,试图证明这个命题。
在无数个小时的努力后,我发觉Zuck博士的原始的证明有一个逻辑上的错误,也许这个错误是我的笔记抄错了,我不知道。于是我终于认识到,如果为了证明一个简单的问题需要花三个小时写下几黑板的证明步骤,再考虑到这个漫长的证明过程中可能会引入种种错误,那么这种机制是不可能用来证明任何 有趣的东西的。
对动态逻辑学家来说, 有用是无关紧要的。
于是我退出了那门课程,发誓永远不会去读计算机系的研究生。
这个故事的主题是,计算机科学和软件开发不一样。如果你非常非常幸运,你的学校会开软件开发的课程。然而,他们也可能不开这样的课程,因为名牌大学认为教授实用技巧的事情应该留给那些二三流的技术学院或者某些释放犯人再安置计划。你可以在任何地方学习 编程,我们是耶鲁大学,我们培养未来的世界领导人。你付给耶鲁16万美元的学费就是为了学习如何写循环语句吗?你把耶鲁当成什么地方了?Java速成班吗?哼。
问题在于,我们没有一个专业的学校教授软件开发。所以如果你想成为一个程序员,你可以进计算机系读书(当然计算机科学也值得学习),但是你学的 不是软件开发。
如果走运的话,你可以在计算机系发掘出很多有大量编程实践的课程,就象你能在历史系找到很多提供写作水平的课程一样。这些课程绝对值得学习。如果你喜欢编程,不要为你不能上教授诸如lambda算子或者线性代数的课程沮丧,在那里你连摸一下计算机的机会都没有。找找看有没有名字中带有“实习(Practicum)”字样的课程,不要在乎Practicum是个拉丁语。有用的(无奈状)课程就是需要在课程名中塞一些拉丁语,才能从那些装模作样(Liberal Artsy Fartsy)管理层的眼前蒙混过关。
不要担心工作都跑到印度去了
啊哈,如果你人在印度,你就无所谓了。愿你享受外包带来的工作机会并顺祝身体健康。
但是我听说现在愿意读计算机系的学生越来越少了。据说原因之一是工作机会都跑到印度去了。我认为这种观点是大错特错。首先,根据眼前的商业时尚选择事业是非常愚蠢的。其次,即使工作真的都跑到印度和中国去了,编程对于其他有趣的工作来说都是极好的训练,例如业务流程工程(businessprocessengineering)。第三,无论是在美国还是印度,好程序员仍然是非常短缺的,请相信我。当然,现在有许多所谓搞IT的人吵吵嚷嚷地说就业形势不好,工作太难找。但是事实如何?恕我直言,好程序员找工作还是很容易。第四,你还有更好的主意吗?历史系的毕业生找工作更容易吗?去法学院如何?据我所知,99%的律师恨他们的工作,每分钟都恨。而且律师一周工作90小时。正象我以前说过的,如果你喜欢计算机,那么感谢上帝,你将属于全世界人中的极少数的幸运儿,这些幸运儿热爱他们的工作,而且工作也可以提供体面的收入。
实际上,我也不认为报考计算机系的人越来越少有多大的意义。相对于internet泡沫时期大家都疯狂的往计算机系挤,现在的人数回落只是回归正常水平而已。在泡沫时期,我们这个行业涌入了许多对计算机毫无兴趣的南郭先生,他们梦想的是拿着高的吓人的薪水加诱人的期权,然后年轻退休。谢天谢地,现在这些人都跑了。
好好做夏季毕业实习
明智的招聘者知道热爱编程的人初中就为当地的牙医写数据库程序,高中就在计算机夏令营教课,为校报规划网站,在某个软件公司做实习。他们找的就是这样的人。

如果你喜欢编程,你最容易犯的最大的错误就是“有活就接”。我知道,其他专业的学生假期打工可顾不了这些条条框框。但是你不一样,你拥有一种特殊技能,不要浪费它。当你毕业时,你的简历上应该已经罗列一堆的编程工作实习。让其他人去“为大家提供租车服务”(TomWelling是个例外,他业余时间去演超人)。
最后,为了让你的生活更容易一点,也为了说明我这篇文章是能够自圆其说的,我将给我自己的公司的做做广告。我的公司Fog Creek软件公司,可以为大学生提供 软件开发方面的实习机会。在我们公司,你可以学习“编码,开发,商业”。去年在我们公司实习的Ben就是这么说的,可不是因为我给他什么好处他才这么说。二月一号截至,抓紧机会吧。
如果你听了我的建议,你就会太早地卖掉Microsoft公司的股票,拒绝Google提供的职位,原因是因为你已经拥有自己的公司了。到时候可别后悔,更别怪我,呵呵。
Source 免费内容:Advice for Computer Science College Students
By Joel Spolsky
Sunday, January 02, 2005
Despitethe fact that it was only a year or two ago that I was blubbering abouthow rich Windows GUI clients were the wave of the future, collegestudents nonetheless do occasionally email me asking for career advice,and since it's recruiting season, I thought I'd write up my standardadvice which they can read, laugh at, and ignore.
Most college students, fortunately, are brash enough never to botherasking their elders for advice, which, in the field of computerscience, is a good thing, because their elders are apt to say goofy,antediluvian things like "the demand for keypunch operators will exceed100,000,000 by the year 2010" and "lisp careers are really very hotright now."
I, too, have no idea what I'm talking about when I give advice tocollege students. I'm so hopelessly out of date that I can't reallyfigure out AIM and still use (horrors!) this quaint old thing called"email" which was popular in the days when music came on flat roundplates called "CDs."

So you'd be better off ignoring what I'm saying here and instead building some kind of online software thing that lets other students find people to go out on dates with.
Nevertheless.
If you enjoy programming computers, count your blessings: you are ina very fortunate minority of people who can make a great living doingwork they enjoy. Most people aren't so lucky. The very idea that youcan "love your job" is a modern concept. Work is supposed to besomething unpleasant you do to get money to do the things you actuallylike doing, when you're 65 and can finally retire, if you can affordit, and if you're not too old and infirm to do those things, and ifthose things don't require reliable knees, good eyes, and the abilityto walk twenty feet without being out of breath, etc.
What was I talking about? Oh yeah. Advice.
Without further ado, then, here are Joel's Seven Pieces of FreeAdvice for Computer Science College Students (worth what you paid forthem):
- Learn how to write before graduating.
- Learn C before graduating.
- Learn microeconomics before graduating.
- Don't blow off non-CS classes just because they're boring.
- Take programming-intensive courses.
- Stop worrying about all the jobs going to India.
- No matter what you do, get a good summer internship.
Now for the explanations, unless you're gullible enough to do allthat stuff just because I tell you to, in which case add: 8. Seekprofessional help for that self-esteem thing.
Learn how to write before graduating.
Would Linux have succeeded if Linus Torvalds hadn't evangelizedit? As brilliant a hacker as he is, it was Linus's ability to conveyhis ideas in written English via email and mailing lists that madeLinux attract a worldwide brigade of volunteers.
Have you heard of the latest fad, Extreme Programming? Well, withoutgetting into what I think about XP, the reason you've heard of it isbecause it is being promoted by people who are very gifted writers andspeakers.
Even on the small scale, when you look at any programmingorganization, the programmers with the most power and influence are theones who can write and speak in English clearly, convincingly, andcomfortably. Also it helps to be tall, but you can't do anything aboutthat.

Thedifference between a tolerable programmer and a great programmer is nothow many programming languages they know, and it's not whether they prefer Python or Java.It's whether they can communicate their ideas. By persuading otherpeople, they get leverage. By writing clear comments and technicalspecs, they let other programmers understand their code, which meansother programmers can use and work with their code instead of rewriting it.Absent this, their code is worthless. By writing clear technicaldocumentation for end users, they allow people to figure out what theircode is supposed to do, which is the only way those users can see thevalue in their code. There's a lot of wonderful, useful code buried onsourceforge somewhere that nobody uses because it was created byprogrammers who don't write very well (or don't write at all), and sonobody knows what they've done and their brilliant code languishes.
I won't hire a programmer unless they can write, and write well, inEnglish. If you can write, wherever you get hired, you'll soon findthat you're getting asked to write the specifications and that meansyou're already leveraging your influence and getting noticed bymanagement.
Most colleges designate certain classes as "writing intensive,"meaning, you have to write an awful lot to pass them. Look for thoseclasses and take them! Seek out classes in any field that have weeklyor daily written assignments.
Start a journal or weblog. The more you write, the easier it willbe, and the easier it is to write, the more you'll write, in a virtuouscircle.
Learn C before graduatingPart two: C. Notice I didn't say C++. Although C is becomingincreasingly rare, it is still the lingua franca of workingprogrammers. It is the language they use to communicate with oneanother, and, more importantly, it is much closer to the machine than"modern" languages that you'll be taught in college like ML, Java,Python, whatever trendy junk they teach these days. You need to spendat least a semester getting close to the machine or you'll never be able to create efficient code in higher level languages.You'll never be able to work on compilers and operating systems, whichare some of the best programming jobs around. You'll never be trustedto create architectures for large scale projects. I don't care how muchyou know about continuations and closures and exception handling: ifyou can't explain why while (*s++ = *t++); copies astring, or if that isn't the most natural thing in the world to you,well, you're programming based on superstition, as far as I'mconcerned: a medical doctor who doesn't know basic anatomy, passing outprescriptions based on what the pharma sales babe said would work.
Learn microeconomics before graduating

Superquick review if you haven't taken any economics courses: econ is one ofthose fields that starts off with a bang, with many useful theories and facts that make sense, can be proven in the field, etc., and then it's all downhill from there.The useful bang at the beginning is microeconomics, which is thefoundation for literally every theory in business that matters. Afterthat things start to deteriorate: you get into Macroeconomics (feelfree to skip this if you want) with its interesting theories aboutthings like the relationship of interest rates to unemployment which,er, seem to be disproven more often than they are proven, and afterthat it just gets worse and worse and a lot of econ majors switch outto Physics, which gets them better Wall Street jobs, anyway. But makesure you take Microeconomics, because you have to know about supply anddemand, you have to know about competitive advantage, and you have tounderstand NPVs and discounting and marginal utility before you'll haveany idea why business works the way it does.
Why should CS majors learn econ? Because a programmer whounderstands the fundamentals of business is going to be a more valuableprogrammer, to a business, than a programmer who doesn't. That's allthere is to it. I can't tell you how many times I've been frustrated byprogrammers with crazy ideas that make sense in code but don't makesense in capitalism. If you understand this stuff, you're a morevaluable programmer, and you'll get rewarded for it, for reasons whichyou'll also learn in micro.
Don't blow off non-CS classes just because they're boring.Blowing off your non-CS courses is a great way to get a lower GPA.
Never underestimate how big a deal your GPA is. Lots and lots ofrecruiters and hiring managers, myself included, go straight to the GPAwhen they scan a resume, and we're not going to apologize for it. Why?Because the GPA, more than any other one number, reflects the sum ofwhat dozens of professors over a long period of time in many differentsituations think about your work. SAT scores? Ha! That's one test overa few hours. The GPA reflects hundreds of papers and midterms andclassroom participations over four years. Yeah, it's got its problems.There has been grade inflation over the years. Nothing about your GPAsays whether you got that GPA taking easy classes in home economics atPodunk Community College or taking graduate level Quantum Mechanics atCaltech. Eventually, after I screen out all the 2.5 GPAs from PodunkCommunity, I'm going to ask for transcripts and recommendations. Andthen I'm going to look for consistently high grades, not just high grades in computer science.
Why should I, as an employer looking for software developers, careabout what grade you got in European History? After all, history is boring. Oh,so, you're saying I should hire you because you don't work very hardwhen the work is boring? Well, there's boring stuff in programming,too. Every job has its boring moments. And I don't want to hire peoplethat only want to do the fun stuff.
I took this course in college called Cultural Anthropology because I figured, what the heck, I need to learn something about anthropology, and this looked like an interesting survey course.

Interesting?Not even close! I had to read these incredibly monotonous books aboutIndians in the Brazilian rain forest and Trobriand Islanders, who, withall due respect, are not very interesting to me. At some point, theclass was so incredibly wearisome that I longed for something moreexciting, like watching grass grow. I had completely lost interest in the subject matter. Completely, and thoroughly. My eyes tearedI was so tired of the endless discussions of piling up yams. I don'tknow why the Trobriand Islanders spend so much time piling up yams, Ican't remember any more, it's incredibly boring, but It Was Going To BeOn The Midterm, so I plowed through it. I eventually decided thatCultural Anthropology was going to be my Boredom Gauntlet: my personalobstacle course of tedium. If I could get an A in a class where thetests required me to learn all about potlatch blankets, I could handleanything, no matter how boring. The next time I accidentally get stuckin Lincoln Center sitting through all 18 hours of Wagner’s Ring Cycle,I could thank my studies of the Kwakiutl for making it seem pleasant bycomparison.
I got an A. And if I could do it, you can do it.
Take programming-intensive courses.
I remember the exact moment I vowed never to go to graduate school.
It was in a course on Dynamic Logic, taught by the dynamic Lenore Zuck at Yale, one of the brightest of an array of very bright CS faculty.
Now, my murky recollections are not going to do proper credit tothis field, but let me muddle through anyway. The idea of Formal Logicis that you prove things are true because other things are true. Forexample thanks to Formal Logic, "Everyone who gets good grades will gethired" plus "Johnny got good grades" allows you to discover the newtrue fact, "Johnny will get hired." It's all very quaint and it onlytakes ten seconds for a deconstructionist to totally tear aparteverything useful in Formal Logic so you're left with something fun,but useless.
Now, dynamic logic is the same thing, with the addition of time. For example, "after you turn the light on, you can see your shoes" plus "The light went on in the past" implies "you can see your shoes."
Dynamic Logic is appealing to brilliant theoreticians like ProfessorZuck because it holds up the hope that you might be able to formallyprove things about computer programs, which could be very useful, if,for example, you could formally prove that the Mars Rover's flash cardwouldn't overflow and cause itself to be rebooted again and again allday long when it's supposed to be driving around the red planet lookingfor Marvin the Martian.
So in the first day of that class, Dr. Zuck filled up two entire whiteboards and quite a lot of the wall next tothe whiteboards proving that if you have a light switch, and the lightwas off, and you flip the switch, the light will then be on.
The proof was insanely complicated, and very error-prone. It was harder to prove that the proofwas correct than to convince yourself of the fact that switching alight switch turns on the light. Indeed the multiple whiteboards ofproof included many skipped steps, skipped because they were tootedious to go into formally. Many steps were reached using thelong-cherished method of Proof by Induction, others by Proof byReductio ad Absurdum, and still others using Proof by Graduate Student.
For our homework, we had to prove the converse: if the light was off, and it's on now, prove that you flipped it.
I tried, I really did.
I spent hours in the library trying.
After a couple of hours I found a mistake in Dr. Zuck's originalproof which I was trying to emulate. Probably I copied it down wrong,but it made me realize something: if it takes three hours of filling upblackboards to prove something trivial, allowing hundreds ofopportunities for mistakes to slip in, this mechanism would never beable to prove things that are interesting.
Not that that matters to dynamic logicians: they're not in it for useful, they're in it for tenure.
I dropped the class and vowed never to go to graduate school in Computer Science.
The moral of the story is that computer science is not the same assoftware development. If you're really really lucky, your school mighthave a decent software development curriculum, although, they mightnot, because elite schools think that teaching practical skills isbetter left to the technical-vocational institutes and the prisonrehabilitation programs. You can learn mere programminganywhere. We are Yale University, and we Mold Future World Leaders. Youthink your $160,000 tuition entititles you to learn about while loops? What do you think this is, some fly-by-night Java seminar at the Airport Marriott? Pshaw.
The trouble is, we don't really have professional schools insoftware development, so if you want to be a programmer, you probablymajored in Computer Science. Which is a fine subject to major in, butit's a different subject than software development.
If you're lucky, though, you can find lots of programming-intensivecourses in the CS department, just like you can find lots of courses inthe History department where you'll write enough to learn how to write.And those are the best classes to take. If you love programming, don'tfeel bad if you don't understand the point of those courses in lambdacalculus or linear algebra where you never touch a computer. Look forthe 400-level courses with Practicum in the name. This is an attempt tohide a useful (shudder) course from the Liberal Artsy Fartsy Administration by dolling it up with a Latin name.
Stop worrying about all the jobs going to India.
Well, OK, first of all, if you're already in India, you never really had to worry about this, so don't even start worrying about all the jobs going to India. They're wonderful jobs, enjoy them in good health.
But I keep hearing that enrollment in CS departments is droppingperilously, and one reason I hear for it is "students are afraid to gointo a field where all the jobs are going to India." That's so wrongfor so many reasons. First, trying to choose a career based on acurrent business fad is foolish. Second, programming is incredibly goodtraining for all kinds of fabulously interesting jobs, such as businessprocess engineering, even if every single programming job does go toIndia and China. Third, and trust me on this, there's still anincredible shortage of the really good programmers, here andin India. Yes, there are a bunch of out of work IT people making a lotof noise about how long they've been out of work, but you know what? Atthe risk of pissing them off, really good programmers do havejobs. Fourth, you got any better ideas? What are you going to do, majorin History? Then you'll have no choice but to go to law school. Andthere's one thing I do know: 99% of working lawyers hatetheir jobs, hate every waking minute of it, and they're working 90 hourweeks, too. Like I said: if you love to program computers, count yourblessings: you are in a very fortunate minority of people who can makea great living doing work they love.
Anyway, I don't think students really think about this. The drop inCS enrollment is merely a resumption of historically normal levelsafter a big bubble in enrollment caused by dotcom mania. That bubbleconsisted of people who didn't really like programming but thought thesexy high paid jobs and the chances to IPO at age 24 were to be foundin the CS department. Those people, thankfully, are long gone.
No matter what you do, get a good summer internship.
Smart recruiters know that the people who love programming wrote adatabase for their dentist in 8th grade, and taught at computer campfor three summers before college, and built the content managementsystem for the campus newspaper, and had summer internships at softwarecompanies. That's what they're looking for on your resume.

Ifyou enjoy programming, the biggest mistake you can make is to take anykind of job--summer, part time, or otherwise--that is not a programmingjob. I know, every other 19-year-old wants to work in the mall foldingshirts, but you have a skill that is incredibly valuable even whenyou're 19, and it's foolish to waste it folding shirts. By the time yougraduate, you really should have a resume that lists a whole bunch ofprogramming jobs. The A&F graduates are going to be working atEnterprise Rent-a-Car "helping people with their rental needs." (Exceptfor Tom Welling. He plays Superman on TV.)
To make your life really easy, and to underscore just how completelyself-serving this whole essay is, my company, Fog Creek Software, has summer internships in software development that look greaton resumes. "You will most likely learn more about software coding,development, and business with Fog Creek Software than any otherinternship out there," says Ben, one of the interns from last summer,and not entirely because I sent a goon out to his dorm room to get himto say that. The application deadline is February 1st. Get on it.
If you follow my advice, you, too, may end up selling stock inMicrosoft way too soon, turning down jobs at Google because you wantyour own office with a door, and other stupid life decisions, but theywon't be my fault. I told you not to listen to me.
My new book is here! Apress has just published a new collection of 36 essays from Joel on Software,aptly named More Joel on Software. Get yours today! Available from Amazon.com or wherever fine cheese is sold.
About the Author: I’m your host, Joel Spolsky, a softwaredeveloper in New York City. Since 2000, I've been writing aboutsoftware development, management, business, and the Internet on thissite. For my day job, I run Fog Creek Software, makers of FogBugz—the smart bug tracking software with the stupid name, and Fog Creek Copilot—the easiest way to provide remote tech support over the Internet, with nothing to install or configure.
Enteryour email address to receive a (very occasional) email whenever Iwrite a major new article. You can unsubscribe at any time, of course. 免费内容:
Joel Spolsky 是纽约市一家小软件公司,Fog Creek Software, 的创始人。他毕业于耶鲁大学,曾在美国微软公司,Viacom, Juno 任软件设计师及经理。
[ 本帖最后由 蓝月鸟 于 2008-9-19 01:29 编辑 ]
搜索更多相关主题的帖子:
计算机系 学生 建议
|