不久前,现年 64 岁的 Bill Budge 老爷爷给谷歌 V8 引擎(V8 是 Chromium 项目的 JavaScript 解释器。如果你现在阅读本文的工具是基于 Chromium 内核的微信版本,那么,你可能就在使用 V8)提交了一些补丁。
64 岁老爷爷的补丁
在最近的一年里,Bill Budge 在这个项目里非常活跃:
我不追星,看到有演员拍出好的电影,最多说不错,不至于去调查这个演员的背景资料。但我还在学校的时候,就是读着理查德斯托曼和 Linus 的生平小故事开始了解开源和 Linux 内核。
所以对 V8 模块里面的 Bill Budge 老爷爷,我也没放过:
出生年月 | 参加工作时间 | 学校 | 职位 |
1954. 8 | 1980 | 加州大学伯克利分校 | Software engineer |
这四条如果是不同的人,或许是平常的事情。但是放到了一起,就让我肃然起敬:
我见过 70 后的程序员,但是我从来没见过 64 岁还在写代码的程序员。有着高贵的出生,在基础的软件领域持续耕耘,勤奋(看看他最近一年给 V8 引擎提交的那些补丁的数量),这么一个老爷爷,和一堆 70、80、90 后坐在一起,开发和改进了软件行业最困难的模块之一 V8 引擎,这是怎样的境界?
有兴趣的可以去领英和维基上搜索这个老爷爷的详细简历。这里仅仅截取了他的领英主页,来表达我对他的敬仰:
焦虑的 35 岁
工作了 39 年的老爷爷,在世界上最伟大的企业里,充满激情地写着代码,维护世界上最困难的模块。当然,他肯定会在退休前的几天继续写代码打补丁,我对此深信不疑。
然而,最近国内出现了很多 35 岁中年程序员焦虑、甚至被裁员的消息。譬如“老板告诉我,超过 35 岁的简历不用看了”,又如“程序员 35 岁之后不转管理只能混吃等死?” 。从表面看,似乎我们的环境(不讨论国企和事业单位)和别人的不一样,我们的环境是排斥 35 岁以上的程序员的。
但是,是否需要 35 岁以上的程序员,不仅和企业研发的产品的知识密度有关,也和程序员自身的知识密度有关。本文尝试着从企业的角度和程序员的角度,也就是供求的双方,来分析这个问题。
企业的需求和知识的密度
老爷爷所在的 Chromium 团队,工作了很多年的大有人在(部分名单):
姓名 | 参加工作时间 | 学校 | 职位 | |
图形 | Antoine Labour | 2001 | ENSEEIHT | Principal engineer |
Adrienne Walker | 2004 | University of North Carolina at Chapel Hill | Software engineer | |
网络 | Asanka Herath | 2005 | Massachusetts Institute of Technology | Software engineer |
Bence Béky | 2014 | Harvard University | Software engineer | |
多媒体 | Dale Curtis | 2005 | Texas A&M University | Staff Software Engineer |
Fredrik Hubinette | 1993 | Linköping University | Software engineer | |
V8 | Adam Klein | 2005 | University of Washington | Software engineer |
Bill Budge | 1980 | University of California, Berkeley | Software engineer | |
Blink | Rick Byers | 2003 | University of Washington | Senior Staff Software Engineer |
Darin Fisher | 2000 | University of California, Berkeley | Software Engineer |
除了 2014 年参加工作的 Bence Béky(他是 PHD),其他的工作时间都超过了 10 年。可以看到,老爷爷和他的谷歌 Chromium 团队,对 35 岁以上的程序员是有需求的,并没有所谓的年龄界限。
国内的有些企业,譬如华为也很欢迎 35 岁以上的工程师。企业要做到华为这样的知识密度,光靠人头和资本不够,还需要一代一代人的纵向积累。没有任何理由去相信华为会放弃那些掌握了核心技术的老员工,否则他不可能在知识密集的通信行业做到目前的位置。
关于网上流传的华为辞退部分 35 岁以上的员工,抛开华为的狼性文化,和生存的艰难等因素,这其实是华为对在职员工的再次双向选择(确实也很残忍,这样的再次双向选择在其他私企和外企也同样存在)。如果到了这个年纪,技术没有深厚的积累,也没有走上管理层,那说明员工积累的技术和经验不适合这个企业。
因此,老员工真正要思考的不是年龄的问题,而是知识的密度。
但是确实有些企业会在招聘广告里明确年龄限制。以前去招聘网站搜索程序员的职位,经常看到年龄要求 35 岁以下。写本文之前,又去搜索了一次,要求工程师年龄 35 岁以下的职位少很多了。但是还是有年龄限制的,有些放宽到了 45 岁,有些依然坚持要求 35 岁以下:
如果说华为,对 35 岁以上的员工再次应聘,只是为了检查员工的技术积累是否深厚。那么,像这样在招聘需求里明确写上要求 35 岁以下的,企业应该思考下自身是否有足够的知识积累。或者说,有这样要求的企业,可能是资本密集型的,而不是知识密集型的。在资本密集的企业里面,程序员的技术积累没那么重要,那么程序员的年龄可能就成了致命伤。
资本和知识的界限其实是模糊的。在一个开放的世界,钱可以买到任何东西,资本的密集和知识的密集很难区分。但是现实世界远远没有这么开放,这个不开放的世界,给资本和知识圈上了各自的边界。
我们来看一个资本密集的例子:小米公司。魅族比小米起步早,技术和产品在早期做的也很好,但是没有建立起足够的技术壁垒。小米在商业模式和资本方面胜过了魅族,能够用更优秀的人,所以后来小米获得了的成功。
但是资本不是万能的。如果资金非常雄厚,甚至不计成本,还是可以在较短的时间内打造出 BAT 或者小米、摩拜单车滴滴等的。但是再有钱,也很难在短时间内造出苹果、谷歌、Intel 和高通。一方面是美国对核心技术出口做了限制,用钱很难买到他们的人和技术。另一方面,在基础技术方面我们落后太多年了,短时间很难赶上。这是美国人在知识上的成功,他们知识上的密度不是我们多加人、多加钱、用几年时间可以赶上。而是要一代人一代人的接力。
而且,在资本帮助下做出产品占领市场后,企业和资本都是要逐利的。产品和团队最终还是会回归到知识密集的路线上来,这样才能保持产品的竞争优势,也能减少被资本更加雄厚的团队抢夺领地的机会。
企业之间互相抢占对方领地的例子很多,前面谈到的小米和魅族,以及 BAT 之间:腾讯控股易迅,推出自己的搜索;阿里钉钉;百度也有百度 Hi。财大气粗的资本们,总是想去攻下别人的领地。BAT 之间互相侵消结果不怎么明显,并不是技术本身的差别多大,而是资本最后还是要看收益。再看看去年打得火热的 ofo 和摩拜单车。ofo 先期产品设计输了一着,但这不是两者输赢的关键。在打价格战的时候,价格决定了消费者的选择。当然了,摩拜的产品维护成本低,这为他的资本赢得了更多的时间。
企业的产品决定了企业对人才深度和广度的要求,也影响了企业用人的时候到底有没有年龄的要求。
如果企业的知识密度很高,譬如前面谈到的谷歌和华为,对人的需求其实不会加上年龄限制的。有些企业的工程师团队过分年轻化,其背后的本质是,这些高科技软件互联网企业,是资本密集型的,企业的知识密度较低,其核心 IP 的科技含量不高。这时候焦虑的应该是企业,企业应该思考为什么我只要 35 岁以下的员工,是不是我们的技术壁垒不够?没有足够的技术壁垒,如果有人拿钱砸我,我该怎么办?
BAT 都是大公司,大公司之间是如此频繁地试图侵入对方的领地,被侵入的也在不遗余力地利用资本和垄断地位的暂时优势来提高自己的知识密度,加强自己的护城河。所以那些只要 35 岁以下员工的中小公司,也需要思考下,该如何挖深拓宽自己的知识护城河。否则很难面对同行的技术竞争,更难以应对大资本使劲砸钱。
每个程序员都有不一样的十年
在我小时候,如果说一个木匠做木工很多年了,我们会很自然地认为这个木匠做的东西很好。现在,我们要是说,这个程序员写代码好多年了,是不是差不多就等于变相的贬低人?这差不多就等于说,你看他工作了十多年还是程序员。自古以来,对于工匠,我们都认为老的就是好的。老的有经验,做出的活计好。那为什么现在,老的程序员反倒不怎么吃香呢?如前面的招聘广告,就要求 35 岁以下的程序员。
程序员和企业,是供给和需求的关系。前文从企业的角度分析了为什么有些企业只有 35 岁以下的需求,下面我们从供给,也就是程序员的角度来看这个问题。
前面谈到,企业知识的密度决定了企业要不要 35 岁以上的程序员。撇开那些知识密度不高的企业不谈,就是华为这种知识密度较高的企业,也会选择性的让一些 35 岁以上的工程师离职。这个时候,问题就不仅仅出现在企业本身了(不考虑做了管理或者创业的情况)。
一个原因是,35 岁的我们,所积累知识的深度和广度都不够,因而失去了性价比。35 岁的我们,把知识密集的脑力劳动,渐渐做成了机械的缺少创造性和深度思考的体力劳动。
脑力劳动做成了体力劳动,是技术的快速更新换代、以及社会,个人浮躁造成的。以 2007 年到 2018 年,一个大概的十年来看,这个行业经历了很多热点:
在这个十年里面,有的人可能把所有主流的操作系统都尝试了一遍(被动的或者主动的,譬如我就被动地把 Android、Windows、IOS 的 HelloWorld 都写了一遍);有人做全栈,将网站的后台和前端都学了;也有人把热门的语言和框架都学习了一遍;还有人可能硬件、软件、管理之间换来换去。一个技术切换很频繁、积累不是很深厚的程序员,在企业看来十年工作经验和两三年的差别不会很大的(不排除少数非常有天分,能够把所有主流的技术都学会的程序员。本文讨论的是更一般的情况)。所以在这个时候,企业当然优先选择经验少一些但是更具有性价比的程序员。
时代总是在变化的。有些热点,譬如 WebOS、裸眼 3D 都渐渐散去了,VR、AI 也经历过低潮高潮。有些却始终吸引着人们前进,譬如操作系统虽然从 Windows/Linux 变成了 Windows/Linux/IOS/Android,这些系统在这十年里面也都经历了好多次的版本更新,但是一些基本的东西并没有被彻底颠覆,颠覆的,往往是用户体验和软件架构。
少数醉心于技术本身的人,能够坚守一些相对长期的大的技术方向,看透新旧技术背后的算法和数学物理原理,做到新旧技术融会贯通。因而在每次新技术出现之后,他的知识的密度更高了。
结语
目前 AI 技术这么热门,我身边的很多人都开始把注意力转到 AI。这个时候,你是选择把原来技术的新旧版本融汇贯通,还是跟着历史的车轮投入 AI 阵营?
当我们工作 39 年后,是否还有机会像这个老爷爷一样,满怀激情,给某个著名的、影响深远的项目提交一个老爷爷补丁? 还是像我家里那位说的,以后看到年迈的看门老大爷,还带点秃头的,有点焦虑的,可能就是曾经的程序员?
后记:
其实我不喜欢这种过于直白的标题。譬如 Gone with the wind,翻译成飘就很有意境。翻译成乱世佳人,能揭露小说的主题,但是淡而无味。如果考虑市场的需要,应该叫乱世少妇和她的三老公。还有边城,如果叫船家少女的爱情故事,那就知道了故事大概,也很吸睛。这些伟大的作品都坚持了他们富有诗意的名字。但是我的这个短文不能像这些伟大的作品一样,随性的取个码农田园风的名字:老爷爷的补丁。这个短文不过是一个快速消费品,要屈从于市场吸睛的需要。