聊一聊程序员职业(2021版)

《聊一聊程序职业(2019版)》里,我粗略介绍了一下我对程序员职业的认知。有经历过两年的沉淀,再加上市场环境的变化,我现在对这个行业的认知更加丰富而深刻了,分享下我的见解。

迷茫的开始

对于刚毕业工作1-3年的程序员,由于经验不丰富,干什么都觉得特别新鲜,很有干劲,这段时间也能得到快速的成长。可是3年之后,他就会发现,似乎公司里做的东西都得心应手了,每天更多的是在重复劳动,进入了舒适区。再加上精力上也比不上公司的新人了,年纪大了也要面临35岁危机,于是他便开始陷入迷茫。

其实这是正常现象,如果你没有很长远的目标,或者习惯随波逐流,很容易不知所措。

职业生涯早期,我们有明确的目标,工作内容主要是完成手上的任务,工作模式比较单一,等到工作资历渐长,无论是我们自己,还是这个行业,都不会允许我们裹足不前,这就需要我们开始觉醒。

叔本华说,人生就是一团欲望,欲望不能满足便痛苦,满足了便无聊,人生就在痛苦和无聊之间摇摆。

所以人生其实是螺旋式上升的,我们能感受到自己的迷茫是好事,至少此时你已经发现了问题。这时候就要采用积极的行动去解决问题。毕竟程序员的本质就是去解决问题。

内卷与焦虑

谈完了个人,接下来我们来看看外面的世界。今年关于“内卷”的讨论特别火,由于僧多粥少,程序员行业的竞争也变成存量竞争,大家的竞争愈发激烈,行业门槛也越来越高。

当行业红利消散,便到了理性思考的时候,无论是行业还是个人,都应该去多考虑一些更长远的事情。

社交网络在大肆渲染着焦虑,我们太容易被程序员高薪表象所吸引,进大厂拿高薪似乎也成了每个程序员的唯一归宿,大家为了这个目标开始了疯狂的行动,每个人活得很累也成了必然结果,这个社会也越来越卷。

这个时代,焦虑已无法避免,作为程序员,是时候该要思考如何破局了。

破局之道

身处内卷的浪潮之中,我在最近一两年也在不断思考,如何成为一个更加厉害的程序员,提高自己的竞争力,让自身更有价值。我从个人经历角度,总结了以下五点,欢迎讨论交流:

1. 打好基础

我不是科班出身的程序员,在职业道路上踩了很多坑,走了很多弯路,这些都是我血泪的教训。曾经的我只是满足于完成工作任务,但是现在的我明白了越高级的程序员,绝不只是完成任务那么简单,更需要很广博的知识和很深厚的功底,方能支撑去做好系统架构。

而对计算机基础知识的掌握深厚程度,很大程度上决定了一个程序员所能到达的上限。这些内容,即使是科班出身的同学,毕业几年后也会忘,更何况是非科班出身的同学呢,他们更没有理由去浪费时间,需要花别人好几倍的功夫去补足它们。

这些基础知识包括数据结构和算法、操作系统、计算机网络、编译原理、计算机体系结构等等。每一门完全掌握都要花很多功夫,需要投入大量精力。程序员是个需要终身学习的职业,必须学会享受其中。

2. 构建体系

程序员所掌握的知识远不止前面提到的计算机基础,是一个浩瀚的海洋。包括Java/go/python,设计模式,并发编程,开发框架,数据库、缓存、消息队列,分布式微服务,服务治理,限流熔断降级……

面对浩如烟海的知识,要达到高效学习,最重要的是要构建自己的知识体系。

学习上也有飞轮效应,指为了使静止的飞轮转动起来,一开始你必须使很大的力气,一圈一圈反复地推,每转一圈都很费力,但是每一圈的努力都不会白费,飞轮会转动得越来越快。

最开始构建好知识体系是难的,等到大厦的结构建成,心中有了整体的认知,后面学到的知识都是在上面添砖加瓦,反而会变得简单。

等到知识掌握到一定程度,就会发现,其实编程里面很多知识都是相通的,构建知识体系帮我们形成了结构化思考的能力,工作越来越游刃有余。

另外再说一点,很多程序员工作几年后会发现,公司里做的东西非常普通,根本不涉及我前面提到的那么多的技术。确实,这也是行业通病,面试造火箭,工作拧螺丝。但我想,每个人都是在为自己的简历打工,即便工作之中用不到这些技术,自己也要主动去学,并且主动思考能否运用到业务中。这也是高级程序员和普通程序员不同的地方。

3. 知行合一

前面两点一直在讲学知识,但是学而不思则罔,真正让我们学会知识的,是要亲自去实践,去用知识。

所谓“听过很多道理,但过不好这一生”,听到的别人的经验永远不是自己的,只有通过实践总结才能真正成为自己的。

这需要我们平时在学习的过程中,不能浅尝辄止,多去思考知识的实际使用场景,并去加以应用,哪怕工作中用不上,自己也可以写一些demo,做一些开源项目等等,把自己的想法付诸实践。

此外,以教为学也是一个很好的检验自己是否掌握知识的方式,可以多尝试总结和输出,这同时也是构建知识体系的好的方式。

最后,也可以寻找一些学习社群或者技术组织,跟更多的程序员相互切磋,共同成长,避免一个人学着学着迷失了方向。

4. 志存高远

我知道除了极少数的对编程抱有极大热情的程序员之外,绝大部分程序员只是希望凭着提升自己的技术进大厂,去更好的平台那更高的薪酬,学习编程更多是成了他们升职加薪的工具。

我当然不否认他们的做法,但是我也发现很多人其实对编程并不那么感兴趣,但又有进大厂的梦想,于是每天学得苦不堪言,但是靠着自身的坚持一路走到现在。

在这里我想说,只靠坚持一定走不长远,我们或许可以赋予编程更崇高的意义去引领我们行动,而不是简单的为了求职面试。比如,学习编程是为了让我们成为更好的自己,让我们去养成科学的学习方法,以及不断给自己磨炼去培养各方面的能力,让我们认识到世界的疆界和自我的局限,甚至让我们看到突破自己极限所带来的的巨大能量。

既然入了这一行,不管热爱与否,通过不断学习,让自己保持着竞争力,让自己的能力匹配上自己的资历也是匠人精神的体现。

左耳朵耗子叔曾说一句话:要应付并通过面试并不难,但是,千万不要应付你的人生,你学技术不是用来面试的,它至少来说是你谋生的技能,要尊重自己的谋生技能,说不定,哪天你还要用这些技能造福社会、改变世界的。

5. 但问好事

最后,但问好事,莫问前程。

我能感受到这个时代的内卷和焦虑永远不可抑制,只会逐渐加深。现在“躺平”的呼声也很高,越来越多的人意识到工作生活平衡的重要性,抵制无节制的内卷。

对于我自己,坦然接受那些不能改变的,勇敢去做那些我能改变的,并学习去分清两者的区别。

人生没有白走的路,每一步都算数。心中有目标,行动有规划,日拱一卒,功不唐捐。

特别喜欢《传习录》里的一段话:

立志用功,如种树然。方其根芽,犹未有干;及其有干,尚未有枝;枝而后叶,叶而后花实。初种根时,只管栽培灌溉,勿作枝想,勿作叶想,勿作花想,勿作实想。悬想何益?但不忘栽培之功,怕没有枝叶花实?

最后,祝福大家的职业之路都能一帆风顺!