火车从广州出发,六个小时后抵达。
车厢里的冷气开得有些足,混杂着泡面和劣质香精的味道。窗外的风景正在以每小时两百多公里的速度倒退,从黄埔区密集的钢筋水泥,逐渐变成了大片裸露的黄土地和连绵的农田。天空的颜色也从灰蒙蒙的白,过渡到了带着些许沉闷的暗蓝。
手机信号随着隧道的进出时有时无,屏幕上的绿色加载圈转了很久,微信消息最终停在了出发前室友发来的“路上注意安全”。我把手机屏幕朝下扣在桌板上,靠着椅背,看着车窗玻璃上映出的自己发呆。
大四的寒假。不出意外的话,这应该是学生生涯里的最后一个寒假了。
代码的归处
打开电脑,习惯性地唤出终端。黑底白字的窗口里,光标规律地闪烁着。
程序员有一种叫做“回家”的操作——cd ~。无论你在文件系统的哪个角落,无论你迷失在多深、多复杂的嵌套目录里,无论你刚刚在处理哪个棘手的项目,只要敲下这几个字符,按下回车,系统就会立刻把你带回 home 目录。那里一切如初,干净,整洁。
代码也有它的归处。写完了,commit,然后 push 到 GitHub,就像是把一封写好的信投进邮筒。那些由 0 和 1 组成的数据,会顺着网线穿过海底光缆,最终抵达太平洋对岸某个数据中心的硬盘上。
我的主页里躺着 126 个仓库。它们就这样散落在世界的某个角落,安静地运行着。
这 126 个仓库,几乎装满了我过去三年的全部生活。从大一刚接触 C 语言时写的那些满是 bug 的小练习,到后来熬了几个通宵做出来的 React 组件库,再到为了准备面试刷的几百道 LeetCode 题解。
广州商学院,民办三本。在软件工程这个极其看重出身的行业里,这个标签就像是一道隐形的墙。刚进大一的时候,我也迷茫过,甚至有些自卑。但代码是公平的,编译器不会因为你的学校牌子不够响亮就拒绝编译你的程序。
于是我把时间都扔进了图书馆和机房。GPA 4.02,两次国家奖学金。这些数字和证书在答辩的 PPT 上看起来很漂亮,但只有我自己知道,它们是由多少个坐在电脑前敲击键盘的深夜堆砌而成的。那些为了弄懂一个异步函数、为了修复一个内存泄漏而抓头发的时刻,最终都变成了 GitHub 上那一片密密麻麻的绿色提交记录。
偶尔会有人 clone 我的仓库,或者点一个 star,那种感觉就像是有人在遥远的地方把信拆开看了,还冲你点了点头。但更多时候,它们只是静静地待在那里,等待着也许永远不会来的读者。它们不吵不闹,只要服务器不断电,它们就会一直存在。
代码的归处是仓库。那人的归处呢。
老地方
傍晚时分,推开家门。熟悉的油烟味混合着饭菜的香气扑面而来。
回到家的第一个晚上,我妈做了一桌子菜。红烧鱼、炒青菜、西红柿蛋汤,还有一盘切得有些随意的卤肉。和高中时候每次月考完放假回来吃的一模一样。
饭桌上铺着那张用了好几年的塑料桌布,边缘有些起卷。碗筷还是那套白底蓝花的,我手里端着的那只碗,边缘磕了几个小缺口,摸上去有些硌手。客厅里的电视开着,放着不知名的选秀综艺,声音开得不小,但其实没人在看,只是谁也没有去关掉它,好像有了这点背景音,屋子里才显得暖和。
我爸坐在我对面,夹了一筷子鱼肉,随口问我在学校最后一年都在学些什么,找工作顺不顺利。
我咽下一口饭,试图用通俗的语言向他解释 TypeScript 的类型系统,解释 React 的虚拟 DOM,解释前端工程化的复杂性。他端着酒杯听了半天,眉头微微皱着,最后得出结论:“那不就是做网页的嘛。”
我愣了一下,然后笑了笑,低头喝了一口汤。
“对,做网页的。”
也不算错。在他们眼里,那些高深的底层逻辑、那些改变了整个前端生态的框架,都不如一句“做网页的”来得实在。我突然觉得很轻松。在这里,我不需要向任何人证明我的技术栈有多深,不需要展示我的 GPA 有多高,也不需要提起那两次国家奖学金。在他们看来,我只是那个坐了六个小时火车、看起来有些疲惫、需要多吃两碗饭的儿子。
饭后我回到自己的房间。推开门,有一股淡淡的樟脑丸味道。
书桌还是高三时候的样子。桌面上整齐地摆着几本早就用不上的《五年高考三年模拟》,墙上贴着那张边缘已经褪色泛黄的课程表,周四下午的那节体育课上还画着一个笑脸。抽屉的把手有些松动,椅子坐上去依然会发出轻微的吱呀声。
房间里唯一和过去不同的,只有桌角那台旧台式机被我换成了现在这台满是贴纸的笔记本电脑。
打开笔记本,连上家里那个总是不太稳定的 WiFi。习惯性地打开终端,在一个项目目录下敲下了 git pull。
屏幕上跳出几行提示,没有新的 commit。当然了,现在是假期,连那个最卷的开源项目维护者大概也去休息了。
归
波伏瓦说过:“人不是生而为人的,而是后来才成为人的。”
其实家也是一样。家并不是一直都是家。小时候,它是你的全世界,你所有的认知都建立在这个几十平米的空间里。后来你长大了,有了自我意识,它变成了一个你急着想要逃离的地方。你嫌弃它的老旧,嫌弃父母的唠叨,向往着几百公里外那个陌生而繁华的城市。
再后来,当你在外面待得足够久。当你吃够了学校食堂永远不变的那几样菜,当你习惯了自己把脏衣服塞进洗衣机,当你在图书馆闭馆的音乐声中独自走回宿舍,当你在深夜的工位上看着满屏的代码感到一阵莫名的虚无——经历了足够多的孤独之后,它又变回了那个你愿意回去的地方。
你愿意回来,不是因为这里有多完美,不是因为这里的网速有多快。而是因为这里有人不需要你解释 TypeScript 是什么,也不关心你以后能拿多少 K 的 offer,就愿意在厨房里忙活半天,做一桌子你爱吃的菜等你。
凌晨一点,父母已经睡下。家里安静得只能听到客厅墙上那面老钟在走的声音。
嘀嗒,嘀嗒。
声音不大,但在寂静的夜里显得特别清晰。这种规律的机械声有一种奇特的安抚力量,让人觉得时间虽然在流逝,但一切都很安稳。
我靠在被窝里,拿起手机,打开了 GitHub 的客户端,找到自己正在写的一个个人博客项目。
在 commit message 的输入框里,我慢慢打下了一行字:
chore: back home for winter break
点击 push。看着进度条走完,然后关掉屏幕。
房间重新陷入黑暗。墙外的路灯光透过窗帘的缝隙漏进来,在天花板上打出一条狭长的光带。客厅里的钟还在走。
这大概就是归了。
归,不是简单地到达地图上的某个坐标,也不是完成了一次物理意义上的位移。而是你知道,在这个世界上有这么一个地方,它永远敞开着,愿意接住你所有的疲惫、迷茫和那些不为人知的努力。
闭上眼睛。
cd ~
回家了。
