Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
Recently I interviewed tens of candidates for a kernel programmer's position. These candidates are from big, good companies, which are famous for chips or embedded OS/systems. Many of them claimed they have at least 10 years on-job experience on kernel. Their resumes look fairly shiny -- all kinds of related projects, buzz words and awards...
But most of them cannot answer a really basic question: When we call the standard malloc function, what happens in kernel?
但他们几乎无人能够回答一个非常基础的问题： 当我们调用标准的 malloc 函数时，内核中会发生什么？。
Don't be astonished. When I ask one of the candidate to write a simple LRU cache framework based on glib hash functions, he firstly claimed he had never used glib -- that's what I expected -- I showed the glib hash api page and explained the APIs to him in detail, then after almost an hour he wrote only a few lines of messy code.
先别吃惊。当我要求其中一位候选人基于 glib 的哈希函数写一个简单的 LRU 缓存框架时，他先是表示从来没用过 glib——如我所料——于是我帮他打开了 glib 哈希 API 的页面，并向他详细讲解了这些 API；然后大约一个小时以后，他只写出了几行凌乱的代码。
I don't know if the situation is similar in other countries, but in China, or more specifically, in Beijing, this is reality. "Senior" programmers who worked for big, famous foreign companies for years cannot justify themselves in simple, fundamental problems.
Why did this happen?
The more I think about it, the more I believe it is caused not only by themselves but also by the companies they worked for. These companies usually provide stable stack of code, which has no significant changes for years. The technologies around the code wraps up people's skills, so that they just need to follow the existing path, rather than to be creative. If you happened to work for such kind of code for a long period and did not reach to the outer world a lot, one day you will find yourself to be in a pathetic position -- they called you " EXPERT " inside the team or company, yet you cannot find an equally good job in the market unfortunately.
当我在这个问题上思索得越多，我就更加相信，这不仅有他们自身的原因，同时也归咎于他们所供职的这些公司。这些公司通常提供了一个稳定的代码堆，往往几年都不会有大更新。这些代码的专有技术把人们的技能框进一个定式，以致于他们只需要遵循现有的路径，而不需要发挥创意。如果你碰巧为这类代码工作，而且与世隔绝了很长一段时间，那么有一天你会发现你自己已经陷入一个可悲的位置——他们在团队或公司内称呼你为 “ 专家 ”，但不幸的是，你无法在市场上找到一份同等待遇的工作。
This is so called " Expert Trap ". From day to day, we programmers dreamed of being an expert inside the team/company; however, when that day really comes we trapped ourselves. The more we dig into existing code, the deeper we trapped into it. We gradually lose our ability to write complete projects from scratch, because the existing code is so stable (so big/so profitable). What's the worse, if our major work is just to maintain the existing code with little feature development, after a while, no matter how much code we've read and studies, we will find we cannot write code -- even if the problem is as simple as a graduate school assignment. This is the programmer's dilemma: we make our living by coding, but the big companies who fed us tend to destroy our ability to make a living.
这就叫作 “ 专家陷阱 ”。日复一日，程序员们都渴望在团队或公司内成为一名专家；但是，当那一天真正到来时，我们却早已作茧自缚。我们在既有代码中钻得越深，我们自己就陷得越深。既有代码是如此稳定（如此宠大、如此好用），让我们渐渐地失去了从无到有独立编写完整项目的能力。更糟糕的是，如果我们的主要工作就是维护这些既有代码、很少开发新功能，那么过不了多久，无论研读了多少代码，我们都会发现自己不会写代码了——哪怕是一个像毕业大作业那样简单的任务。这就是程序员的困境： 我们以编码为生，但那些养活我们的大公司却在无形中磨灭了我们的生存技能。
How to get away from this dilemma?
For personal --
For team/company --