程序员什么时候感觉到编程能力突飞猛进?

我是一个41岁老程序员,从 2007年硕士毕业参加工作以来,已经在编程一线工作16年了。平时一直有逛技术社区的习惯。最近在社区看到一个讨论,题目是《你什么时候感觉到编程能力突飞猛进》。我觉得这个题目挺有意思,于是借这篇文章,也来聊聊自己的程序人生。

我觉得自己编程能力突飞猛进,应该是分了几个阶段吧。

第一阶段:研究生时期封闭式的项目开发阶段

我 2004 年电子科技大学计算机科学与技术本科毕业,同年留在母校,继续攻读计算机系统结构的硕士学位。研一时上了很多专业必修课,比如《Unix 系统设计》,《Unix 环境下的高级编程》,《Unix 网络编程》等等。但是这些书本上的知识,我也只是课堂上跟着老师过了一遍,缺乏动手实战。研一在校园里,也只是完成这些教材的课后作业而已。我当时具体有多菜?连 GDB 调试器都不熟,代码执行出错,我只会用 printf 大法来定位问题。

研二时我们教研室的同学们,在当时段翰聪段博的带领下,到北京声学所高性能网络实验室做项目。白天在实验室,晚上九点之后才返回海淀区知春路的学生宿舍休息,算是一年的封闭式开发吧。当时教研室承接的项目是国家发改委 CNGI 专项基金子课题------基于 IPv6 的 P2P 弹性重叠网络智能节点的研制。段博当时还在攻读他的博士学位,他现在已经是电子科技大学计算机科学与工程学院的教授和博士生导师了。

这一年的封闭式开发,我最先的任务是负责实现一款基于 P2SP 协议的负载发生器,作为测试工具,来验证项目研制的网络智能节点的各项性能指标和参数。刚开始动手编写项目代码时,我就立即感受到这种大型项目和校园里编写的那些课后作业代码的具体差异。我的程序代码量稍稍一上去,一运行就 Segmentation Fault,然后我就不知所措了。还好项目组里有段博这种大神,还有教研室其他优秀的同学帮助我。这一年我们可以说是心无旁骛,每天除了项目编码,技术讨论,然后就是找一些项目相关的论文来阅读,再有就是网上逛技术社区。慢慢的我也熟练掌握了 GDB 的用法,遇到问题也知道如何通过单步调试去定位问题,根据程序运行出错消息用搜索引擎去寻找解决方案,向身边伙伴求助的次数也明显减少了。

第二阶段:工作时大量研读其他高手同事的代码

2007 年研究生毕业后,我进入了 SAP 成都研究院工作。我本科和研究生生涯,使用的都是 C/C++, 工作中换成了 SAP 独树一帜的 ABAP. 面对技术栈的切换,编程经验尚浅的我可谓是苦不堪言,ABAP 在我手中用起来觉得各种别扭。有一次,ABAP 一个浅拷贝和深拷贝的问题困扰了我几天,我居然还写邮件,给 SAP 成都研究院我熟识的几位 ABAP 高手同事吐槽,说某某需求如果用 C/C++ 实现那是分分钟的事,可现在换成 ABAP,得绕来绕去。

现在回忆起来,我当时的行为挺可笑。那几位高手同事收到邮件后没有回复,只有一位当时外号薛老板的同事,不仅认真给我指出我邮件里关于 ABAP 实现深拷贝的错误,邮件末尾还点评到:"从 ABAP 转 C++/Java 很难,但是从 C++/Java 转 ABAP 开发很简单。"

虽然当时 SAP 开发社区尚不如现在完善,2007 年的时候,网络上 ABAP 开发资源也没有现在丰富。不过 ABAP 的开发编程环境在服务器端,这使得我能轻松阅读到服务器上其他 ABAP 高手的代码。

抱着熟读唐诗三百首,不会作诗也会吟的心态,我把我认识的很多 ABAP 高手的工作代码看了一个遍。不光看,还把他们的代码拷贝出来,自己修改,然后单步调试,边调试边学习。遇到不懂的知识点,直接按 F1 召唤出帮助文档学习。

