中年程序员的生存现状已经是老生常谈的话题了,有多老呢?十年前,就有一位网名“johnfx”的程序员谈过这个话题,并且专门为此写了一篇文章。随着中年程序员生存现状的话题再次成为热点,这篇文章被顶到了 HackerNews 网站的首页,并且引发了数百条讨论。

十年前的中年程序员面临的“生存危机”与今天有何不同?十年前的经验是否仍有值得借鉴的地方?AI 前线对 johnfx 的文章进行了编译,并整理了如今程序员对这一问题的看法,希望对各位读者有所帮助。
问题的起源
在撰写最近的一篇文章“ 年龄歧视和编程工作 ”时,我发现了 1998 年纽约时报的一篇文章,该文章引用了美国国家科学基金会和人口普查局关于软件工程职业生涯长度的统计数据,让我非常震惊:
计算机科学专业的大学生在毕业后的 6 年里,约有 57%的人从事程序员相关职业;而毕业 15 年后,这个数字下降到 34%;在毕业 20 年后,也就是大多数人处于 40 岁出头的年纪时,这个数字下降到了 19%。
相比之下,土木工程同时期的数据分别为 61%、52%和 52%。
我发现:这篇文章的语气,以及仅使用可疑的计算机科学毕业生样本来支持其结论的做法,破坏了它的可信度。在很多时候,政府探索软件工程行业的进展非常缓慢,所以这项研究中,统计者完全忽略了大量的在职程序员,因为他们要么获得了另一门学科的学位,要么从未完成大学学业。
尽管如此,聪明的投资者似乎也同意:软件工程师的贬值速度,只比他或她辛勤工作所用的计算机慢一点点。1996 年,时任英特尔总裁兼联合创始人的 Craig Barrett 发表了这样一条评论:
不论软件还是硬件工程师,他 / 她的半衰期只有短短几年。
当然,这也仅仅是某个西装革履的家伙的说法,但更重要的是,他(当时)作为一名 57 岁的前工程师,竟然也公开强调对其他工程师的年龄歧视。这么一位有影响力的业内人士居然认为编程生涯与职业篮球运动员的职业生涯大致相同,真是可怕极了。
我的看法
科技领域的年龄歧视问题已经引起了相当多的指责,但我怀疑,这可能是这个领域快速变化的必然结果。
请先考虑如下几个问题:
员工的市场价值主要取决于他 / 她在与雇主相关的技术方面的经验。
软件工程至少每 10 年就会经历一次重大的技术变革。
虽然技术的转变并不会完全否定老一辈的技能,但它确实为应届毕业生创造了更公平的竞争环境。
现在,你需要站在招聘经理的角度思考:如果你的公司要使用像 Ruby on Rails 这样的新技术,除了 David Heinemeier Hansson(Ruby on Rails 原作者)拥有 5 年以上的工作经验,其他人都没有。当然,对于经验丰富的老手来说,拥有额外 10 年 C++ 经验的老兵与同样拥有 3 年 Rails 经验的新贵相比,区别还是很大的。在所有条件相同的情况下,你自然会聘用经验更丰富的人。
然而,并非所有的事情都是平等的。这 10 年的 C++ 经验让经验丰富的求职者越来越贵,因为他们需要在 C++ 相关的工作中才能发挥这些经验的价值。问题是,额外经验的边际效用必须超过雇佣老兵的边际成本,才能证明支付溢价是合理的。
译注:在微观经济学中,边际效用(英语:marginal utility),又译为边际效应,是指每新增(或减少)一个单位的商品或服务,它对商品或服务的收益增加(或减少)的效用,也即是「效用──商品或服务量」图的斜率。 经济学通常认为,随着商品或服务的量增加,边际效用将会逐步减少,称为边际效应递减定律。
这就是问题的根源。求职者的经验越无关紧要,效用 / 价值的等式就越不平衡,这就需要假定经理有额外的预算来获得这些奢侈的经验。
即使这位经验丰富的求职者的薪资水平与一位年轻求职者不相上下,招聘经理也必须考虑让某人大幅减薪的影响。他们会在入职第一天就士气不足吗?他们会在仅入职一个月就改变主意离开吗?这都是可能出现的棘手问题。
一个不幸的事实是:与其他更为武断和反复无常的歧视形式不同,年龄歧视往往是客观合理的商业规律作用的结果。我并不是要证明这是一种可以接受的做法,而是试图描述这种做法让经理在不损害公司道德和法律义务的情况下做出明智的商业决策所面临的困境。
那么,你准备好 Plan B 了吗?
假设你家底不够厚实,但好在不是什么野鸡大学毕业的,或者不到 40 岁就死于由红牛引发的心脏病,那么你应该考虑考虑缓冲策略。以下是一些可行的选择:
1. 为一个永远不会歧视你的人工作
不,不是你的妈妈,这个人恰恰是你自己!
如果你不是创业型人才,建议你考虑一下咨询公司。出于某种我不完全理解的原因,当企业租用人才而不是直接招聘人才时,看到你有一点点白发和对不同技术的一点点经验,他们可能会对你产生谜一样的信任感。
2. 向黑暗面“屈服”,进入管理层
其实我想说的是,编程的工作对一个人进入管理层几乎没有什么帮助,但管理层显然认为,包括技术人员在内的所有人都有一种“毕业”的强烈愿望。
我认为这是一个谬论,没有人会持续设计和构建软件 20 多年,除非他们没有野心或增长潜力。然而,像我这样尊重这种奉献精神的人是少数。也许最好停止与之斗争,但在冒险之前请考虑以下几点:
中层管理人员的工资不像高层工程师那么高;
想要跟上新技术变得越来越难,因为你不再是直接使用者;
会议、办公室政治和处理不切实际的要求将会占据你的生活;
虽然你可能会尽量避免使用,但是管理术语会慢慢进入你的日常词汇表;
即使不是你的错,也是你的错;
即使是你的功劳,荣誉也要归于团队;
作为一名技术神童,在技术领域要比在管理领域容易得多,你必须在一开始就看清自己;
你将被迫做出影响人们个人生活的决定(工资、奖金、解雇等),这有时让人难以忍受;
能够设定议程,有时还能说“不”,这是非常令人愉快的。比如:“不,我们不会干这种事的。”;
电脑是可以预测的,人是复杂的,你最终会幻想拥有一票机器人员工;
指导是非常有益的,但也非常具有挑战性。
送上一句名言给选择这条路的同胞:
世界上最困难的事情是知道如何做一件事,然后看着别人做错而不加评论。
——西奥多·哈罗德·怀特
译注:西奥多·哈罗德·怀特,中文名白修德,美国新闻记者、历史学家和小说家,曾作为《时代》周刊记者在抗战时期访华,以记述 1960 年、1964 年、1968 年和 1972 年美国总统选举而著称。
3. 既然你已经有了一棵摇钱树(指技术),那就榨干他 X 的!
我知道你喜欢编程,因为你喜欢技术,所以你投入了大量的时间和精力来掌握你所使用的技术,你的经验使你与众不同。梅花香自苦寒来,赚钱也是一样,此时的蛰伏可能只是你发展潜力的一种方式。
这个行业瞬息万变,但成熟的技术能力往往不会被淘汰。很有可能,即使在几十年后,你仍然能够通过你所熟悉和喜爱的技术赚到一些体面的钱。
网友观点
网友 C4stor:我不确定我是否应该相信这篇文章的说法。看看 JVM,20 年过去了,它还在摇摆;内存分配模式呢?问题仍然存在;至于网络堆栈?看起来变化也不大。
年纪大一些的人似乎有时间正确地学习 unix 网络工具、JVM 调试工具和内存检查工具。我认识一些年龄较大的开发人员,我非常尊敬他们,因为我觉得他们可以调试计算机上发生的任何事情,使用的工具我甚至压根不知道,但这些工具确实已经存在了几十年。
而我,则需要通过谷歌搜索才能知道如何使用 tcpdump 或 jstack。
我同意新技术总是在不断涌现,但我觉得要赶上那些实际上仍然非常相关和重要的老技术是相当困难的。因为现在不会有人再来教你老技术,这些技术也不再会成为某个会议主题,更不会再被炒作,尤其当你意识到 90% 的新技术都是旧概念的重新组合时。
然而无可否认的是:我不知道管理层是否意识到了这一点!
但是,根据我的观察,这种知识对生产力的影响确实是巨大的,尤其是当生产处于火热状态或发生棘手的问题时。
所以,尊敬前辈,请他们一起来参加会议和聚会,我们需要更多的智慧而非炒作!
网友 asdfman123:我遇到的每一位年长的开发人员都非常博学,而且坦白地说,他们在这方面都比我做得好得多。
用一项爱好来打比方,比如弹吉他。把一个只玩儿了 4 年吉他的人和一个已经玩儿了 20 年的人放在一起比较是有些荒唐的,我觉得软件开发并没有什么不同。
唯一的问题是,当你年纪大了,你确实需要学习新技术。我曾经与那些被技术领域淘汰的较年长的开发人员交谈过,他们过去从事的是大型机技术,一直到职业生涯的中期,都从来没有想过要学习任何新东西。
只要你摆脱了明显正在衰退的技术,它们就像正在下沉的船(我认为,你至少应该提前 10 年预警),老实说,我不认为跟上时代有那么难。不必追随每个流行趋势,但要确保你所用的技术仍然是主流的。
此外,初创公司对员工的年龄确实存在歧视,因为他们需要能工作到凌晨 2 点的员工。但事实上,仍然有很多稳定的、非创业的工作供你选择。从来没有离开过原始圈子的人可能会认为这是技术生涯完蛋的开始,但实际上有一些非常好的企业在等待着优秀的开发人员。
网友 Stratoscope:我今年 67 岁,已经编程 50 年了。
我注意到的一件事:在面向硬件的公司中,似乎有更多年长的开发人员和工程师。
我目前在 Wing Aviation 工作,这是 Alphabet 公司旗下的无人机快递公司。我们最初的位置在谷歌 X 大楼。
X 大楼附近到处都是硬件初创公司,当我刚开始在那里工作时,我立刻注意到一件事:这是很长一段时间以来,我第一次不是大楼里年龄最大的人。
现在我们已经搬到自己的小工作室里去了,我可能又变成最老的了,但问题并不大。我们的团队中有很多白发苍苍的人。

(文章来源:InfoQ)