写代码五年了。

从刚毕业时的懵懂少年,到现在能独立负责项目的老油条,五年时间说长不长,说短不短。这五年里,我换过两份工作,写过很多代码,踩过很多坑,也收获了很多。

但直到最近,我才真正想明白自己的职业规划。以前总是走一步看一步,别人说什么好就去学什么,别人说什么有前途就去做什么。五年下来,技术学了不少,但方向一直不清晰,也走了不少弯路。

这篇文章就来聊聊我这五年的思考,以及我最终想明白的职业规划。如果你也在迷茫,希望能给你一些参考。

前三年:什么都想学

刚毕业那三年,我是什么都想学。

那时候觉得自己什么都不会,看到什么新技术都想去学。前端火学前端,后端火学后端,大数据火学大数据,人工智能火学人工智能。每天下班就看教程、写demo,周末也在学习。

那时候的学习状态,用一个词形容就是焦虑。总觉得自己会的太少,总怕被淘汰,总觉得别人都会的自己不会。每天都在学,但每天都觉得自己什么都不会。

现在回头看,那三年的学习不是没有用,基础打了不少,视野也开阔了。但问题是,学的东西太杂了,什么都懂一点,但什么都不精。面试的时候,每个方向都能聊几句,但深入问就答不上来了。

那时候找工作,也不知道自己想做什么。前端也投,后端也投,测试也投,运维也投。拿到哪个offer就去哪个,完全没有规划。

第一份工作是在一家小公司做后端开发,用的是PHP。那时候PHP已经开始走下坡路了,很多人说PHP要完了。我也很焦虑,一边写PHP,一边学Java、学Python、学Go,总想着要转行。

在那家公司待了两年,技术上有一些进步,但更多的是在重复劳动。小公司的项目不复杂,技术栈也比较老,学不到太多新东西。于是我开始考虑跳槽。

第二份工作去了一家中型公司,还是做后端开发,技术栈变成了Go。那时候Go很火,很多公司都在用。我花了几个月时间学Go,然后顺利入职。

在这家公司,我接触到了更大的项目、更规范的流程、更优秀的同事。技术上进步很快,也开始思考自己的职业方向。

第四年:开始思考方向

工作第四年,我开始认真思考自己的职业方向。

那时候我已经能独立负责一个项目了,技术上也有了一些积累。但我发现,自己还是不知道未来要做什么。是继续做技术,还是转管理?是做后端,还是转全栈?是去大厂,还是留在中型公司?

这些问题困扰了我很久。我开始有意识地去了解不同的职业路径,和不同方向的人聊天,看他们的工作状态和发展前景。

我了解到,程序员的职业路径大概有这么几条:

第一条是技术专家路线。一直深耕技术,成为某个领域的专家,比如数据库专家、分布式系统专家、前端架构师。这条路需要对技术有热情,能持续深入研究,耐得住寂寞。

第二条是管理路线。从技术转管理,做团队负责人、技术总监、CTO。这条路需要沟通能力、协调能力、领导力,不能只埋头写代码。

第三条是产品路线。从技术转产品,做产品经理。这条路需要对用户需求敏感,有商业思维,能把技术和业务结合起来。

第四条是创业路线。自己创业,或者加入创业公司做合伙人。这条路风险大,但回报也大,需要综合能力和资源。

第五条是自由职业路线。不上班,接外包、做咨询、做独立开发。这条路自由度高,但收入不稳定,需要自律和客户资源。

了解了这些路径之后,我开始分析自己适合哪条。我性格偏内向,喜欢钻研技术,不太喜欢和人打交道,所以管理路线和产品路线可能不太适合我。创业风险太大,我也没有那个资源和能力。自由职业收入不稳定,我也没有那个自律性。

所以我觉得,技术专家路线可能最适合我。但具体做哪个方向的技术专家,我还是不确定。

第五年:终于想明白了

工作第五年,发生了一件事,让我终于想明白了自己的职业规划。

那一年,公司组织架构调整,我所在的团队被合并了,新的领导带来了新的技术方向。我之前做的项目被砍掉了,需要转去做新的方向。

