聊聊我的编程之旅
大四的课表已经空了,广州的秋天总是来得很晚,宿舍窗外的风还是带着一点潮湿的闷热。我把电脑屏幕的亮度稍微调暗了一点,看着终端里安静闪烁的光标,突然想写点什么。
敲下这篇文章的时候,距离我第一次见到真正的代码,已经过去好几年了。
那是高中的一堂信息技术课。机房里有一股常年不见阳光的灰尘味,电脑主机的风扇发出沉闷的嗡嗡声。老师在前面的投影幕布上敲下了一行 print("Hello World")。周围的同学大多在切屏偷玩网页游戏,我照着黑板上的字符,在那个简陋的编辑器里按下了回车。
屏幕底部的黑色窗口里,安静地吐出了那行字。
那是一个极其微小的瞬间,没有电影里那种灵光乍现的配乐,但我确实盯着那行字看了很久。在此之前,电脑对我来说只是一个消费内容的黑盒,而那一刻,我突然意识到,只要遵循某种特定的语法,我可以通过几个英文字符去支配这台机器,让它完全按照我的意志去执行动作。这种确定性,让人感到一种隐秘的心安。
从那之后,我开始在课余时间自己找教程看。从最基础的 Python 语法开始,后来又去折腾前端。我至今还记得自己用 HTML 和 CSS 拼凑出的第一个个人主页,背景是刺眼的纯色,排版歪歪扭扭,但在本地浏览器里双击点开的那一刻,我依然觉得它很漂亮。后来我开始学 JavaScript,试着写了一个简单的网页点击小游戏。为了让一个按钮在点击后改变颜色,我对着屏幕找了一个下午的 bug,最后发现只是少写了一个花括号。
挫败感是常态,但在几百次的报错和修正之后,程序跑通那一瞬间的平静,足以抵消掉前面所有的烦躁。
后来我考入了广州商学院。作为一所民办三本院校,这里的学术氛围和那些顶尖学府自然是有差距的。大一刚入学的时候,我也迷茫过一段时间。周围有很多声音,有人在抱怨环境,有人在浑浑噩噩地打游戏度日。但我慢慢发现,写代码是一件绝对公平的事情。编译器不会看你的学校出身,你写了一个死循环,它就会卡死;你把逻辑理顺了,它就能完美运行。
于是我把大部分时间交给了图书馆和专业课。大学系统地开设了数据结构、操作系统、计算机网络这些课程。说实话,刚开始啃这些书的时候,我觉得枯燥透顶。看着书上那些关于进程调度、TCP三次握手、红黑树旋转的理论,我总觉得它们离我太远,远不如自己用框架快速搭一个网页来得有成就感。
但随着写的代码越来越多,我开始频繁地撞墙。为什么这个接口的响应速度这么慢?为什么会出现内存泄漏?为什么跨域请求总是失败?当我去探究这些问题的底层原因时,那些曾经觉得枯燥的理论知识,突然像拼图一样一块块嵌进了现实的场景里。我才逐渐明白,那些花哨的框架和工具只是冰山一角,而操作系统和计算机网络,才是托起这一切的深海。
这四年里,我按部就班地上课、复习、写代码。拿了两次国家奖学金,GPA 最终停在了 4.02。很多人问我怎么做到的,其实并没有什么特别的方法论,只是在别人选择睡懒觉的早晨,我习惯性地背着包去了自习室;在别人面对枯燥的 C 语言指针放弃时,我多画了几张内存结构图。荣誉只是副产品,真正的收获是那几万行代码带来的肌肉记忆。
大二那年,我决定做一个稍微“像样”一点的东西。那是一个基于 Vue 和 Node.js 的在线任务管理工具。当时只是觉得市面上的 Todo 应用都不太符合自己的使用习惯,干脆自己写一个。
那是我第一次脱离书本上的 demo,去面对一个完整的开发流程。从最开始在纸上画需求原型,到设计 MySQL 的数据表结构,再到前后端接口的联调。我记得那个月里,我经常在半夜两三点还对着屏幕发呆。室友的呼吸声很均匀,而我还在和跨域资源共享(CORS)的报错死磕。
最折磨人的是部署上线的环节。我买了一台最便宜的云服务器,面对着黑乎乎的 Linux 终端,一行行敲着命令。配置 Nginx 反向代理,用 PM2 守护 Node 进程,解决各种奇怪的环境依赖问题。
当所有配置终于走通,我在手机浏览器的地址栏里输入那个公网 IP,看着自己写的页面在手机屏幕上顺利加载出来,并且能够顺滑地添加、删除任务时,我长长地呼出了一口气。那个工具其实很简陋,UI 甚至有些粗糙,但那是我第一次真真切切地感受到,自己创造了一个能够在现实世界中运转的系统。
后来,我开始尝试写博客。
以前我总觉得,网上已经有那么多技术大佬的文章了,官方文档也写得足够详细,自己再去写一些基础的总结,完全是在浪费时间。但在实际开发的摸爬滚打中,我发现了一个问题:看懂了不等于掌握了,能把代码写出来,也不等于真正理解了背后的机制。
很多时候,你以为自己对某个知识点已经了如指掌,但当你打开编辑器,试图用自己的话把它讲清楚时,就会发现大脑里其实有很多模糊的灰色地带。比如闭包,比如事件循环,在写成文字的过程中,我不得不反复去查阅资料,去推翻自己不够严谨的表述。
理查德·费曼有一句话我很喜欢:“如果你不能用简单的语言解释它,你就没有真正理解它。”
写博客的过程,本质上是一场对自我的审视和知识的重构。我不再去追求文章的阅读量,也不在意是否有人在评论区互动。这个博客,与其说是写给别人看的,不如说是互联网上属于我的一个安静的数字庭院。我在这里记录下每一个阶段遇到的 bug,记录下某个深夜突然想通的算法逻辑,也记录下这些平淡无奇的日子。
等到几年后再回头翻看这些文章,看着自己曾经写下的那些略显稚嫩的代码和思考,应该会有一种和过去的自己隔空对话的奇妙感觉。
现在是大四的尾声了,身边的人都在忙着找工作、考研或者考公。在这个略显焦躁的节点上,我反而觉得心里很平静。
回顾这几年的编程之旅,我发现它带给我的,早就不仅仅是一项可以用来谋生的技能,而是潜移默化地重塑了我看待这个世界的方式。
遇到再庞大、再复杂的问题,我不再感到本能的恐惧,而是习惯性地把它当成一个工程项目,拆解成一个个可执行的模块,然后逐个击破;在做任何决定之前,我会像写代码一样,下意识地去考虑边界条件,去预判可能出现的异常情况,并提前准备好 catch 的方案。
生活其实也像是一个巨大的、不断运行的程序,充满了未知的变量和偶尔的崩溃。我们能做的,就是不断地重构自己的认知,修补自身的 bug,然后平静地继续运行下去。
屏幕上的光标还在闪烁,这篇记录差不多该结束了。但我的代码还没有写完,这条路没有终点,我也还在路上。