第50章 为自己写下第一行代码

四月的第二个星期二,刘星在清理电脑硬盘时,发现了一个被遗忘的文件夹。

它藏在D盘最深处,夹在一堆工作备份和技术文档之间。文件夹名叫“Ideas_2018”,创建日期是三年前的春天。刘星点开它,里面是十几个文本文件和思维导图截图,记录了那些年他脑子里闪过、但从未付诸实践的各种想法:

*一个针对程序员的健康管理应用,记录坐姿提醒、眼保健操、久坐站立;

*一个简化版的家庭财务共享工具,适合夫妻共同记账但保持隐私边界;

*一个阅读进度管理插件,整合豆瓣书评和阅读时长统计;

*甚至还有一个“中年危机自救指南”的网站框架,想集合心理咨询资源、职业转型案例、技能学习路径……

每个文件都只有简短的描述,几行核心功能,然后就没有然后了。繁忙的工作,家庭的责任,日复一日的加班,让这些“自己的项目”永远停留在想法阶段。最后修改日期停留在2019年6月——差不多是他上一个项目最紧张的时候,从那之后,这个文件夹就被彻底遗忘了。

刘星一个个点开这些文件,像考古学家发掘自己三年前的思维碎片。有些想法现在看来很幼稚,有些依然有价值,还有一些让他感到一丝悲哀:原来那么早,自己就已经在思考“健康管理”“财务共享”“中年危机”这些问题了,但从未真正行动。

他关掉文件夹,靠在椅背上。午后阳光斜射进房间,照亮空气中飞舞的微尘。窗外的香椿树冒出了嫩芽,是那种鲜亮的、近乎透明的黄绿色。春天真的来了。

电脑屏幕上,除了那个刚被打开的旧文件夹,还开着几个网页:兼职平台的接单页面,招聘网站的求职记录,以及一个在线翻译工具。这是他现在生活的全部数字映射:寻找机会,等待回复,完成任务,换取报酬。

功能性,工具性,生存导向。

他忽然想起读《平凡的世界》时,孙少平在工棚里读书的场景。对于孙少平来说,读书不只是获取知识,更是在艰难生活中保持“精神站立”的方式。那么对于程序员刘星来说,什么才是他的“读书”呢?

答案几乎是立刻浮现的:写代码。

不是为公司写,不是为客户写,不是为报酬写,而是为自己写。为了表达某个想法,为了解决某个真实问题,为了纯粹的创造乐趣而写。

这个念头一旦出现,就再也压不下去了。像一颗埋藏已久的种子,被春雨唤醒,固执地要破土而出。

但写什么呢?

刘星重新打开那个“Ideas_2018”文件夹,一个个浏览。健康管理应用太复杂,需要硬件配合;家庭财务工具涉及敏感数据,且他现在没有“家庭”可以共享;阅读插件需要浏览器扩展开发,技术栈不熟……

他的目光停在了最后一个想法上:“中年危机自救指南”。

这个想法最初是怎么产生的?刘星努力回忆。好像是2018年,他刚满三十八岁,项目压力巨大,身体开始出问题,和張穎的关系也进入瓶颈期。某个加班的深夜,他感到一种深刻的虚无感,于是写下了这几行字:

“一个匿名社区+结构化资源库。用户可以分享自己的转型故事(匿名),可以找到心理咨询师、职业顾问、技能课程等资源,可以根据自己的情况(年龄、行业、经济状况)生成个性化的‘自救路线图’。”

现在看来,这个想法依然有价值——甚至更有价值,因为他自己正在经历这一切。但他不打算真的做一个网站,那太庞大,太复杂,需要设计、开发、运营、推广,不是一个人能完成的。

他需要的,是一个更小、更私人的东西。

刘星关掉所有网页,打开他最喜欢的代码编辑器——Visual Studio Code。深色的主题,彩色的语法高亮,光标在空白的编辑区域里安静地闪烁。这个界面他看了十几年,熟悉得像自己的手掌纹路。

他新建了一个文件,命名为:`reboot_diary.py`

#`.py`是Python的后缀。Python不是他最擅长的语言——他更熟悉Java和C++——但它简洁,灵活,适合快速原型开发。而且,他最近做了不少Python相关的翻译工作,手还热着。

然后,他盯着空白的编辑器,手指悬在键盘上。

第一行代码写什么?

在职业生涯中,刘星写过无数个“第一行代码”:`public class Main {`,`#include `,`function init(){`……那些都是为了项目,为了需求,为了交付。它们有明确的目的,有规范的格式,有评审的标准。

