标签归档:career

Career & Love

  最近看了几本创业的书,特别是《Rework》和《黑客与画家》——有人说开发人员看了,会被唤醒。很没个性地说——我也有这个感觉-_-

  从去年年中开始做面试官,到现在刚好整整一年,面了几十个候选人,通过的人还是个位数——我只负责初面的技术面试。可能目前技术人员的成长环境并不好吧,对这个结果偶还是蛮失望的。

  今天面的一个人就是一个极端例子。一开始面了项目经验,虽然他做的行业蛮“高端”的,而且业务相对复杂,“准入门槛”较高,做得深的话,应该是很有竞争力,可惜他对业务的理解居然只停留在需求的接口文档上。后来面了技术能力,我跟搭档问了将近十个问题,答出来的寥寥。更无语的是,送他下电梯的时候,他还不忘点评一句“你们问的技术问题这么深,谁能答得上来啊……”而其实,这些问题,对于一个三年经验的开发人员来说,就是需要掌握的——而他已经工作七年了。

  感觉现在的业内气氛有点浮躁。这样的人在这里被刷掉了,也许去其他地方还是能找到薪资不错的工作——但是作为一个人的职业发展来说,跳槽追求的是什么呢?

  对于开发人员来说,发展方向不外乎两种:或者专心研究技术,成为技术专家/技术架构师,专注于解决性能,扩展性,编程模型和开发框架等问题;或者偏重业务,通过研究本行业内的各种应用和解决方案,成为举一反三的行业应用咨询师或业务/应用架构师;

  两个方向,都是需要在深度和广度上不断扩展的,面试落选的开发中最普遍的问题,就是很多的开发是外包出身,经验杂乱而又没有沉淀,导致N多年了,仍然还在照着详细设计文档敲代码。

  上面是之于大公司。对于创业公司,其实,开发人员的可能性更大。道家言:一生二,二生三,三生万物。开发人员就是互联网及软件行业的“一”,对于初创公司,是没有专职测试的,更没有产品经理。专职测试,只有在系统规模达到一定的程度,每次的升级都需要考虑对原有业务的影响的时候,才会产生;而产品经理,则是产品和用户达到一定规模了,需要有人重点关注产品的整合、协调和市场需求调研,才会出现;因此,测试和产品经理都是开发人员的“肋骨”——借用一下亚当的知识产权-_-

  因此,不管是在创业公司还是大公司,开发人员都有无限可能,好好沉淀自己才是王道。如果跳槽只为了一个月多赚几千块钱,等你老了会觉得很可笑——当然啦,创业就是另一回事了。

  ———————–分割线,下面请灯光师将灯光调暗,我们来谈谈感情——————————

  当了一次协调者:执着的小伙和逃亡的姑娘。跟小伙聊了好久,最后还是无功而返。对方给出的理由听起来是如此的耳熟;将心比心,这种感觉又是多么的亲切。

  再过7天,我对自己的三年诅咒就要满了。那三年的诅咒,就是给当年的我的“执着”的惩罚。当年的“执着”,除了给自己树立了一个臆想的“敌人”和一个荒废的blog,就再没留下什么——如果硬说有,那就是当年自我陶醉时写了近10万字的blog,还有因此锻炼出来的伤感细腻的文笔(稍等下,偶先吐会儿先-_-其实是高中时小说看多了)……现在回想起来,除了后悔还是后悔。真正的爱情不是那样的,也许每一个人都需要在感情中炽热一回,才会懂得爱,但是当年的我明显是烧错了地方了。

  然后看到当年自己的样子更加炽热地出现在另一人身上,感觉真的蛮奇特。

  问世间情为何物,一物降一物啊。

  严肃!严肃-_-严格来说,不管爱情是啥,它总是至少关乎默契和心跳,而默契是首要的。如果两个人不是一条生活轨道的,你把心跳出来了都没用。爱情也不是等价交换,不是你付出得多了,对方就要用爱来回报你。爱情更不是占有——你可以说爱情是排他的,但这话的前提是两个人已经在一起了——还没在一起就时时抓在手里生怕丢了,那就是赤裸裸的占有了。

  当局者迷,而且不愿意醒,只能老天保佑了。

A Career in Computing – 翻译

导读:《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.