通过大量的阅读,我发现程序员与程序员之间还是存在细微的编码风格差异。比如 William 是当时在 SAP 成都研究院工作过的一位天才程序员,他的很多非生产代码,都是用面向过程的编程方式编写,并且变量命名风格颇有谭浩强 C 语言程序设计那本书里配套源代码的风采。Willian 程序里数量众多的 include 和神秘的变量命名规则,庞大的代码量,但是最后程序仍然能够极其精巧地运行,成功实现极其繁复的需求,这一切让我佩服不已。

Annie 是另一个让我极其佩服的 ABAP 程序媛。她的代码生产速度让我惊叹,而且代码规范工整,犹如教科书一般。当时 SAP 成都研究院 On Demand 交付项目使用的 CPMS(Content Production Management System) ,前身是 CR(Content Repository) 系统,这个系统的主要开发人员就是 Annie. 她对 CR 系统的贡献,给我提供了大量可供学习和模仿的素材。当时在佩服之余,我心中也有一个疑问:Annie 是如何做到短时间内写出海量高质量代码的?要知道那可是在 2007 年,那时既没有 ABAP 代码生成向导,也没有 ChatGPT. 我当时性格腼腆,也没好意思去问她,这个遗憾就一直留到现在了。

就这样一头扎进 ABAP 代码海洋之后,慢慢的我工作中对 ABAP 的运用也得心应手起来,和自己刚进 SAP 成都研究院时相比,ABAP 编程能力可以说是突飞猛进,这可能就是量变到质变吧。

第三阶段:2014 年接触 JavaScript/HTML/CSS

2007~2014年,我做了七八年的 ABAP 开发,2014 年底,我觉得自己算是这个领域的专家了,此时工作岗位变动,需要接收 SAP UI5 应用开发,使用的技术栈从 ABAP 转成了 JavaScript 和 HTML/CSS. 此前我从未在工作中接触过基于 JavaScript 的 Web 前端开发。和之前刚毕业工作时从 C++ 转 ABAP 一样,我在刚接触 SAP UI5 开发时,又失去了对 ABAP 得心应手那种感觉。

我当时的做法是,从源代码实现的层面研究 SAP UI5 这个前端框架,研究它的工作原理,顺便把 JavaScript 也学习了。我也在技术社区上发布了《深入学习 SAP UI5 框架代码系列》,从 SAP UI5 Module 的懒加载机制,控件渲染机制,事件处理机制,元数据实现机制,实例数据的读写实现原理,数据绑定的实现原理等方面,通过分析 SAP UI5 框架的 JavaScript 源代码实现,介绍了我对这个前端开发框架的理解。

从框架一行行代码的研读,我也领略了从事应用开发和框架开发的不同侧重点和编程技巧,我这个系列总共写了 14 篇文章。漫长的框架源代码研读和文章写作完成之后,我感到自己 Web 应用的编程能力再次突飞猛进。

展望未来

以 ChatGPT 为代码的 AIGC 工具的流行,为程序员再次提供了编程能力突飞猛进的机会。善用 AIGC 工具,我们可以提高自己对陌生编程领域的学习速度,在学习遇到障碍时,善用这些工具,能够帮助我们克服学习过程中遇到的各种困难。

愿每一位程序员同行都能在编程中找到快乐。

相关推荐
光影少年5 天前
Promise状态和方法都有哪些,以及实现原理
javascript·promise·掘金·金石计划
光影少年5 天前
next.js和nuxt与普通csr区别
nuxt.js·掘金·金石计划·next.js
光影少年5 天前
js异步解决方案以及实现原理
前端·javascript·掘金·金石计划
光影少年8 天前
前端上传切片优化以及实现
前端·javascript·掘金·金石计划
ZTStory11 天前
JS 处理生僻字字符 sm4 加密后 Java 解密字符乱码问题
javascript·掘金·金石计划
光影少年12 天前
webpack打包优化都有哪些
前端·webpack·掘金·金石计划
冯志浩12 天前
Harmony Next - 手势的使用(二)
harmonyos·掘金·金石计划
冯志浩13 天前
Harmony Next - 手势的使用(一)
harmonyos·掘金·金石计划
光影少年15 天前
react虚拟列表实现及原理
前端·react.js·掘金·金石计划
光影少年15 天前
react性能优化有哪些
前端·react.js·掘金·金石计划