导读:《Thinking in Java》作者 Bruce Eckel 最新的Blog,很有用的计算机新手指南,翻译过来分享。
原文链接: http://www.artima.com/weblogs/viewpost.jsp?thread=259358
Computing Thoughts
A Career in Computing
by Bruce Eckel
June 2, 2009
摘要:
我总是被要求提供对于职业的建议,在这个Blog里我已经尝试过去寻找答案,而且还在继续。对于提出问题却没有得到想要的答案的的人,我深感抱歉。你们的问题激励着我继续为这个Blog而工作,这已经有一段时间了。
大家总是在问一个错误的问题:“我应该学习C++还是Java?”在这个文章里,我将试着陈述我对于选择职业真正应该关注的问题的看法。
请注意我这篇文章的目标读者并不是已经做出自己选择的人。对于这样的人来说,你会一直继续,不管别人怎么说,因为她已经渗透在你的血液里,你离不开她。你已经知道答案:C++、Java、脚本语言、Python等等一大堆的语言和技术,你都理所当然地会去学习。你已经知道好几种不同的语言,即使你才仅仅14岁。
问我这样的问题的人可能来着其他行业,或者来着诸如Web开发之类的领域,他们知道HTML是一种类编程语言,而且想尝试构建某些更大型的应用。但我特别希望,当你在问这个问题时,你已经意识到了想要在计算机领域取得成功,你需要学会怎么去学习,而且从不停止学习。
在这个领域做得越多,我越觉得软件开发比任何东西都更接近于写作。我们从来不知道是什么早就了好的作者,我们只知道什么时候我们会喜欢某个人的文字。这不是一种工程,仅仅需要把东西倒进口子,在转动手柄……把软件开发看成确定性的,是一个诱人的想法,这也是为什么我们总是想出一个个工具帮助我们制造出我们期望的表现。但是我们经验一直在告诉我事与愿违,因为这关乎人甚于流程。而软件运行在一个确定的机器上这个事实实际上已经越来越被人遗忘,就像Heisenberg原理之于人类一样。
我的父亲是造房子的,小时候我有时会帮帮忙,一般是打打下手,放放砖块之类。他和他的木工告诉我,他们是为我好才给我这样的活——这样我就不至于走入这个行业。事实确实是这样。
我们可以把开发软件比作造房子。我们不会把所有造房子的人当成完全一模一样的人。那里有着混泥土匠、屋顶工、管道工、电气工、砖瓦工、泥水匠、瓦片工、搬运工、粗木工、细木工,当然,还有工头。每一个工作都需要对应的技能,而这些都需要花时间和精力去获得。跟软件开发一样,造房子也是一个“建立-推翻”的主题。如果你想要很快地获得回报,你可能从杂手和砌瓦工开始做,这样你不需要太多的学习曲线就可以获得回报。因为需求很强劲,你有稳固的工作,甚至你的收入也可能提升,如果没有足够的人手的话。但是一旦行情下滑,木匠甚至工头就可能把砌瓦工一脚踢开。
当互联网刚刚兴起时,仅仅是花一点时间学习HTML,你就可以得到一份薪水丰厚的工作。但是当形势惨淡时,对于技能的要求更高了,HTML程序员(就像杂工和砌瓦工一样)第一个被抛弃了,而拥有更高技能的程序员则留了下来。
在这里我想说的是,除非你准备好了去学习一辈子,不然不要进入这个行业。编程看起来似乎是一个高收入而又稳定的工作——但是唯一能保证这一点的,你总是让能自己更有价值。
当然你总能找到例外。总是有一些人,仅仅学了一门编程语言,就可以胜任留在一个岗位上,而不需要增长他的技能。当他们只是幸免于难而已,他们最终无疑是很脆弱的。为了不让自己变得脆弱,你需要持续的提高自己,通过阅读、加入用户组(user groups)、参加会议以及研讨会。在这个领域学得越深,你就越有价值,也就意味着你有更稳定的职业前景,可以支配更高的薪水。
另一个方法是先总体地观察这个领域,找到你最有才干的地方。例如,我的兄弟对软件很感兴趣,也进入了这个行业,但他的工作是安装电脑、维修电脑已经升级电脑。他总是一丝不苟,所以当他在安装或者维修你的电脑,你知道当他做好之后,它一定会很完美——不只只是软件,连电线都会被仔细地捆在一起。他总是生意兴隆,远远超出他的精力所能及,而且他甚至都不需要理会.com的崩溃。不消说,他的工作肯定不会被抢走。
我在校园里待了很长的时间,而且还一直和她藕断丝连着。我甚至在UCLA开始了一段博士课程,又幸运地突然停止了。我说“幸运”是因为我不再喜欢呆在学校,而我之前待在学校那么长时间,只是因为我很享受她。但我的享受的,基本上是不务正业的东西——艺术和舞蹈课,在校报工作,还有一小撮计算机编程课(之所以说“不务正业”,因为我本科是物理专业,研究生才是计算机工程专业)。虽然我在学术上远谈不上卓越(有意思的是很多当时也许不会接受我这个学生的学校现在却用我的书做教材)。我真的很享受作为学生的日子,如果我读完了博士课程,也许我就会以一个教授的身份终老一生。
但就如现在看到的,我在学校里最大的收获恰恰来自我那些“不务正业”的课程,她们拓展了我的思维,让它超越了“我们已经知道的东西”。在计算机领域这是毋庸置疑的,因为你总是为了某种目标而去开发,你对目标了解得越多,你就做得越好。我遇到过一些欧洲的研究生,他们被要求结合其他专业学习计算机,而他们的论文在解决这个专业特定领域的问题。
同样,我觉得屹立于编程之外,将极大得提高你解决问题的能力(就如多知道几种编程语言将极大地提高你的编程技能)。很多时候,我发现仅仅接受计算机科学的学习的人,对比有着其他背景,如数学或者物理等的人,在思维上有更多的局限性,因为后者有着更严谨的思维,也不会那么容易认为“这个适合我”(it works for me)。
又一次我组织了一次会议,议程之一是探讨出一个理想的工作候选人的特征列表:
。把工作当成生活方式。例如,你应该知道不止一种语言,没有什么比学习一门新语言更能让你了解到一门语言的不足。
。知道从哪里,怎么获得知识。
。学习在先,艺术在后(Study prior art)。
。我们是使用工具的人。
。学习是事情最简单化(Learn to do the simplest thing)
。理解业务(看杂志。从小公司开始,因为那里有短小有趣的文章,接着你就可以考虑是否要看其他)
。你要为错误负起个人的责任。“我就是这样(It works for me)”是不能接受的托词。找到你自己的失误。
。成为一个领导者。一个沟通和激励者。
。你为谁服务?
。没有正确的答案……只有更好的方法。展示并讨论你的代码,不要带着感情因素。你并不是你的代码。
。完美是渐进的。
做任何可能的冒险——最好的冒险是那些让人害怕的,但在尝试的过程中能让你感受到出乎所料的。如果你不为一个确定的结果而计划,那是最好的,因为你总是会失去正确的可能,如果你太注重于结果的话。我最好的冒险就是那些带着“让我们做些试验,看看结果怎样”动机而开始的。
有些人要对我的回答失望了,说“是的,这很有趣很有用。当时说实在的,我应该学什么?C++还是Java?” 我还是再重复一次:我知道0和1看起来让每一件事情运作起来很确定,所以这样的问题应该有一个简单的答案,但是没有。这不是做一个选择然后做完它。这关乎持续的学习和有时需要勇气的选择。相信我,你的生活会因此更加激情四射。
Further Reading
Here’s an earlier piece I wrote on how I got started in programming.
I found all these to be interesting and stimulating takes on the same subject:
Teach yourself programming in ten years, by Peter Norvig: http://norvig.com/21-days.html
How to be a Programmer, by Robert Read: http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
Here’s a speech by Steve Jobs, trying to inspire a group of graduating college students.
Kathy Sierra: Does College Matter? http://headrush.typepad.com/creating_passionate_users/2005/07/does_college_ma.html
http://www.paulgraham.com/college.html
http://www.joelonsoftware.com/articles/CollegeAdvice.html
http://www.jamesshore.com/Blog/Five-Design-Skills.html
http://steve-yegge.blogspot.com/2006/03/truth-about-interviewing.html
In a future article (I’ll post the link here when it’s done), I will talk about the importance of understanding management and business issues, whether or not you ever plan to be a manager, and in that article I’ll include a list of books that (even though they’re about management) you should read to prepare yourself for your career.