但这一次,完全不同。没有产品经理的需求文档,没有架构师的系统设计,没有测试用例,没有deadline。只有他自己,和一个模糊的想法:写一个私人的、数字化的自我重建记录工具。

他需要一个起点。最简单的起点。

深吸一口气,他的手指落下。

键盘发出清脆的敲击声:

#python

#于破碎处重生·个人重建记录工具

#作者:刘星

#开始日期:2021年4月13日

#这是第一行代码,为自己而写。

四行注释,中文。不符合任何公司的编码规范——英文注释是行业默认标准。但这是他自己的项目,他想用母语开始。

光标在最后一行末尾闪烁,等待下一步。

刘星思考了几分钟。这个工具应该是什么?一个日记本?一个进度跟踪器?一个资源管理器?也许都是,也许都不是。他决定从最基本的功能开始:记录。

他继续写:

#print(“【系统启动】重建记录工具已初始化。“)

#print(“提示:这是一个私人工具,没有云同步,没有数据分析,只有最朴素的记录。“)

定义了一个类,创建数据目录,打印启动信息。很基础,但这是一个开始。

他按`F5`运行。控制台弹出,显示:

#【系统启动】重建记录工具已初始化。

#提示:这是一个私人工具,没有云同步,没有数据分析,只有最朴素的记录。

简单的黑白文字,但在刘星眼中,却有一种难以言喻的美感。这是他为自己创造的第一行输出。

接下来该做什么?他想了想,决定先实现一个核心功能:添加记录。

添加一条重建记录

#:param category:类别,如'工作','健康','学习','关系','财务','思考'

#:param content:记录内容

#:param mood:情绪状态,1-10分

#:param tags:标签列表

#按日期保存

......

#读取当天已有记录(如果有)

......

#保存

......

写完这个方法,刘星停下来想了想。他需要测试一下。于是他在代码底部添加:

#测试添加一条记录

category=“思考“,

content=“写下第一行为自己而写的代码。感觉很奇怪,像是重新学走路。但每一步都是自己的。“,

mood=6,

tags=[“编程“,“自我重建“,“起点“]

运行。控制台输出:

【系统启动】重建记录工具已初始化。

提示:这是一个私人工具,没有云同步,没有数据分析,只有最朴素的记录。

【记录添加】2021-04-13 15:23:41 -思考:写下第一行为自己而写的代码。感觉很奇怪...

同时,在项目目录下,自动创建了一个`reboot_data`文件夹,里面有一个`20210413.json`文件。刘星打开它:

......

“timestamp“:“2021-04-13 15:23:41“,

“category“:“思考“,

“content“:“写下第一行为自己而写的代码。感觉很奇怪,像是重新学走路。但每一步都是自己的。“,

“mood“: 6,

“tags“:[

“编程“,

“自我重建“,

“起点“

]

......

格式工整,内容清晰。一条数字化的、结构化的私人记录。

刘星看着这个JSON文件,心里涌起一种奇妙的成就感。不是完成了一个大项目,不是解决了一个技术难题,而是创造了一个小小的、只属于自己的系统。它不完美,功能简陋,但它是活的,它在运行,它在记录。

他想记录更多。

他回到代码中,删掉了测试部分,然后写了一个简单的交互循环:

......

再次运行。这次,程序进入了交互模式:

【系统启动】重建记录工具已初始化。

提示:这是一个私人工具,没有云同步,没有数据分析,只有最朴素的记录。

进入交互记录模式(输入'quit'退出)

可用类别:工作、健康、学习、关系、财务、思考、日常

========================================

类别:

光标在闪烁,等待输入。

刘星想了想,在“类别:”后输入:`工作`

内容:`上午完成了一个技术文档翻译,收入800元。下午投了3份简历,暂无回音。`

情绪:`6`

标签:`翻译,求职,收入`

回车。控制台显示“记录已保存。”

他继续:

类别:`健康`

内容:`今天散步30分钟,做了眼保健操。睡眠还是不好,凌晨3点醒了一次。`

情绪:`5`

标签:`运动,睡眠`

类别:`学习`

内容:`继续读《平凡的世界》,读到孙少平在煤矿的坚持。写了一点读书笔记。`

情绪:`7`

标签:`阅读,思考`

类别:`关系`

内容:`给母亲打电话,她理疗有好转。和张颖约了周末带清清去公园。`

情绪:`6`

标签:`家庭,儿子`

一条条记录,像碎片一样被收集起来。没有宏大叙事,只有日常的、琐碎的、真实的瞬间。

最后,刘星输入`quit`退出程序。他打开数据文件夹,看到今天的JSON文件已经包含了五条记录。他一条条看过去,像在看另一个自己的日记——更结构化,更数字化,但同样真实。

