[译] 程序员的困境 #23

Open
cssmagic opened this Issue Aug 19, 2013 · 18 comments

Comments

Projects
None yet
Owner

cssmagic commented Aug 19, 2013 edited

[译] 程序员的困境

Programmer's Dilemma

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 --

对于个人:

  • First of all, Do your own personal projects. You need to "sharpen your saw" continuously. If the job itself cannot help you do so, pick up the problems you want to concur and conquer it in your personal time. By doing so, most likely you will learn new things. If you publish your personal projects, say in github, you may get chances to know people who may pull you away from your existing position.

  • 首先, 打造你自己的私人项目。你需要不断地打磨自己的技艺。如果工作本身并不能帮助你做到这一点,就捡起那些你感兴趣的问题,然后用你的私人时间去攻克它。通过这个方法,你应该会学到新东西。如果把你的私人项目发布出去,比如在 GitHub 上,你说不定会认识一些人,帮助你大踏步地向前迈进。

  • Do not stay in a same team for more than two years. Force yourself to move around, even if in the same organization, same company, you will face new challenges and new technologies. Try to do job interviews every 18 months. You don't need to change your job, but you can see what does the market require and how you fit into it.

  • 不要在一个团队中停留超过两年。强迫你自己四处转转,哪怕在是同一家公司内,你会面对新的挑战和新的技术。试着每隔 18 个月就出去面试工作。你并不需要真的换工作,但是这能让你看到真实的市场需求,以及怎样与时俱进。

For team/company --

对于团队和公司:

  • Give pressures and challenges to the employees. Rotate the jobs, let the "experts" have chance to broaden their skills. Start new projects, feed the warriors with battles.

  • 给予员工压力和挑战。实行轮岗制度,让“专家”们有机会拓展他们的技能。启动新项目,用战役来磨炼你的勇士。

  • Hold hackathon periodically. This will help to build a culture that embrace innovation and creation. People will be motivated by their peers -- "gee, that bustard can write such a beautiful framework for 24 hours, I gotta work hard".

  • 周期性地举办黑客马拉松活动。这有助于营造一种崇尚创新和创作的企业文化,人们会受到同伴的激励——“擦,这个混蛋居然可以在 24 小时内写出这么漂亮的框架,我也得加把劲儿了!”


相关链接


© Creative Commons BY-NC-ND 4.0   |   我要订阅   |   我要打赏

edokeh commented Aug 19, 2013

是这样的,华为中兴等公司这种情况尤甚,而且他们往往会自己造私有框架,导致工作久了的员工想跳也跳不了。。。

Owner

cssmagic commented Aug 19, 2013

@edokeh 没错,你说的应该就是典型的例子。

我自己也有类似的经历。曾服务于一家外企 agency,为某跨国集团做电商网站的维护外包。M$ 为该集团定制了一套框架,该集团的所有网站均基于这套框架构建。但这套框架是专用系统,小 bug 无数,文档严重缺失,基于它做网站维护苦不堪言。但做久了,摸熟了它的脾气之后,居然真的有一种成为“专家”的幻觉……

前端似乎就要好一些,用的都是开放的技术。而且前端领域发展这么快,新技术、新工具层出不穷,想停都停不下来啊。

cstdr commented Aug 19, 2013

感谢翻译,看完翻译很不错~

感觉如果个人没有创新意识,并且公司对技术也不重视的话,的确是这种情况,只能在一个公司养老啦~

"I don't know if the situation is similar in other countries, but in China, or more specifically, in Beijing, this is reality."
这篇文章作者是中国人?

Owner

cssmagic commented Aug 19, 2013

@darlingtangli 估计是老外在中国招人。

翻译的非常好。

楼主的文章被博客园收录了: Click Here

Owner

cssmagic commented Aug 20, 2013

转发转载记录:

  • [微博] 伯乐在线官方微博: //weibo.com/1670481425/A5zYmt21W
  • 伯乐在线: //blog.jobbole.com/46220/
  • 开源中国社区: //www.oschina.net/news/43389/the-plight-of-programmer
  • 博客园: //news.cnblogs.com/n/185727/
  • [微博] 博客园: //e.weibo.com/1645020513/A5AxrArdH

记录这个并不是为了显摆,主要是想收集反馈,顺便观察一下传播效果。

Owner

cssmagic commented Aug 20, 2013

@FrankFan 谢谢提醒。

Owner

cssmagic commented Aug 20, 2013

感谢博客园网友 (我是打酱油的) 指正翻译一处,原文已修正。

@cssmagic @darlingtangli ,看原链接,应该是中国人。

很好的文章,刚进入公司实习,就有一点感受到了,公司确实有很多内部的工具,很好用,降低了工作的难度,但想深入接触学一些东西就比较困难了……

Owner

cssmagic commented Aug 21, 2013

@darlingtangli @zxhfirefox

原作者 Tyr Chen (@tyrchen),还真是中国人,现就职于一家外企,估计会飞来飞去。其它联系方式:

Tyr Chen

说的挺好的。
一直在干重复的工作,会让自己困在里面。
我也比较赞同隔一段时间 就出去面试下,看看自己的欠缺,然后可以找方法弥补。

fkpwolf commented Dec 16, 2013

"你并不需要真的换工作,但是这能让你看到真实的市场需求,以及怎样与时俱进。"这里闻到一种急功近利的味道,当然这些都很重要,但不是目的而只是一种手段而已。而你如果只是养家糊口而已,我觉得差不多就行了。“你需要不断地打磨自己的技艺”,用来做啥?我也不知道,养家糊口而已。

icepy commented Dec 16, 2013

除了重复的工作,还是要找到一个点,多学点新的东西,IT技术,真的更新好快。

chenzx commented Nov 11, 2015

什么malloc内部发生了什么,纯属装逼扯淡,知道个大概即可。脑子里记太多技术细节不累吗?只要把当前正在解决的问题相关代码挖得足够深就可以了

ahnniu commented Nov 12, 2015

我觉得可能应该跟程序员的发展路线有关,如果长期在一家公司, 做个几年,总能混出一个leader. 然后就开始偏管理,对技术这块,慢慢的生疏了. 当换工作的时候, 应该就是文中说的情况.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment