You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12 KiB

30 | 焦虑:程序员怎样才能越干越给力?

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

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

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

焦虑着,也就习惯了

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

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

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

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

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

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

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

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

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

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

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

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

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

软件行业的特殊之处

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

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

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

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

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

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

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

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

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

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

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

程序员的路怎么走?

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

不同类型的职业

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

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

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

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

程序员要怎么办?

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

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

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

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

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

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

总结

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

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

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

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

思考题

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

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