海的自清洁和代码的自清洁

24年8月去了一趟三亚。我很少见到海。

我当时一直在想,它为什么看着这么干净。

海边

水面是蓝绿色的,近处浅,能看见底下的沙,往远处一层一层变深。

浪推上来,把沙搅浑,退下去,过一会儿又清了。

海看着很纯净。

水

小溪,河流,海洋。

写代码也差不多,模块,组件,系统。

溪水看着清,是因为浅。

河流看着浑浊,因为汇入的小溪多。

不知道什么时候,污水脏水就跟着进来了。

海水看着清,是因为它够大,脏东西被稀释、被带走、沉到底下。

屎山

项目是这么长起来的。

一开始只有几个模块,谁都看得懂。

业务往前走,模块里塞组件,组件里塞分支,系统长成一张网。

每一行在写的时候都有理由,堆到一起就没有理由了。

屎山不是谁想堆的,是它自己长出来的。

等发现的时候,已经推不动了。

拦

一条路是 commit 的时候检查。

lint、类型、单测,钩子挂在提交前,不过就不让提交。

好处是快,问题刚写下去就被抓住,改起来几分钟的事。

但是它只拦得住看得见的东西。

格式、命名、没用的变量,它管得住。

模块边界糊了,依赖绕成圈,它管不住。

清

另一条路是定期清理,像海的自清洁。

潮汐来回推,洋流把东西带走,重的沉下去,底下的微生物慢慢分解。

这是一套循环,不是一次大扫除。

代码也一样。

挑个固定的时间,翻一遍最近的代码,合并重复的,拆开过大的,删掉没人调用的。

难点不在动手,在判断。

但是不删也不行。

留着不动,账只会越滚越大。

所以还是要下定决心删。