不同的公司环境会培养出不同的员工,程序员也不例外,由于大公司的开发框架十分成熟,稳定,而且充满盈利能力,所以开发者容易陷入拿来主义思维,而底层代码的编写能力正在逐渐退化。
前段时间,@developerworks在微博上向大家推荐了一篇引人深思的文章《程序员困境》,这篇文章的作者描述了在招聘内核程序员时所遇到的一个现象,一些来自大公司的“高级”程序员,却连最简单最基本的问题都无法回答,这不禁引发了作者的思考,下面是笔者的简译:
最近,我为招聘内核程序员而面试了数万个应聘者,有一些是来自有名的大公司,比如非常有名的芯片/嵌入式系统开发公司。许多人的简历制作的非常完美——涉及的各种项目、获得的各种奖项等,并有一些人声称,他们在内核研发上有10多年的工作经验,然而,令人惊奇地是,他们却无法回答一些基本的问题:当调用标准的malloc函数时,内核发生了什么?
别吃惊,当我让一个应聘者编写一个基于glib哈希函数的LRU缓存框架时,他首先声称自己从未使用过glib,于是我向他演示glib哈希API页面,并且详细地解释,然而一个小时后,他只写了几行凌乱的代码。我不知道在其它国家是否会有类似的情形,但在中国,或者更具体地说,在北京,这就是现实。那些“高级”程序员,在有名的外企工作几年后,连一些简单的、基本的问题都无法实现。
为什么?
我愈加思考就愈加认为,这不仅仅是与程序员自身有关,更与其所在的公司环境有关。这些公司通常会提供稳定的堆栈代码,并且多年来一直沿用着,几行没有任何变化。程序员整天围绕着这些代码工作,按照已有的思路去开发,无需自己动脑、去思考。如果长期在这样的环境下工作,并且也没有在外部进行提升和开阔,多年以后,你会发现自己处于很可怜的位置——在公司内部或团队里声称是“专家”,然而不幸地是,你却不能在市场找到一个与之平等的工作。
这就是所谓的“专家陷阱”。在当程序员的第一天,我们就梦想着成为团队/公司的专家,然而,当这一天到来,大家却陷入了困惑。越深入到当前的代码中,陷的就越深。渐渐地,我们丧失了那种从头开始创建完整项目的能力,因为现有的代码如此稳定。更糟糕的是,如果我们的主要工作仅仅是维护现有的代码,带有一些细微的功能添加和改善,一段时间后,无论你读过或学习过多么牛逼的代码,你将会发现自己不再会写代码——甚至是刚毕业那种简单的代码。这就是程序员困境:我们通过编码谋生,但环境却正在摧毁我们这种谋生的能力。
如何跳出困境
对程序员个人来说,首先,做自己的项目;其次不要待在同一团队超过两年时间。
给团队/公司的建议,给员工压力和挑战:轮流工作,让“专家”有机会拓宽自己的技能。定期举行黑客马拉松:这将有助于创建一个拥抱创新和创造的文化氛围。
对此,各位程序员,你们又是持何种观点呢?本文作者主要描述了程序员在大公司所面临的问题,你们身处的环境如何呢?不妨和我们一起分享下吧。
53 楼 yunnysunny 2013-08-21 17:36
上文最后的跳出困境的方法最为失败,怎么可能要随便跳槽呢?我觉得现在年轻人要脚踏实地,在企业多多学习如何做人做事。中国的信用体系不完整,国外更不能随便的跳槽了。
如何成为精良的程序员?如果一个真的具有思想的程序员,希望在编码架构方面发展,是需要一个过程的,要从自身的修养开始做起,而不是要求所在企业或者环境因素。有志者事竟成,提升自己的方法很多,可以在工作之余,做好自己的知识补充与技术实践,拓宽思路,多参与国内外论坛,活跃在相关领域,提升自己对专业技能的知识,不断学习才能进步;不要一味的埋怨社会,埋怨体制,如果你改变不了,那就学会在逆境中求生存,生存一段时间,就是精英。
而企业,营造的是一个专业的企业环境,企业文化,这包含太多了。
凡是要中道,不能乱批评,要有自己的思想,不要乱跟风。
支持!
框架确实是长时间锤炼出来的,这个我信。国外的人跳槽就不频繁了?西方国家的人都是以雇佣关系的态度来看待工作,他们跳槽比我们要频繁。成为一个精良的程序确实需要在业务时间多学习,但是对于那种没白没黑加班的公司是不适用。一个人的发展毕竟是和环境相关的,橘生海南则为橘,生于淮北则为枳,员工处于自己的发展考虑,有时候确实要做艰难的选择。
52 楼 IThead 2013-08-21 17:09
上文最后的跳出困境的方法最为失败,怎么可能要随便跳槽呢?我觉得现在年轻人要脚踏实地,在企业多多学习如何做人做事。中国的信用体系不完整,国外更不能随便的跳槽了。
如何成为精良的程序员?如果一个真的具有思想的程序员,希望在编码架构方面发展,是需要一个过程的,要从自身的修养开始做起,而不是要求所在企业或者环境因素。有志者事竟成,提升自己的方法很多,可以在工作之余,做好自己的知识补充与技术实践,拓宽思路,多参与国内外论坛,活跃在相关领域,提升自己对专业技能的知识,不断学习才能进步;不要一味的埋怨社会,埋怨体制,如果你改变不了,那就学会在逆境中求生存,生存一段时间,就是精英。
而企业,营造的是一个专业的企业环境,企业文化,这包含太多了。
凡是要中道,不能乱批评,要有自己的思想,不要乱跟风。
支持!
51 楼 hello_an 2013-08-21 16:43
50 楼 yunnysunny 2013-08-21 15:49
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?
没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?
能让这么多程序员用这么多年,说明人家也是一个有经验的人,并不是凭空做出来一套框架的。
49 楼 qqxiaodi 2013-08-21 13:49
48 楼 michael88wen 2013-08-21 13:37
1.考察的应该是人解决问题的能力和学习能力,其他比如做事做人的态度;
2.底层的东西只作为兴趣去了解,没必要每个人都去重复造轮子;
3.不断的跳槽只能让自己处在一个更加尴尬的局面;
47 楼 xpf7622 2013-08-21 12:41
如果做Web开发的,对底层深入也没有用。研究研究算法到可以。
中国大多部分公司为不做底层开发,只为了做应用赚钱,大多部分公司没有Adobe、Microsoft、Google,Oracle的实力,
他们不做底层,只用别人东西,当然底层编码能力差,这也是中国软件的悲哀。
46 楼 xpf7622 2013-08-21 12:39
如果做Web开发的,对底层深入也没有用。研究研究算法到可以。
中国大多部分公司为赚钱,大多部分公司没有Adobe、Microsoft、Google,Oracle的实力,
他们不做底层,只用别人东西,当然底层编码能力差,这也是中国软件的悲哀。
其实TIOBE c语言排名不是第一就是第二,说明好多人在用c,中国程序员对底层深入的少了,国外可能不一样。
45 楼 寂地流年 2013-08-21 12:30
44 楼 沙舟狼客 2013-08-21 11:44
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?
没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?
43 楼 沙舟狼客 2013-08-21 11:42
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?
没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?
42 楼 Tyrion 2013-08-21 11:39
强调底层编码能力,是因为很多人只知其然,而不知其所以然。
当然不知其所以然还是能够完成手头上的事(这就是框架成熟的好处),但技术水平也将局限于此。
41 楼 j00131120 2013-08-21 11:31
40 楼 yixiandave 2013-08-21 11:23
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?
39 楼 成年的兔子 2013-08-21 11:20
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
我倒觉得恰恰相反,对于一个成熟行业,架构的时候往往不要考虑具体的实现
38 楼 沙舟狼客 2013-08-21 11:19
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
一个脱离的具体实现的设计不靠谱
37 楼 成年的兔子 2013-08-21 11:05
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
呃,时间问题放在一边,我不觉得他能累出来
现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了
我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了
另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
36 楼 沙舟狼客 2013-08-21 10:55
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...
但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
35 楼 沙舟狼客 2013-08-21 10:47
80后,90后都是浮躁的一批,不知道那些大牛去世了之后,谁还能当中流砥柱
34 楼 成年的兔子 2013-08-21 10:46
软件领域分工使然
不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物
一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不
我倒是觉得,你让贝聿铭来累砖,八成是悲剧...