<audio id="audio" title="30 | 焦虑：程序员怎样才能越干越给力？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/fe/5d/fe70d09c53716df6accf903a3fb6aa5d.mp3"></audio>

你好，我是臧萌。这两天看了半佛老师的一篇文章，有感而发。文章叫做[《为何有的职业后期不给力》](https://mp.weixin.qq.com/s/QaUoAC0wzpQ42Qj48HTL3Q)。

你没看过的话可以去看看，当然，你要是懒得看半佛的原文的话，也不影响我这节课。简单来说，半佛老师从职业什么时候开始给力这个角度，把职业划分为了前期职业和后期职业。

前期职业刚开始很给力，后面越来越不给力，比如工作多年后，竞争不过新人，薪资待遇无法持续提升等。后期职业则正好相反。半佛老师的观点我还是比较赞同的，但是也让程序员这个职业看上去前途堪忧。所以我有感而发，想来和你一块谈谈程序员这个职业的前途。

## 焦虑着，也就习惯了

如果我在二十出头的时候看到这篇文章，肯定会焦虑得不行。那时候的我，非常像是半佛老师文中那种，可以被公司用完就扔掉的零件。所以我那时候就一个理念：提高自己的性价比。简单来说就是努力工作，好好学习。

“程序员是吃青春饭”的这个观点，其实当时已经有了。所以焦虑感肯定还是有的。而且当时看不清自己如何才能站住脚，稳扎稳打地向前发展。

最近几年，反倒是没有那么焦虑了。

一部分原因是焦虑惯了，这份焦虑感，让自己持续要学东西，跟上技术的发展。一段时间没学习没成长的话，就会感觉心里不安。

就像我经常提的那句话一样：软件行业在快速发展，一个技术如果适应行业的发展，那么势必一直保持升级换代；而保持不动的技术，基本都是不适应行业发展了，慢慢地都会被淘汰。因为程序员见过太多潮起潮落，一直这样焦虑着，渐渐就养成了持续学习新技术、持续扩建自己技术领地的职业习惯。

另一部分原因是，自己在误打误撞中，也算是走出了一条适合自己的成长之路。我觉得我在这条路上的有些感悟，对大部分愿意走技术路线的人还是有帮助的，在这里我想借半佛老师的文章为契机，在这篇文章里和你分享一下。

其实我在专栏里，原本有一节叫《对不起，程序员这个职业可能无法混到退休》。但是考虑到内容连贯性等原因，这一节中的很多观点和内容被拆散到别的章节去了。那这节课，我们再多聊聊程序员这个职业。

## 前期职业 V.S. 后期职业 ？

半佛老师在文中，用前期职业和后期职业来给职业分类。前期职业的典型可以说就是程序员，后期职业的典型就是教师和医生。

### 职业类型是后期发展更好的决定性因素吗？

这里其实是有一点幸存者偏差的。其实仔细看看教师和医生，有多大的比例是在职业后期，成为了名师或者名医呢？

教师和医生可以一直做下去，这点对比程序员确实是优势，但是如果没有混出点名气来，待遇也不会提升太多，这么一直混下去有啥意思呢？

所以说，无论是程序员，还是教师和医生，想提升自己的待遇，肯定要提升自己的能力。这个过程必然是艰辛的，绝不是说选对了行业，就可以闭着眼睛随便怎么混都可以混出名堂来了。我们都在说，选择比努力更重要，但无论选择是什么，努力都是让一个人脱颖而出，提升自己职业发展上限的必要因素。

### 软件行业的特殊之处

借半佛老师的一个观点，软件行业是新行业，在爆发式发展中，缺人不缺钱。其实真就能力和产出而言，很多人是不值这个钱的，但是缺人，没办法。尤其是对于职业初期的人来说，多出几千块，其实就感觉挺多了。

程序员很多时候也确实要加班，工作强度确实很大。所以对于能力略逊一筹的人，只要肯吃苦耐劳，很多公司也愿意给到行业标准水平的薪资。比如说我自己，我就觉得我刚毕业那会儿不值什么钱，因为什么都不会。

种种因素，造成了程序员的起薪比较高。但是这也可能给程序员一种错觉，感觉自己就是值这么多钱。所以想当然地觉得，随着自己工作经验的增加，收入应该相应增长。但其实人才只会越来越多，程序员的精力会慢慢下降。所谓的工作经验，如果得不到市场的认可，自然无法获得更高的薪资。

更残酷的一点是，正如半佛老师所说（我附议），程序员用到的技术一直在更新换代，老师和医生在立住脚之后，可以不用持续在自己的专业技能上投入太多，也能混得下去，但是程序员却不行。

### 程序员这个职业更深层次的不同

那如果程序员可以保持自己的技术，并且跟得上发展呢？比如说，一个程序员现在可以用主流技术，熟练的写着CRUD的业务代码，n年后依然跟得上主流技术，依然可以熟练地写CRUD的业务代码。不得不说，即使在这样的情况下，程序员可能依旧很难跟得上行业主流的薪资水平。

为什么呢？很多人会说能力没涨，但是年龄涨了，精力慢慢不行了，自然不值那么多钱。当然这是一个原因，但是我觉得这不是主要原因。更主要的原因在于，软件行业需要程序员有创新的精神、有斗志、不安于现状。

比尔·盖茨是微软公司的创始人，可以说他用Windows+Office软件改变了世界一点不为过。这里我借用比尔·盖茨的一句话：微软离倒闭永远只有18个月。

你仔细思考一下这句话。很多人会觉得这句话是危言耸听，但是你纵观微软的发展历程，看看它经历过的那些低谷，这句话绝对是真实的写照。当然，微软最终没有倒闭，而且还发展得很好。有一点我想你肯定认同，那就是微软里绝对不是一群喜欢岁月静好，安于现状的人。

所以，公司也绝对不想攒一堆发展后劲不足、安于现状的员工。这是在给公司的发展埋雷。从这个角度，你是不是对为啥年龄大的程序员容易被淘汰这件事，有了新的认识呢？

当然，我并没有做过调研，去分析这些人被公司“优化”是什么原因。但是任何一个明智的软件公司管理者，都会淘汰后劲不足的人。简单来说，我相信很多公司都有或明或暗的规定，一线软件研发岗位，如果在某个年纪前无法升职到某个岗位，那么就必须淘汰。这是为了让公司保持活力的措施。

## 程序员的路怎么走？

在专栏中，我也尝试谈过我对职业分类的理解。当然这里只是谈论职业本身，并没有论高下的意思。也欢迎你在留言里说说你的想法。

### 不同类型的职业

首先是有些后缀为“员”的职业，比如售货员、收银员、操作员等等。这些工作的特点是技能要求少，而且技能本身不怎么需要更新。这些职业的工作成果，可以有非常明确的评判标准，工作内容也可以详细地用规定来约束。员工不需要去想怎么把工作做好，因为都已经规定好了。当然，这不是什么严格的分类，比如宇航员需要的专业知识、技能和素质，绝对比大部分职业要求都高。

然后是后缀为“师”的职业，比如教师、医师、律师、厨师以及我们软件工程师等等。这些职业的一大不同就是，产出成果的过程很复杂，影响工作的因素很多，无法规定标准的工作流程，产出的成果没有统一的衡量标准，所以这类人才是无法批量培养的。从业者需要积累大量实践经验，才能形成一套自己的工作方式。

就拿教师来说，如何培养学生，没有固定的套路；怎样才叫好学生，也没有统一的标准。这种类型的工作，就需要从业者发挥主观能动性，根据自己工作的经验，思考如何才能将工作做得更好。

最后是后缀为“家”的职业，比如科学家、教育家等。这些职业更偏向研究方向。做开创性的工作，工作成果的不确定性更大，对从业者的专业技能要求是无上限的。如果对别的职业来说，创新是加分项，在各种“家”这里，创新是起点。

### 程序员要怎么办？

回到我们的主题，程序员的路应该怎么走呢？我有两个建议：第一，技术要不停地学。第二，脑子要不停地思考。

技术这点我不再赘述了，技术一直在发展，不学的话，老的技术就被淘汰了。脑子思考什么呢？回到我反复强调的一点，那就是思考业务。思考自己所在的行业是在解决什么问题，问题是如何得到解决的。这是一个软件架构师必须锻炼的能力。无论我们有没有软件架构师的头衔，这都是我们不断进步所需要的养分。

回过头来再echo一下半佛老师的一个观点，吃下的资源越多，要替代你的成本就越大。对于程序员来说，什么是资源呢？就是日常工作、做的项目，解决的问题等等。工作中亟待解决的问题是最宝贵的资源。能够理解这些问题，解决这些问题，那么收获的经验就是自己成长的后劲儿。

有人吃了很多资源，确实是成长到了更高的水平，但有人却成长不够快。那么公司肯定更愿意把资源供给这些成长的更快的员工，期待他们可以助力公司发展的更好。

软件行业确实残酷，可能没有哪个行业里公司的危机感如此强烈。如果微软距离倒闭永远只有18个月，那么别的公司呢？如果公司本身都需要保持奋进才能生存，又如何养着一群期待岁月静好的程序员呢？

程序员不是一个能混的行业，混只能坑了自己。无论待遇如何，无论职位如何，问问自己：我今天学了点啥新东西吗？我今天悟到了点啥新道理了吗？

## 总结

根据我的实际体验，在软件行业中，一线程序员的高级人才还远没到饱和的程度。至少就现在的情况看，对标阿里P8左右的高级软件开发工程师，在市场上还是一人难求。在面对人才这个事情上，绝大部分公司都不差钱。所以我们需要担心的不是自己以后有没有地方呆，而是更应该注意如何才能让自己成长为人才。

其实只要有合适的候选人，很多时候公司更愿意雇用高级人才，一方面是出于人力成本的考虑，对公司来说，能力强的人投入产出比更高。另一方面，这些人才已经用自己的实力证明了自己的能力和成长的动力，公司可以更放心地向他们投放资源。

软件行业，真的不能混到退休。很多职业，即使是对于医生和老师这些职业，保持水准也是标配。一直保持水准做下去，并且提高自己则是高配，可以成为名师或者名医。但是对于程序员来说，提高自己才只是标配，超速地提高自己才是高配。长期来看，程序员的职业生涯，没有保持水准这个选项。

时间不等人，技术在更新。你要学会锻炼自己的工作能力，做好技术与业务问题之间的桥梁，用好公司给你的资源，成就自己的成长。

<img src="https://static001.geekbang.org/resource/image/0b/4d/0be907ff6b1ec0efcf1089c2ebd2704d.png" alt="">

## 思考题

在程序员的从业之路上，你有焦虑过吗？你是如何应对焦虑的呢？你是如何定义软件工程师这个职业的呢？你对职业分类的理解是什么？

欢迎在评论区和我交流。也欢迎把这篇文章分享给你的朋友或者同事，一起交流一下。
