文章首发微信公众号:非典型程序猿
程序员随着年龄增长,技术却停滞不前,这是很多程序员都很头痛的事。面试官期望 35 岁的你具有架构思维、技术深度足够,但我们实际表现出来的情况则相反,反而是年龄增长了,技术还停留在几年前,和哪些初出茅庐的小伙子没有多少区别。没有进一步深入到底层细节,复杂困难的问题似乎也解决不了。先不管面试官怎么看,或者说当今社会对大龄程序员不友好之类的问题,我们自己是否对得起我们的自己?我们自己是否对当前的技术水平满意?年龄增长了,技术却还在原地踏步,十年如一日的解决同类问题,并不能让我们的技术更上一层楼。如何破局?这是我们的初心吗?
程序员在职业生涯中持续保持技术精进,尤其是在年龄增长后依然保持竞争力,需要结合学习策略、实践经验、职业规划和心态调整。如果我们和刚入行三到五年的小年轻解决的问题是一样的,那我们的价值随着年龄的增长就没有太多的变化,停格在初级水平。在人才市场上也不会有太强的竞争力,尤其在这个大龄程序员被“嫌弃”的大环境下。
一、思想认识上的转变
如果我们入行只是为了上班赚钱,为了应付差事,技术上就很难有长足的进步。优秀的程序员是有技术理想的,我们要成为怎样的程序员这种朴素的想法,最终会把我们引导成我们想成为的人。必须从思想上有所转变,技术需要进步,技术进步让我们感到快乐,我们对复杂问题的掌控感,让我们更愉悦。技术终究是取悦我们自己的,它不是“包袱”,不仅仅是养家糊口的工具。
- 程序员既要当一个学习新知识非常勤快的人,又要适度懒惰。一个需要反复手动处理的问题,就要考虑是否采用代码的方式自动化,比如写一些自动化脚本完成 100 次以上的专项自测。
- 程序语言终究只是工具。PHP 是否最好的语言,有待商榷。谁家的工具箱只有一把工具?所以优秀的程序员都是多程序语言使用者。比如,涉及到底层性能敏感的部分使用 C/C++ 去实现,甚至直接使用汇编语言,而为了快速构建软件则使用了 Java。手边可能还有脚本语言,实现一些简单的脚本手到擒来,让自己从一些机械搬砖工作上解脱出来。程序要实现多语言是个字符串粘贴、复制的苦差事,我在公司开发了一个 Python 转化脚本,专门用来处理把 EXCEL 表格内的多语言字符串转变为安卓、iOS、Flutter 和 QT 等平台可用的格式。具体使用哪种程序语言要看自己用什么程序语言最顺手,或者说项目团队、公司技术栈适合哪种程序语言,要根据实际情况挑选工具箱内的“程序语言”。
- 一颗雄心,远远比不上对新技术一直拥有的好奇心。我们要找回小时候纯真的自我,对所有事情都充满好奇,十万个为什么?对不知道的知识保持谦虚、保持敬畏心,又会花精力去探究背后的机理。
- 拥有开放的心态,对待新技术敞开自己的大门,对待不同的观点持保留意见。就像老年人不愿意接受新事物一样,微信他们真的不会使用吗?并不是的,更多的问题是他们自己就不愿意探索,自我觉得不会用、学不会。
二、建立系统学习机制
程序员最核心的技术能力是什么?抛去熟练使用 API 之后还剩下什么?五花八门的新技术推陈出新,但是它们都是构建在计算机系统上的,底层原理则是相同的。所以技术能力最终回到最朴素的底层原理上,扎实的计算机基础是解决复杂问题的基石。我们都在强调解决问题要彻底,也就是说处理一个 BUG 应该能从根源上说明修复的正确性。如果误打误撞可能修复了,它就是一颗地雷,不知道什么时候又会爆炸。
另外学了一些新框架,框架被更新的淘汰了,这些所谓的知识只是构建在其他程序员的 API 上的“空中楼阁”,严格意义上来说也不算什么知识。就好比怎么使用螺丝刀打螺丝,以前是手动螺丝刀,现在出现了电动螺丝刀。我们学会了各种拧螺丝的工具,如果不了解螺丝刀的工作原理,一旦螺丝刀被淘汰了,这些使用螺丝刀的方法自然也就过时了。
- 不要盲目追逐所有新技术,而是选择与自身职业方向相关的领域,深入理解底层原理(算法、操作系统、计算机网络、计算机组成原理和编译原理等)。
- 通过官方文档、技术论文、开源代码库学习,而非依赖二手教程。例如,Linux 的鼻祖 Linus Torvalds 曾经说过一句名言 RTFSC:Read The Fucking Source Code。一手资料一定来源于源码。另外,系统的阅读相关书籍,远比看一些网络上的零散资料来的实在,书籍的内容是系统化的,而网络上的知识是碎片化的。或者说,把网络上的碎片资料整合成系统学习的目录大纲分门别类,再去学习也是非常不错的手段。
- 定期挑战复杂项目,通过实践暴露知识盲区,反向驱动学习。一般程序员的想法是困难的项目我最好不承担,做自己的熟悉的技术范围。但往往做复杂的项目更能够挑战自我,从中可以学到更多。
- 定期回顾自己的代码,对其进行优化和重构,提高代码的可读性、可维护性和性能。
- 避免陷入业务需求旋涡,每天保留 2 小时用于战略性学习。
三、应对年龄挑战的最佳实践
年龄增大就不能再去和三五年经验的小年轻抢事情,我们需要利用自身优势,让我们的程序经验有价值。成为架构师,或领域技术专家,解决更复杂的、更难的问题。
- 转型成为架构师。主导复杂系统设计(如设计日均百亿请求的推荐系统),培养全局视角和技术决策能力。
- T 字型人才,某领域拥有足够的技术深度,成为专家。比如我们需要一名律师处理离婚诉讼,你一定不会聘请知识产权律师来处理,但这并不是说知识产权律师不需要了解其它业务,只是说他更擅长处理知识产权类纠纷。
- 技术管理平衡。很多技术不错的程序员都会成为主管,甚至经理或技术总监级别。但技术同样不能丢,纯做管理就会失去技术掌控力,技术决策能力变弱。比如保持 30% 时间写核心代码(如关键模块性能优化),同时提升团队技术规划能力(制定技术雷达等)。
- 体能管理,采用番茄工作法(45 分钟深度工作 + 15 分钟运动),使用站立式办公桌(可升降式),站姿和坐姿结合使用更佳。
四、构建技术影响力
技术影响力会倒逼我们学习更多的知识,系统的学习新知识。知识学的越多,学起来也会越快。因为很多计算机知识是相通的,太阳底下没有新鲜事!另外,我们通过自己的知识输出也能影响更多人,人怕出名猪怕壮!技术影响力让我们在市场上更有竞争力,同时,让我们更加扩大自己的知识版图。
- 技术输出倒逼输入,在有影响力的技术社区撰写技术博客(比如 CSDN、稀土掘金等程序员社区)、在 GitHub 分享代码库(让同行使用我们的代码)、参与技术会议演讲(先从公司内部开始培养自己的技术演讲分享能力)。想要做好这些,就需要充分准备,深入理解分享的主题并做实际分享,实际上就是在倒逼自己进一步提升,类似费曼学习法。
- 参与知名开源项目开发、贡献代码。比如 Linux 内核贡献相关 patch,或参与 Apache 项目贡献。能够在一些顶级开源项目贡献代码,本身就可以说明自身技术足够优秀。
- 成为特定领域的权威(如数据库存储引擎专家),通过开源贡献和技术布道建立个人品牌。
总结
技术精进不是线性过程,而是螺旋式上升。年龄增长带来的经验优势(如系统设计直觉、故障预判能力)与持续的技术迭代相结合,反而能形成独特的竞争壁垒。保持对新事物的好奇心(如尝试用 AI 辅助代码审查),同时深耕特定领域建立技术护城河,是应对行业变化的最佳策略。