最近,我为招聘内核程序员而面试了数万个应聘者,有一些是来自有名的大公司,比如非常有名的芯片/嵌入式系统开发公司。许多人的简历制作的非常完美——涉及的各种项目、获得的各种奖项等,并有一些人声称,他们在内核研发上有10多年的工作经验,然而,令人惊奇地是,他们却无法回答一些基本的问题:当调用标准的malloc函数时,内核发生了什么?
别吃惊,当我让一个应聘者编写一个基于glib哈希函数的LRU缓存框架时,他首先声称自己从未使用过glib,于是我向他演示glib哈希API页面,并且详细地解释,然而一个小时后,他只写了几行凌乱的代码。我不知道在其它国家是否会有类似的情形,但在中国,或者更具体地说,在北京,这就是现实。那些“高级”程序员,在有名的外企工作几年后,连一些简单的、基本的问题都无法实现。
为什么?
我愈加思考就愈加认为,这不仅仅是与程序员自身有关,更与其所在的公司环境有关。这些公司通常会提供稳定的堆栈代码,并且多年来一直沿用着,几行没有任何变化。程序员整天围绕着这些代码工作,按照已有的思路去开发,无需自己动脑、去思考。如果长期在这样的环境下工作,并且也没有在外部进行提升和开阔,多年以后,你会发现自己处于很可怜的位置——在公司内部或团队里声称是“专家”,然而不幸地是,你却不能在市场找到一个与之平等的工作。
这就是所谓的“专家陷阱”。在当程序员的第一天,我们就梦想着成为团队/公司的专家,然而,当这一天到来,大家却陷入了困惑。越深入到当前的代码中,陷的就越深。渐渐地,我们丧失了那种从头开始创建完整项目的能力,因为现有的代码如此稳定。更糟糕的是,如果我们的主要工作仅仅是维护现有的代码,带有一些细微的功能添加和改善,一段时间后,无论你读过或学习过多么牛逼的代码,你将会发现自己不再会写代码——甚至是刚毕业那种简单的代码。这就是程序员困境:我们通过编码谋生,但环境却正在摧毁我们这种谋生的能力。
如何跳出困境
对程序员个人来说,首先,做自己的项目;其次不要待在同一团队超过两年时间。
给团队/公司的建议,给员工压力和挑战:轮流工作,让“专家”有机会拓宽自己的技能。定期举行黑客马拉松:这将有助于创建一个拥抱创新和创造的文化氛围。
那么对于这种现象,微博上又有哪些互动呢?让我们一起来看下:
皮皮彭:
这是大公司的通病,不仅仅是针对做技术的,其他任何职位也是一样。公司大到了一定规模,很多事情就变得复杂了,不是那么纯粹了,很多人因此就会忘记了自己人生真正的目标和追求是什么,到底是要创造出好的产品,还是为了完成某个任务?个人内心保持追求,公司层面力求简化和纯粹,是最重要的。
_陈_辉_:
非常同意文中的观点,在技术日新月异的IT行业,“专家”这个词其实是个危险信号,意味着你的知识距离老化不远了。IT工程师应该经常更换工作领域,了解多个领域的前沿问题,同时应该花一些时间在开源项目上。
Bzbee:
这个叫体制化。和电影里说的道理一致。但也看你在公司的啥部门,如果在基础部门或参与开源,这可以避免。当然从公司看,这样人也需要。
BasketMan:
为什么大公司是这样,那是只有大公司有能力和时间会把底层不变的技术形成框架,让开发人员针对每天都在变的需求进行开发。那些在大公司写内核底层的,是不会出现在人力市场的,早已都是大公司的管理人员了。
对此,各位程序员,你们又是持何种观点呢?本文作者主要描述了程序员在大公司所面临的问题,你们身处的环境如何呢?不妨和我们一起分享下吧。