那时候我很焦虑,觉得自己之前的积累都白费了,又要从零开始学新东西。但后来我发现,虽然技术方向变了,但很多底层的能力是通用的。比如系统设计能力、问题排查能力、代码质量意识、项目管理能力,这些能力在任何技术方向上都能用。

这件事让我意识到,技术栈会变,项目会变,公司会变,但底层的能力不会变。职业规划不应该绑定在某个具体的技术栈上,而应该绑定在自己的核心能力上。

从那以后,我不再焦虑学什么新技术了,而是开始有意识地培养自己的核心能力。我把核心能力分成了几个方面:

第一个是技术深度。不管用什么技术栈,都要深入理解底层原理。比如做后端,就要深入理解操作系统、网络、数据库、分布式系统的原理。这些原理是通用的,不会因为技术栈变了就没用了。

第二个是系统设计能力。能设计高可用、高性能、可扩展的系统。能根据业务需求选择合适的技术方案,能权衡利弊,能考虑到各种边界情况。这个能力是高级程序员和初级程序员的核心区别。

第三个是问题排查能力。能快速定位和解决复杂问题。线上出了bug,能通过日志、监控、调试工具快速找到根因,而不是靠猜。这个能力是经验的积累,也是思维方式的体现。

第四个是沟通协作能力。虽然我走技术路线,但沟通协作能力也很重要。能和产品经理沟通需求,能和团队成员协作开发,能把复杂的技术问题讲清楚。这个能力决定了你能不能承担更大的责任。

第五个是业务理解能力。不能只埋头写代码,要理解业务。知道为什么做这个需求,知道这个需求解决了什么问题,知道技术怎么为业务服务。有业务理解能力的程序员,才能做出真正有价值的东西。

想清楚了这些,我的职业规划就清晰了:继续走技术路线,深耕后端和分布式系统,培养自己的核心能力,成为一个技术扎实、能解决复杂问题的工程师。不盲目追新技术,不焦虑,不浮躁,一步一个脚印地往前走。

关于大厂和小公司

职业规划里还有一个重要问题,就是去大厂还是小公司。

我在小公司和中型公司都待过,没有去过大厂。但我和很多在大厂工作的朋友聊过,对大厂和小公司的区别有一些了解。

大厂的优势是什么?第一是平台大,能接触到大规模的系统和复杂的业务,技术视野开阔。第二是规范,流程规范,代码规范,文档规范,能养成好的工作习惯。第三是资源多,有培训、有导师、有技术分享,学习资源丰富。第四是背书好,大厂的工作经历是简历上的亮点,以后跳槽或者创业都有帮助。第五是薪资高,大厂的薪资普遍比小公司高,福利也好。

大厂的劣势是什么?第一是螺丝钉,分工很细,每个人只负责一小块,可能做了很久都不知道整个系统是怎么回事。第二是晋升难,大厂人多,竞争激烈,晋升需要排队,可能很多年都升不上去。第三是内卷,大厂的内卷比较严重,加班多,压力大,有时候要做很多无意义的事。第四是政治,大公司人多,人际关系复杂,有时候技术好不如会做人。

小公司的优势是什么?第一是成长快,小公司人少,什么都要做,能接触到全栈的东西,成长速度快。第二是话语权大,小公司里你的想法更容易被采纳,能主导一些项目,有成就感。第三是灵活,小公司流程少,决策快,能快速试错。第四是潜力大,如果公司发展好了,早期员工能获得很大的回报,不管是股权还是经验。

小公司的劣势是什么?第一是不规范,流程不规范,代码不规范,文档缺失,很多时候靠人治。第二是资源少,没有培训,没有导师,很多东西要自己摸索。第三是风险大,小公司容易倒闭,可能干了几个月公司就没了。第四是薪资低,小公司的薪资普遍比大厂低,福利也差。

我的建议是,刚毕业的时候,如果能去大厂就去大厂,打好基础,开阔视野,积累背书。工作几年之后,如果想有更大的发展,可以考虑去有潜力的小公司,承担更大的责任,获得更大的成长。当然,这只是一般建议,具体还要看个人情况和机会。

我自己的规划是,先在现在的公司继续积累,把核心能力培养好,然后找机会去大厂历练一下,开阔视野,积累背书。之后再考虑是继续在大厂发展,还是去小公司做更有挑战的事。

