我国的程序员普遍职业生涯很短,最大的原因就一个:程序员的经验很难得到积累。

很多职业都是越老越吃香,工资越来越高。这就是因为这些职业很依赖经验,时间越长,经验积累越多。老专家、老师傅,都是形容这样的人群。

通常越是在传统行业,这种性质越明显。

我们来做一下对比,就知道程序员的差距在哪里。

机械,大概是从第一次工业革命兴起的,已经有几百年了。但是到如今,依然没有非常大的突破。所以干这行,时间长了,积累的知识、经验很少会过时。一些大型机械,使用场景不多,故障率不是特别高,比如一年才碰到几次大故障。一个年轻人,必然没有一个老人碰到的次数多。那么遇到故障,必然是老人更容易找到问题和解决问题。在设计时,也会考虑更全面。

做软件,我们测试一下吧,压力测试,复现问题什么的。机械等传统行业可没有这样的机会给你测试(成本太高),于是,就拼经验。建筑行业更是如此,比如你能对一座好不容易修好的大桥进行“压力测试”?

类似中医、西医,更是如此,经验很重要。有时又叫“临床”经验。可不敢测试,出人命的。

当我们不能测试时,就只好请老专家出马,不然谁也不敢动呀!如果能测试,老专家可以滚一边去了,咱实践来检验真理。而不是经验。

管理学那就更严重了。管理,在我国都有几千年历史了,早都研究很透了。拼的不是理论知识,而是实践经验。所以大家都知道,年纪大了,往往都转管理了。国家的管理,45岁才刚起步,能干到80多岁。

我们再看看程序员软件开发,是最近几十年才兴起的新兴职业,非常年轻,而且变化非常快。经验很难积累。

好不容易精通了DOS下的编程,积累了好几年的DOS经验,结果DOS没落了,windows大行其道。基于windows的桌面开发好不容易熟练了,结果Web开发,以一种完全不同的形式登场。再后来,又开始有了iOS、安卓。除了编程语言,其他的都变了。最近,人工智能、大数据、云计算又出来了,动不动就是深度学习、分布式……

在如此变化激烈的软件开发世界,程序员的经验很难积累。以Web为例,以前做前端用的是table布局,突然一夜之间,宣布这种方式不好,改用div+CSS。于是,之前的基本是白学了。JavaScript原生写的风生水起,不知道什么时候,出来一个叫jquery的东西,效率大大提高。老程序员积累多年的js库,还不如人家直接使用jquery库来的快,积累多年的库被果断放到垃圾箱。等jquery积累一堆经验,一堆库之后。又开始流行一个叫vue的东西,好了,之前的东西又贬值了……

所以,说直白点就是:老程序员积累的经验,往往都是过时的经验,过几年,又要和一个新人从零起步,同一起跑线积累另一项技能的经验。

有人说,程序员,编程思想是相通的,一通百通。限于篇幅,我不想在这里反驳。相信真正干一线编程的,亲自写代码的,都不会相信这类“鸡汤”。

有人说,程序员加班多,工作累。我干的的就是机械、施工一类,见到的职业也多,哪个行业不是加班多、工作累?体制内、资本家除外。程序员加班累,老人加不动,这只是表象。其他行业,老人也加班,也加不过年轻人。但是,人家经验丰富,可以少加班。举个大家都见过的例子,同样是底层干活,门诊或手术,有经验的医生往往加班少于年轻医生(周末专家少)。那是因为人家价值大,只需要在关键时刻出马即可。

但是对于程序员,老程序员价值没有明显高于年轻程序员,所以不像其他行业那样有底气说加班是年轻人的事。

最后,这里只说的是我国。其他国家未必如此。我们不喜欢造轮子,喜欢拿来主义。别人做操作系统、编程语言、工业软件、游戏引擎。我们全部扎堆互联网。甚至一说到程序员,就等于说是互联网,张口就问你是前端还是后端。基本上我们的程序员不是前端就是后端(也就是Web开发),每天都是增删改查。

为什么我们做不出工业软件,类似CAD、CAM?这东西,就是典型的靠经验积累的,不会很快过时。因为我们太浮躁了,缺乏十年磨一剑的毅力,都希望今天说一个需求,下个月就给我上线。还有,盗版意识……

需要十年磨一剑的时候,程序员就不再是35岁就失业了……