
最近我面试了十几个应聘内核开发的程序员。这些面试者都是来自一些从事芯片或者嵌入式开发的比较好的大公司。他们中的大多数人声称自己已经有至少10年以上的内核开发的工作经验。他们的履历看起来是那么光鲜——包含各种相关的工作项目、术语以及奖项。但是他们大多数人都不能回答一个很基本的问题: 我们为什么要调用标准malloc函数,在调用过程中内核做了哪些事情?
先不要吃惊。当我要求其中一个求职者写一个简单的基于glib的hash函数 LRU cache框架时,他首先表明他从未使用过glib库, 这正是我所期望的。 然后我向他说明了一些glib hash API的细节,一个小时后,他仅写出了几行很烂的代码出来。
我不知道这种情况在其他国家是否也很普遍,但在中国,更具体说是在北京,这个是真实存在的。 那些在著名大公司工作了几年的“资深”程序员在一些简单、基础的问题上无法正视自己。
为什么会这样?
我越想越觉得造成这种情况的原因不只是他们自己,也有他们所在公司的原因。 这些公司通常提供了稳定的代码库,可能几年都不会有重大的改变。围绕这些代码通常只需要程序员们进行一些封装,所以他们仅仅需要按着已经存在的思路去做,而不是自己再去创造。如果你很长一段时间都在维护这种代码并且不会接触外面的世界,有一天你就会发现你处在一个可怜的位置——在公司内部或团队中,你会被称为专家,很不幸的是即使这样你还是不能在人才市场中找到一个同等的好工作。
这个也可以叫做“专家陷阱”。就这样一复一日,我们的程序员都梦想着成为项目组或者公司的专家;无论如何,当那一天到来的时候,就是我们被自己所困的日子。我们在已经存在的代码中钻的越深,就会陷的越深。我们会渐渐失去从无到有完成整个工程的能力,因为已存在的代码是如此的稳定(如此庞大/如此好用)。更糟糕的是,如果我们的工作仅仅是维护已存在的代码并完成一些小的开发需求,这样一段时间之后,不论我们阅读、研究多少代码,会发现我们已经不会写代码了——即使这个问题简单到交给一个刚毕业的学生都能处理。这就是所谓的程序员的困境:我们以写程序为生,但这些养我们的大公司就这样摧毁了我们生存的能力。
如何远离这个困境?
对个人而言——
首先,要做一个属于你自己的项目。你需要不断打磨你的技能。如果你工作本身不能帮你这样做,那么就拿那些你想解决的问题在你的个人时间里去处理。这样你便会学到一些新的东西。如果你发布了你自己的工程,比如说在github上,你可能有机会结识很多人,他们可能会让你有很大的进步。
不要呆在同一个团队大于2年。 强迫你自己四处转转,即使是同一个位置,同样的公司,这样你才会面对新的挑战和新的技术。每18个月尝试去面试,你无须换工作,但你可以知道人才市场需要什么样的人而你是否适合。
对于团队/公司而言——
给员工一些压力和挑战。轮换工作,让“专家”有机会拓展他们的技能。启动新的项目,让员工们有仗可打。
定期开展编程竞赛。这会帮助公司构建一个崇尚改革与创新的文化氛围。人们会被他们的同伴激发斗志——“擦,那个混蛋能在24小时写出如此漂亮的框架,我该努力了”。
-----第一次尝试翻译,虽然网上已经有人翻译过,但我觉得对自己英语还是有益的。看这篇文章写的确实好,所以还是不禁再翻译一次。 好让自己有个正确的方向。
浙公网安备 33010602011771号