关于35岁危机

说到程序员的职业规划,就不能不提35岁危机。

很多人说,程序员35岁就没人要了。这个说法虽然有点夸张,但也反映了一些现实。35岁之后,如果还是做初级的工作,确实会很危险。因为你的薪资比年轻人高,但精力和学习能力可能不如年轻人,性价比就低了。

但35岁危机不是不可避免的。关键是,35岁的时候,你要有年轻人没有的东西。

年轻人有的是精力、时间、学习能力、低薪资。35岁的人,应该有的是经验、视野、判断力、资源、解决复杂问题的能力。如果你35岁的时候,还在和年轻人做一样的事,写一样的代码,那确实会有危机。但如果你35岁的时候,能做年轻人做不了的事,能解决年轻人解决不了的问题,那你就很有价值,不会有危机。

所以,职业规划的核心,就是在35岁之前,建立起自己的核心竞争力,让自己变得不可替代。这个核心竞争力,不是某个具体的技术,而是我前面说的那些底层能力:技术深度、系统设计能力、问题排查能力、沟通协作能力、业务理解能力。

有了这些能力,不管技术怎么变,不管行业怎么变,你都能快速适应,都能找到自己的位置。35岁危机,本质上是能力危机,不是年龄危机。

我现在离35岁还有几年,这几年就是我建立核心竞争力的关键时期。我不焦虑,也不浮躁,踏踏实实地提升自己的能力。等我35岁的时候,我相信自己不会有危机。

关于学习和成长

最后聊聊学习和成长。

工作五年,我最大的感悟是,学习不是目的,成长才是。很多人每天都在学习,看教程、买书、上课,但学了之后不用,或者用了但没有反思,那学习就没有意义。

真正的成长,来自于实践和反思。在工作中遇到问题,解决问题,然后反思总结,把经验沉淀下来,这才是成长。看十篇教程,不如自己动手做一个项目。做十个项目,不如深入反思一个项目的得失。

我现在的学习方式是,以问题为导向。工作中遇到什么问题,就去学什么。比如做项目的时候遇到了分布式事务的问题,就去深入学习分布式事务的原理和方案,然后用到项目里,最后总结成文章。这样学的东西,记得牢,用得上,也能沉淀成自己的经验。

还有就是要输出。学了东西之后,要输出,比如写博客、做分享、教别人。输出的过程,就是整理和深化理解的过程。很多东西,你以为自己懂了,但一写出来或者一讲出来,就发现自己其实没懂。输出能帮你发现自己的知识盲区,也能帮你建立个人品牌。

我从工作第三年开始写博客,每周写一篇,坚持了两年。写博客让我收获很多,不仅加深了对技术的理解,还认识了很多同行,也获得了一些工作机会。如果你还没有写博客的习惯,我强烈建议你开始写。

还有就是要保持好奇心。技术发展很快,新东西层出不穷。不要排斥新东西,也不要盲目追新。保持好奇心,了解新东西的原理和适用场景,然后判断对自己有没有用。有用就学,没用就了解一下就行。

写在最后

写了五年代码,我终于想明白了职业规划。

我的规划很简单:走技术路线,培养核心能力,不焦虑,不浮躁,一步一个脚印地往前走。先在现在的公司积累,然后找机会去大厂历练,之后再根据情况决定下一步。

职业规划不是一成不变的,会随着经历和认知的变化而调整。但大方向要清晰,知道自己想要什么,知道自己适合什么,知道自己该往哪个方向努力。

如果你也在迷茫,不要着急。迷茫是正常的,说明你在思考。多尝试,多了解,多反思,慢慢就会找到自己的方向。

程序员这个职业,虽然辛苦,虽然有焦虑,但也有很多乐趣。解决问题的成就感,创造东西的满足感,和优秀的人一起工作的快乐,这些都是其他职业很难给到的。

既然选择了这条路,就好好走下去。不要被焦虑裹挟,不要被外界干扰,专注于自己的成长。时间会给你答案。

愿每一个程序员,都能找到自己的方向,都能在这条路上走得踏实、走得长远。