最近读到几篇文章,关于年轻人选择工作,有质疑大公司的讨论,也有认为毕业生应该加入大公司的见解。

对于期望投身于软件行业的毕业生来说,对第一份工作总是有着特殊的情节,仿佛一步走错,遗憾终生似的。事实远非如此。职业选择跟找对象有几分相似,并没有对错之分,只有适合程度不同。但一旦感到不舒服,你可以随时更换工作,这一点反而比找对象轻松了许多。

尽管如此,第一份工作的选择仍是至关重要的。它很可能会直接影响着我们此后的进步速度、职业路线和社会地位。同时,职业路线说大一点也正是人生路线,没有人能够给别人直接的答案。说到底,这还是只与个人想成为怎样的人有关系,与别的无关。因此,这里我只想给想成为“技术牛人”的毕业生给一点建议,而不是那些随便找一份能够糊口的工作度日的人,更不是那些学会了SSH 就去接私单的投机主义者。

野生程序员

首次看到“野生程序员”一词正是在前些日子在博客园网站上,那篇摘自《Web全栈工程师的自我修养》的文章。原文中定义道:所谓“野生程序员”,就是没有计算机基础知识和相关教育经历,靠着对计算机开发的兴趣进入这个行业,虽然知识面比较广,但是各方面都一知半解的开发者。对这一定义并非完全同意,我更倾向于野生与否,与有无“计算机基础知识和相关教育经历”并没有太大关系。不过作者原义也并不是要强调这一点,因此这个词还是给我一种“相识恨晚”的感觉,我一直在寻找一个名词来形容“半路出家”的程序员们:“野生”很恰当。

现实中,很多程序员从业者都是野生程序员,几乎一大部分都是。这一比例在毕业生中,只会更大,几乎全部都是——与是否计算机相关专业无关。对于计算机相关专业的毕业生来说,尤其是硕士毕业生,大部分同学都有一定的实践经验。但这些经验与企业中真刀真枪还是有很大差距的。由于是一次性需求,“校园项目”中大多对工程性、性能等方面并没有很强的要求,也基本是少数几个人以简单的协作方式完成的。大学课程中所涉及的理论往往偏保守,软件技术却是一个瞬息万变的行业,因此学校所学与企业实际有着诸多差别也是很正常的。最近这几年的互联网更是有如新兴行业那样活跃,在短短的几年里,俨然从软件行业里区分了出来。

理工科的人给别人的印象有点木纳,而骨子里踏实于研究的人却是理想主义者,有时候还有些自我沉醉。计算机相关专业毕业的同学们,怀着一颗求知的心投身于社会,期待成为 Bill Gates 那样能够改变世界的天才,或是 Steve Wozniak 那样可爱的极客。很多同学在 C 语言和算法上下了大工夫,能够编写可以引导系统的操作系统,一个词法解析器更不在话下了。

然而这就不可一世么?事实上,这时的我们还很有可能只是不折不扣的野生程序员:我们不理解界面设计中的交互意图,想当然地绘制输出;我们不顾日后需求的变更,将 println 语句写遍每个方法;我们意识不到自己的随手一改给队友带来的麻烦,随便公开或删除了一个接口……

专业主义

不少刚毕业的同学以为自己身怀绝技,自己的加入对雇主企业来说是莫大的荣幸。我遇到过一位同事,他的 Web 开发技术基础不错,对 UI 的感觉很细致,是个可造之才。但很快,我们发现他在与团队的合作上出现一些不顺畅。每当我们向他了解一项特性的开发进展和结论时,他的习惯性回答是“我不知道”。而团队的计划会议上,他的姿态可以用嚣张来形容,不是低头玩手机就是仰面闭目,不知是在思考或是假寐。他的不当行为固然与团队失败的管理有直接关系,而其本人过于不专业的事实也可见一斑。

现实很残酷,因为它是现实,不是臆想。真实的情况是,企业作为我们的雇主,委托我们和同事一起完成工作,从而创造价值——如此简单。企业要寻求更有竞争力的毕业生作为其将来的中坚力量的储备,自然要表现出足够的诚意。但作为素未涉世的毕业生,我们也应该认识到,唯有当我们为企业创造了价值,得到了同事和管理者的认可时,我们才能“算得是个人物”。而要想今后获得更好的职业发展,并且不成为“自己曾经痛恨鄙视的那种人”,还有一件很重要的事,那就是成为专业人士

专业人士正是与“野生程序员”相对的另一种人。上面提到的那些初入行当的人会犯的错误在专业人士身上基本不会发生,即使不幸发生,他们也知道如何承担责任并挽回损失。“专业”二字承载了太多,总体来说,专业人士意味着是受人信任、技术高深的那些工程师。The Clean Coder(中文版名为《程序员的职业素养》)一书讲述了专业人士的特点,以及如何成为一个有职业素养的程序员。

书中列举典型专业人士的特点有:

  • 不行损害之事
  • 能够承担责任
  • 技艺精湛
  • 尊重与合作
  • 坚持学习
  • 了解业务领域
  • 与雇主/客户保持一致
  • 谦逊

