「时光不负,创作不停,本文正在参加2022年中总结征文大赛」
2022年对我来说是里程碑的一年,因为就在今年五月,我正式年满四十岁,成为了一名在某些贩卖焦虑的 IT 自媒体笔下的面临 年龄危机
的老程序员。
一转眼,2022 年又快过去一半了。借着参加掘金社区2022年中总结征文大赛
的机会,我把自己这过去的半年经历,简单做一个复盘。
我上半年的日常工作和技术写作生活
我于 2007 年 7 月,在电子科技大学计算机系统结构专业硕士毕业后,加入了 SAP 成都研究院,成了一名应用开发程序员。SAP 是一家总部位于德国的软件公司,主要从事企业管理软件领域的开发。十五年过去了,我也很光荣地拿到了 SAP 给工作超过十年以上的员工颁发的纪念奖杯,如下图所示:
我十五年的工作生涯,当然也不止一次思考过自己的职业规划和未来的职业发展方向。关于国内
程序员 35 岁以后的出路,网络上已经有很多讨论了,不外乎以下几条:
- 自己创业
- 继续做一名程序员,成为技术专家
- 转型成项目经理、产品经理、质量工程师、架构师等软件开发流程中的其他角色
- 转行,离开程序开发行业
对我来说,一件幸运的事情是,毕业之后尽管在同一家公司已经做了15年的软件开发,但如今的我对技术的热情,和我第一天正式入职相比,并没有减弱多少。所以我觉得,继续坚持在一线做开发,努力成为技术专家,是最贴合我实际情况的职场之路。
到 2020 年之前,我从事的一直都是偏后端的开发,使用的是 ABAP,Java 和 Node.js 这些偏后端的编程语言和技术栈。2020年 8 月,由于工作变动,开始接触 Angular 和 TypeScript,工作方向也转移到了前端开发领域,一直做到现在。我现在的日常工作,是开发一款代号为 Spartacus 的 SAP 电商云前台 Storefront 应用:
我还记得刚刚从后端转到前端时,由于十几年根深蒂固的后端开发思维,对前端开发的有些理念,尤其是对 Angular 框架里重度使用的响应式编程框架 RxJs 很不适应,也被后者陡峭的学习曲线(至少对于我来说很陡峭)折磨过。所幸我所在团队里有不少才华横溢的 Angular 开发工程师,并且乐于助人,在他们的帮助下,我逐渐找到了前端开发的一些感觉。而我之前一直用 ABAP 和 Java 开发后端,对于现在 Angular 里的装饰器、注解,依赖注入等概念也觉得非常亲切。
2022 年年初到现在,使用 Angular 完成日常工作之余,我陆陆续续看完了两本 Angular 开发的纸质书,把 Angular 官网的教程和文档都过了一遍,最近在研读一本名叫《深入浅出 RxJs》的中文书。
尽管很多 RxJs 高手可能觉得其官网的文档和 Demo 更权威更有帮助,我由于水平有限,还是更喜欢看这本国内专家用中文写的书,适合自己的才是最好的。
笔者一直保持着通过技术博客将自己所学的知识输出的习惯,这些年在国内外各大技术社区也发表了一些技术文章。
感谢掘金社区的支持,授予了我优秀创作者
的称号:
我知道自己输出的前端开发的文章,从内容深度上来说,肯定不能和掘金社区上的前端大神相比,然而我也确实没有和人比较的念头,输出这些文章的初衷是记录自己工作中遇到的疑难点,同时希望能够帮助一些遇到和我同样问题的初学者们。我已经年满四十,早已过了爱争强好胜和人暗自较劲的年龄了,只要自己每天和前一天相比,都有点滴进步,我也就满足了。
我今年也积极参加了掘金社区一些活动,下面是我获得的一些纪念品。
年满 40 岁之后对技术学习方式的一些思考
今年上半年我也在不断思考,觉得自己将来技术学习的方式需要持续做出一些转变方法,记录如下。
不再只拘泥于具体的源代码细节
在我从25岁硕士毕业参加工作到35岁这期间,我觉得是一个程序员潜心钻研技术的黄金十年:精力充沛,业余时间多,学习能力强。在我过去的十年里,我觉得我对待技术的态度上有点像强迫症患者,对于一个技术点,除了了解它的设计原理和架构之外,我还喜欢从源代码的层级去研究。我毕业后加入 SAP 从事的头几个产品开发,都是基于 ABAP 技术栈的,产品的每一行源代码对于开发者来说都可见。这极大地满足了我对这些产品实现源码的好奇心,让我一头扎进了代码的汪洋大海,也养成了我遇到问题就喜欢从源代码层级分析的习惯。
随着我工作内容的变化,从相对比较封闭的 ABAP 技术栈,切换到了更加开放,甚至拥抱开源的技术领域,比如云原生开发,CloudFoundry,Docker,Kubernetes,Node.js,Angular 等技术上来,我逐渐发现自己过去那种基于源代码级别的学习方式已经不再是一种有效或者说现实的方法了,原因有二:
-
程序员年满35岁,成家立业,结婚生子之后,客观上不太可能再有像以前单身时那样,有大块大块的空闲时间能静下心来研读源码。人到中年,上有老,下有小,程序员的业余时间太容易被生活中其他事情所占据了。
-
当今的开源产品或者说工具库,其实现复杂度和代码量,已经远远超过了某一个程序员能够掌握的范畴了。即便是某个开源项目的贡献者本身,他/她们熟悉的也只是自己共享的那一个模块的部分代码。
以 Kubernetes 的使用为例,遇到错误消息时,按照我过去的做法,我会尝试根据错误消息的文本,去搜索 Kubernetes Github 上的源代码,找到哪些源代码里有可能会抛出这个错误消息。现在我觉得更有效的方法,当然是 Google 或者 StackOverflow 上搜索线索,因为这么流行的技术平台,我们遇到的问题,大概率早就有其他同行遇到过了,网友们的分析和解决方案,对我们的问题排查来说有极大的借鉴意义。
同样,在学习一个新技术 & 框架时,放在过去,我会先把它的 quick start / demo / tutorial 找到,尽快在自己本地搭一个环境,弄一个可以运行的例子出来,然后再从源代码层面开始学习。现在的我会老老实实从这些新技术的官网的 Overview 页面开始读起,了解这个新技术诞生的缘由,解决了什么业务痛点,主要的组成模块,设计架构等等。我觉得一个40岁的程序员,和30岁的程序员,20岁的程序员,对同一项技术的关注点理应有所不同。20岁的程序员,关注的更多的是技术的具体实现细节和使用方式。40岁的程序员,更多应该关注的技术背后的一些深层次东西,比如这些技术,如何才能更好地融入到自己公司所负责的业务和产品中去,如何才能给客户带来更多的价值?
更现实一点的问题就是,我现在40岁,在这家公司工作了15年,我和公司现在刚入职的25岁年轻程序员相比,我作为一个老程序员,我的价值和核心竞争力到底体现在哪些地方?这个问题也是我工作过程中一直在思考的问题。
学会取舍,学会做减法
在我刚刚成为一名年轻的程序员时,我曾经误以为,一个程序员会使用的编程语言、编程工具越多,运用的技术越流行,掌握的技术栈越熟练,这个程序员就越优秀。在这种想法的驱动下,我尽可能多地去尝试新的编程技术和工具,不管这些东西在自己工作中是否能应用得上。每天泡各种技术论坛,一看到介绍新鲜技术和工具的帖子,马上在自己本机上尝试。坚持了一段时间之后我发觉,即便这样做,也没有成为自己心目中“优秀的程序员”的样子。反而因为很多新技术只是浅尝辄止,在工作中没有运用上,成了屠龙之技,所以一段时间过后就遗忘得差不多了。
因为笔者工作的 SAP 业务是开发企业管理软件,所以在工作一段时间深受这家德国企业的文化熏陶之后,我也慢慢领悟到,即便一项技术再先进和流行,如果它不能帮助公司的客户解决其业务上的痛点,无法给客户带来实际的价值,无法帮助自己在职场进阶之路上走得更顺畅,那么我在下决定业余时间去学习它之前,就应该慎之又慎,因为大龄程序员的业余时间实在太宝贵了。
因此我这一章节副标题的学会取舍和做减法,就是想提醒自己,在新的开发技术和开发理念不断涌现的大环境下,大龄程序员对于分配自己业余时间用于技术充电这一点上,一定要慎之又慎。好钢用在刀刃上,优先投资那些能给自己的职业发展和公司业务带来助力的技术上。
以上自言自语了这么长的篇幅,感谢大家耐心看完一个40岁中年男人的碎碎念。笔者希望自己能够不忘22年前高考填志愿选择计算机专业时的初心,希望自己能够在迈入四十岁大关之后,能真正做到四十不惑。笔者也祝愿各位程序员同行,在 2022年下半年里能够工作顺利,技术上更上一层楼,感谢阅读。