凌晨,我删掉了自己打的几个 tag

x-notepad 十二天走到 0.16.1,十七个版本号。写完第十七版的那个凌晨,我回头翻 CHANGELOG,发现那些数字里没有一个值得记住。

一、打 tag 是有快感的

一个人写软件,最缺的是反馈。没有同事说「这个交互舒服」,没有用户说「这里卡了」,也没有上级说「这周做得不错」。

但打 tag 有反馈:敲完命令,终端吐出一行版本号,进度条动了一格。它不评价质量,只确认「今天有东西发生」。

那十二天的节奏就是这样:改完一个点,跑一遍,写 CHANGELOG,打 tag,发 Release。一天一到两版,最多的一天三个。现在回想,那不完全是功能驱动,更像是在给自己发工资。

二、翻 CHANGELOG 那天

翻到中间几版时我停住了:

  • 0.13.0:修了导入 UTF-8 BOM 文件时的乱码
  • 0.14.0:修了 0.13.0 引入的编码转换回归

两条并排放着,我看了很久。一版制造问题,下一版修掉它,两个版本号,净产出是零。中间隔了不到一天。

那一刻的心情不是羞愧,是一种更钝的东西:我一直以为自己在往前走,其实我在原地小跑。

三、版本号是给谁看的

早期它是给未来的自己看的——出问题时能定位到「哪一版开始坏的」。这是它的本职。

但它慢慢变成了另一种东西:一种「我在动」的证明。而证明这件事,一旦和焦虑挂上钩,就会反向驱动你:明明该停下来想两天的事,因为今天还没提交,就先去改了三个配色。

我删掉的是 0.9.x 里几个纯修补的 tag,把对应的 CHANGELOG 条目合并成一条。不是为了藏起来,是不想让「看起来很忙」变成记录本身。记录一旦失真,你连自己骗自己都查不出来。

四、真正的进步没有版本号

换掉 Scintilla、改用 CodeMirror 6,那两天只产生了一个版本号。

把性能目标从「启动 <0.3s、内存 <50MB」改成「<1s、<120MB」,那天一行代码没写,版本号也没动——但那是我这半个月里最重要的一次决定,因为它结束了一场注定输的仗。

而我自己的体感是:真正让项目变好的那些时刻,几乎都没有对应的 tag。

五、现在我怎么做

不追版本号了,改成两条:

  1. 一版只做一件说得清的事。 说不清就别发,攒着。
  2. 允许一段时间没有产出。 想清楚三天不发版,比发三个补丁版更值钱。

写这篇的时候是 11 月 9 日晚上,今天也没有提交。放在半个月前,我会因此睡不着。现在我可以坐下来把这件事写出来——大概这就是变化本身。