说这么多,无非也就是人人所熟知的“敬业爱岗”四字,这古老的品德,却常常被人忘弃。可以说,要成为一名专业人士,任重而道远啊。即便现在只是菜鸟一枚,这又有什么关系呢?  我们年轻啊,有的是时间和精力。是啊,我正希望上面的文字能够帮助毕业生朋友知晓,现在的你,以及更好的你分别是怎样的。这显然与职业选择息息相关。

揠苗助长

揠苗助长的故事说的是,我们不应该破坏事物的自然发展规律,想当然地使些小聪明只能弄巧成拙。而成为专业人士这件事,竟然是有一些方法和技巧的。

高中时,班主任曾在批评我们时说到一个形象的比喻:“我们班并不是染缸,进来了便能考上大学”。不过,环境的影响确是潜移默化的,人与人之间的影响也是润物无声的。同一个人,在不同环境里长成了不同的样子。所以,这样说来,工作的选择与我们成长的方向和速度紧密关系不言而喻。

有时候,我们会想“当我生在战乱年代,也会是个将军。”这句话不无道理,时代逼我们去想、去做了更多我们不曾设想过的伟大事业。成为技术牛人的一个重要前提是:机遇。所以,如果要更快地长进,那就去到一个“需要你作为一位专业人士”的地方,去找到自己的机遇所在。在那里,很快便有两种结果产生:你发现自己更适合其他事业,或者你很快成为了专业人士!

我想,这都是值得祝贺的事。

ThoughtWorks,或者创业团队

终于等到你,亲爱的毕业生朋友!

哪里“需要你作为一位专业人士”?正是ThoughtWorks。这当然不是一篇广告文章,就像麦肯锡公司没必要借《麦肯锡方法》推销自己一样。把 ThoughtWorks 的故事当作本文的案例分析好了。

ThoughtWorks 是一家定制软件专业服务企业,以践行和推广敏捷管理方法论并为各行业客户提供高质量、切合业务价值的软件闻名于世。ThoughtWorks 将“技术先进”作为公司立足之本的“三大支柱”之一,放在很重要的位置,而不像是普通 IT 企业中将技术活动仅视作“顺便”而为。在 ThoughtWorks,团队以业务线来划分,而不是工作职能。这意味着,每位开发人员都会涉及到服务器和客户端的开发,而不管是基础设施环境的搭建还是生产环境系统的运维,都会有开发人员的身影。职责不分了(或者说 多了),需要面对的沟通与合作的对象,也正是所有人。在这样的工作模式下,一位可能技能还略显生疏的毕业生,很快、很快就成为了能够承担重任的栋梁之才。

近年发展起来的互联网创业行业的小团队,起始通常只有一两个产品,追求“小而美”,功能也不多。形式上,与 ThoughtWorks 的业务团队很类似。在这样的创业团队中,开发人员可以更直接地接触最终用户,很可能需要承担更多工作职责和压力。因此,也是快速成长的好去处。

踏实前行

我很清楚,毕业生带着自己不够娴熟的技能加入一个对各方面要求很严格的软件企业,当然诚惶诚恐。一方面自己知识技能有限,另一方面工作的质和量的要求造成的压力也是真实的。在刚参加工作时,我们经常面临这样的困境:面对项目中用到的各种新的语法、没听说过的设计思想,各种第三方框架和工具库,接到一个任务不知道从哪里下手。眼看着一天天逼近的期限,只好硬着头皮对付了事。

最初的日子里,最要紧的莫过于不要浮躁,要按部就班。如果一出校门、见了一些有经验的同事,就感觉自己离“大牛”太远,将“一道不可逾越的门槛”放在自己心里过不去,那真是太急躁了些。事实上,在生活中,谁都要面对这样的境地。不光是刚入职的新人,刚开出租车的司机,刚接线咨询的客服,谁没有第一次?而作为工程师的我们,在这一方面的经验很可能更丰富:因为我们时常要学习新的技术,新的思路,接触新的项目。因此,请耐心接受,并努力克服起初的不适。而对于这一阶段,聪明的同学们会有另一番体验:他们通过企业里左右经验丰富的老同事的帮助,外加各类深入浅出的图书,以及现成的代码与文档,很快便掌握了项目所涉及的技术基础。

忘却了儿时天方夜谭的科学家梦想之后,我们大概都已经很清楚:除了少数天赋异禀的人,更多的只是普通人。要成为别人眼中的“大牛”,只能日积跬步,及至千里。

“行路难,行路难,多歧路,今安在。 长风破浪会有时,直挂云帆济沧海。”


参考资源

野生程序员的故事

去了大公司就一定能学到很牛的技术么?

程序员的职业素养

My Tryst with Lean and Cross Functional Teams

扩展阅读

写给毕业生的求职锦囊

公司要你做不喜欢的事,你该怎么做?

胡适:大学毕业后的几条路