窗外天色渐暗。刘星没有开灯,就着电脑屏幕的光,继续完善这个工具。他添加了查询功能:

#def query_entries(self, category=None, date=None, tag=None, keyword=None):

#“““查询记录“““

#这部分代码他写了二十分钟,处理各种查询条件的组合

#支持按类别、日期、标签、关键词搜索

又添加了简单的统计:

#python

#def show_stats(self, days=30):

#“““显示最近N天的简单统计“““

#统计各分类的记录数量

#统计情绪平均值

#统计最常出现的标签

代码越写越多,功能越来越完整。但刘星没有感到压力,反而有一种流畅的愉悦感。他不需要考虑性能优化,不需要考虑可扩展性,不需要考虑团队协作规范。他可以按照自己的想法来,可以随时重构,可以尝试新技术——只是为了学习,不是为了交付。

晚上八点,他写完了基本功能。工具现在可以:

1.交互式添加记录

2.按多种条件查询记录

3.显示简单统计

4.导出某段时间的记录为Markdown文件(方便阅读)

他运行了统计功能,查看最近七天的记录:

```

【最近7天统计】

总记录数:12条

分类分布:

-思考:4条

-工作:3条

-健康:2条

-学习:2条

-关系:1条

平均情绪值:5.8

常用标签:阅读(3),编程(2),家庭(2),求职(2)

```

简单的数字,勾勒出他过去一周的生活轮廓:以思考和工作为主,情绪在及格线徘徊,阅读和编程是主要活动。

刘星靠在椅背上,看着屏幕上的代码。编辑器显示这个文件现在有387行。不算多,但每一行都是他今天下午亲手写下的。没有抄袭,没有复制粘贴,没有框架生成,从第一行注释到最后一行函数,全部原创。

他忽然意识到,这是近两年来,他第一次不是为了报酬、不是为了求职、不是为了满足他人期望而写的代码。这是纯粹的创造,是自我表达,是数字世界里的手工陶艺。

他保存所有文件,关闭编辑器。房间已经全黑了,只有电脑屏幕的光照亮他的脸。他站起来,走到窗边。

夜色中的城市依然繁忙,车流如织,灯火如星。但这一次,刘星感到的不再是疏离和渺小,而是一种微妙的连接感。在这个巨大的数字生态系统里,他也贡献了一点东西——不是商业产品,不是开源项目,只是一个私人的、简陋的、但完全属于他的小工具。

它不会改变世界,甚至不会改变他自己的生活困境。明天,他依然要面对房租、账单、求职、孤独。但这个工具的存在,像是一个锚点,提醒他:即使在这个破碎的时期,他依然有能力创造,有能力用自己最熟悉的方式——写代码——来理解、记录和重构自己的生活。

他回到电脑前,打开`reboot_diary.py`,在文件最顶部,那四行注释下面,他又加了一行:

#这不是一个产品,这是一个过程。代码会迭代,人生也会。

然后,他运行了最后一次交互模式,添加了今天的最后一条记录:

类别:`思考`

内容:`今天写了一个私人的重建记录工具。387行代码,为自己而写。感觉像是找回了一部分失落的自我:那个单纯因为热爱而编程的少年。工具很简陋,但它是我的。在这个一切都不确定的时期,至少我能确定这些代码的每一行都是我亲手敲下的。`

情绪:`7`

标签:`编程,自我重建,创造,起点`

保存,退出。

刘星关掉电脑。房间陷入完全的黑暗,只有电源指示灯微弱的红光,像一颗遥远星辰的余烬。

他躺在床上,闭上眼睛。脑海里不再是那些焦虑的念头,而是代码的结构:类、方法、循环、条件。像一首熟悉的旋律,安抚着他的神经。

他想,也许这就是他的“平凡之路”:用代码记录破碎,用代码理解重建,用代码在数字世界里为自己搭建一个临时的避难所。虽然简陋,虽然私密,但它是真实的,有温度的。

而今天写下的第一行代码,就像孙少平在工棚里翻开的第一页书,是一种宣告:我还在这里,我还在思考,我还在创造。生活可以击垮我的很多部分,但不能剥夺我写代码的能力和权利。

窗外传来救护车的鸣笛声,由远及近,又由近及远。城市在呼吸,在运转,在发生无数的故事。

而在一个十二平方米的出租屋里,一个中年男人刚刚为自己写下了387行代码。没有用户,没有收入,没有掌声。只有寂静的夜晚,和一行行沉默的字符。

这就够了。

因为这是起点。

是于破碎处,为自己写下的第一行代码。