早上路过附近的大学,门口挤满了拖着行李箱的新生和送别的家长。九月的阳光还带着夏天的余温,照在那些年轻又略带紧张的脸上,让人忍不住多看两眼。我站在路边看了一会儿,突然意识到,距离自己第一次踏进大学校门,已经过去整整十年了。

十年前的这个时候,我也拖着一个巨大的行李箱,里面塞着妈妈硬塞进去的厚被子和各种零食。父亲陪我坐了十二个小时的绿皮火车,下车的时候他的肩膀被背包带勒出一道深深的红印。我们在报到处排队,我紧张得连话都说不利索,而他只是反复叮嘱我"好好吃饭,别舍不得花钱"。

那时候我对计算机的全部认知,就是网吧里打游戏的电脑。填报志愿的时候选了软件工程,纯粹是因为听说"程序员工资高"。第一次上C语言课,老师在黑板上写了一行printf("Hello World"),我盯着那串字符看了半天,完全不明白为什么这就能让屏幕上显示出字来。

第一行代码与深夜的崩溃

大一的第一次编程作业是写一个计算器,要求支持加减乘除。现在看来这是入门级的题目,但当时我对着屏幕坐了整整一个晚上。指针和数组的概念像一团乱麻,越理越乱。凌晨三点的时候,程序终于编译通过了,我激动得差点把室友吵醒。那种从完全不懂到跑通的感觉,直到现在还记得清清楚楚。

后来我才知道,那种感觉叫"心流"。写代码这件事很奇怪,它能让你在挫败和狂喜之间反复横跳。一个bug可能卡你三天,让你怀疑自己是不是根本不是这块料。但当你终于找到问题所在,看着程序按照预期运行的时候,那种满足感又是其他事情很难替代的。

大学四年,我写过很多现在看来很幼稚的代码。有一个课程设计是做一个图书管理系统,我花了两周时间写了三千行代码,后来工作了才知道,用框架的话三百行就能搞定。但那段时间打下的基础,比如对数据结构的理解、对调试的耐心、对文档的敬畏,是后来任何框架都替代不了的。

实习:第一次见识真实的代码世界

大三暑假我去了一家小公司实习。去之前我以为自己已经学得差不多了,到了才发现学校里学的东西和实际工作之间隔着一条巨大的鸿沟。公司用的技术栈我闻所未闻,代码仓库里那些命名规范、设计模式、测试用例,每一样都需要重新学。

第一天leader给我分配了一个修改bug的任务,我看了半天代码,连入口在哪里都找不到。那种挫败感比大学时任何一次作业不会做都要强烈。我开始怀疑自己是不是根本不适合做这行,甚至偷偷在招聘网站上看了几个非技术岗位的要求。

但leader没有催我,只是说"慢慢来,先把代码读明白"。我花了整整一周时间,把那个模块的代码从头到尾读了三遍,画了好几张流程图,终于搞懂了整个流程。当我提交首个PR的时候,手都是抖的。code review的时候leader指出了好几个问题,但最后说了一句"思路是对的,细节再打磨一下"。那句话让我高兴了一整天。

那段实习让我明白一个道理:学校教的是"怎么写代码",而工作需要的是"怎么在一个已有系统里写代码"。后者需要理解别人的代码、需要遵守规范、需要考虑可维护性,这些都是课本上不会教的。

正式工作:从写代码到解决问题

毕业之后我正式成为了一名程序员。刚开始的半年,我每天都在赶需求、改bug、写代码,觉得程序员的工作就是把产品经理的需求翻译成代码。但慢慢地我发现,写代码只是这个工作的一小部分。

有一次产品经理提了一个需求,说要在页面上加一个按钮,点击后导出数据。我当时想这还不简单,半天就搞定了。上线之后才发现,用户的数据量有几十万行,一点导出浏览器就卡死了。我这才意识到,真正的问题不是"加一个按钮",而是"如何在大数据量下提供流畅的导出体验"。

从那以后我开始学会在写代码之前先问为什么。这个需求解决的是什么问题?用户的真实使用场景是什么?有没有更简单的方案?技术选型是否合理?这些问题想清楚了,代码反而写得更快更好。

工作第三年我开始带小团队,身份从"写代码的人"变成了"带着别人写代码的人"。这又是一个全新的挑战。我发现自己写好代码和让团队写好代码完全是两回事。需要做技术方案评审、需要code review、需要帮组员成长、需要和其他团队协调。很多时候我一天下来一行代码都没写,但感觉比写了一天代码还累。

十年之后,我还在路上

如今回头看,从一个连printf都看不懂的新生,到现在能够独立负责一个系统的技术负责人,这条路走了十年。这十年里技术栈换了好几轮,从jQuery到Vue再到React,从SSH到Spring Boot再到云原生,很多当年学的东西现在已经用不上了。但有一些东西是不变的:对新技术的好奇心、解决问题的耐心、对代码质量的坚持。

前阵子回了一趟母校,计算机学院的楼翻新了,实验室里的电脑也都换成了新的。我在走廊里碰到一个正在背单词的学弟,他问我"学长,做程序员是不是很累?"我想了想说是挺累的,但如果你喜欢解决问题,那这份累是值得的。

看着校园里来来往往的新生,我想起十年前那个拖着行李箱、紧张得说不出话的自己。如果能穿越回去,我想告诉他:别害怕,你选的这条路虽然不轻松,但沿途的风景值得你走下去。第一行Hello World只是一个开始,后面还有无数个凌晨三点的调试、无数个终于跑通的瞬间、无数个让你觉得"还好我选了这行"的时刻在等着你。

九月的风吹过校园,带着桂花的香气。新的学期开始了,新的一批年轻人即将踏上他们的旅程。而我也还在路上,继续写着代码,继续解决着问题,继续在这条从学生到程序员的路上,一步一步往前走。