特定的技术知识对于招聘开发者重要吗?

  • Niclas Nilsson
  • 郭晓刚

2007 年 8 月 8 日

话题:敏捷架构文化 & 方法

在这个招聘广告中充斥了热门技术名词的时代(有时候对一项技术的经验要求还比这项技术存在的时间长),Dan Creswell发现了一份有趣而特别的 Amazon 招聘高级研究工程师的广告。Dan 问道:

注意到什么有趣的地方了吗?没错这是在招聘相当重要的分布式系统工程师,再仔细看看。你看到里面有提到一丁点技术吗?J2EE?JavaScript?Ruby?没有,对吧?这多奇怪呀?你见过哪个职位要求是像这样的吗?懂不懂 JBoss 或者 Websphere、Java 或者 Erlang 或者 Ruby 真的那么重要吗?

尽管不是每个人都能够直接在 Werner Vogels(Amazon 的 CTO)手下工作,Dan 反思了软件行业目前的情形:

就我最常看到的职位要求,其中的关键就是要雇用一个不管用什么工具坐下就能疯狂编程的工程师。为了达到这个目的,这些公司在职位要求里塞满不切实际的技术要求,然后在面试的时候问些语法和 API 调用的细节。但如果公司的下一个项目要使用其他技术又怎么办?刚刚雇佣的这些工程师一下就没用了,他们没有新项目需要的技能,等他们学习又浪费时间。或者我们应该炒掉他们重新雇佣一批新的?

我们为何会落入如此境地?

很多年以前,大学里的计算机科学课程关注的是深入计算机科学底层的原理,但这个传统似乎正逐渐衰亡。许多人认为这对我们这一行是个威胁。Joel Spolsky 曾经写过一篇文章叫作《Java 学校的咎由自取》,里面讲述了他在宾州大学学习 Scheme 课程的经历:

……我看到很多甚至大多数学生都过不了关。资料太难了。我给教授写了一篇信,诉苦说这太不公平了。大概学校里什么人接受了我(或者哪位诉苦的同学)的意见,因为这门课现在用 Java 来教了。

我宁愿他们当初不要听我的。

现在 Joel 搞招聘的时候,他看到了硬币的另一面,他意识到许多开发者根本就不知道什么是函数式编程(Functional Programming)、递归、或者 Lambda 演算,这些对解决真实世界的问题仍然非常有用的概念。

不理解函数式编程,你就不可能发明 MapReduce,这个让 Google 得以支撑海量规模的算法。

他们甚至很难理解指针。

我坦率地承认现今 90% 的代码都不需要用到指针来编写 [……] 但对于一些最激动人心的编程工作来说,指针仍然是重要的。如果不能彻底理解指针,你连 Linux、或者任何操作系统的一行代码都没法看懂。

Joel 作结说:

我无法理解为什么计算机科学院系课程委员会的教授们要把他们的课程的难度降低到这种程度,不但没法培育出合格的程序员,连能拿到博士学位跟他们竞争教授职位的合格 CS 研究生都培育不出来。

业界在抱怨学校没给学生传授业界需要的东西(即目前最热门的技术)。学校就更改课程来取悦业界,但在这个过程中一些比较困难的部分被丢掉了。当企业招募这些学生,这些没有像以前的学生那样学过各种不同思维方式的学生的时候,如 Dan 所写,下面的情形就司空见惯了:

当然多半的情况是,这些公司确保他们不使用新技术。他们强迫新项目采用以前用过的相同技术。这是设计上的灾难,因为技术不再服从设计和软件需求的需要。按照这种坐下就能编程的信条行事的公司里只有死路一条,毫无职业前途可言。

最后,当公司变成一家 Java 公司或者.NET 公司,需要招募更多开发者的时候,要想招募到具有相应知识的人是很容易的

查看英文原文:Does specific technology knowledge matter when recruiting?
敏捷架构文化 & 方法