译者:toWriting.com翻译自:Programmer’s dilemma

最近面试了数十个应聘内核开发职位的求职者。这些求职者都来自于芯片或嵌入式操作系统领域出名的非常好的大公司。他们大都声称他们在内核开发领域有至少十年经验。他们的简历看起来闪闪发光,充满着相关项目经验,各种时髦的技术词和奖项…

但是他们大部分无法回答一个基础的问题:当你调用标准的malloc函数时,内核里面发生了什么

不要吃惊。当我让一位求职者写一个基于glib哈希函数的简单LRU缓存框架时,他首先说他从没用过glib,这是我预料之中的。我把glib手册给他并给他详细讲解了接口,接着一个多小时以后他只写出了几行糟糕的代码。

我不知道这种情况在其他国家是否一样,但是在中国,特别是北京,这就是事实。工作在知名外企数年的"高级"程序员无法解决简单基础的问题。

为什么会这样

我越想越相信导致这种现象的不仅是他们自己的原因更要归咎于他们就职的公司。这些公司会给他们大量的数年不会有重要修改的稳定的代码。有技术含量的东西都被封装进了这些代码,所以他们只能因循守旧,不再创新。假如你恰巧在这样的代码上工作了很长的时间而没有接触外面的世界,总有一天你会发现自己会处在一个悲哀的境地:在团队或公司内他们叫你"专家",但不幸的是在市场上你难以找到一份不错的工作。

这就叫做专家陷阱。日复一日,我们程序员的梦想就是成为团队/公司的专家;然而这一天到来时我们围困了自己。我们在现有代码上钻的越深,我们陷得越深。我们渐渐丧失了从头写一个完整项目的能力,因为现存的代码如此稳固。更糟的是,假如我们的主要工作仅是维护现存的代码,在此之上进行微小的开发,不久之后,不管曾经阅读和学习过多少代码,我们会发现我们无法再写代码–即使应届生都可以胜任的简单问题。这就是程序员的困境:我们以代码为生,但供养我们的大公司却慢慢摧毁我们谋生的能力。

如何摆脱这种困境

针对个人

首先,做你自己的项目。你需要不断"磨快你的刀"。假如你的工作无法对此提供帮助,那你就挑选自己感兴趣的问题并且用自己的时间攻克它。这样做,你肯定会学到新东西。假如你发布自己的项目,比如在Github上,你可能会有机会认识把你拉出当前位置的人。

不要在一个团队里呆的时间超过两年。强制自己去其它岗位,即使是在同一公司统一组织你也可能会面临新的挑战和技术。试着每18个月进行一些面试。你不一定要换你的工作,但是你要看一下市场上需要什么而自己如何适应需求。

针对团队/公司

给你的员工压力与挑战。轮换岗位,让"专家"有机会去拓展技能。开启新的项目,给战士们提供战场。

定期举办"编程马拉松"。这将建立一种改革与创新的文化。人们会被杰出者激励 – “太酷了,这个家伙竟然可以在24小时内写出如何优美的框架,我要努力了”。