海的自清洁和代码的自清洁
24年8月去了一趟三亚。我很少见到海。
我当时一直在想,它为什么看着这么干净。
海边
水面是蓝绿色的,近处浅,能看见底下的沙,往远处一层一层变深。
浪推上来,把沙搅浑,退下去,过一会儿又清了。
海看着很纯净。
水
小溪,河流,海洋。
写代码也差不多,模块,组件,系统。
溪水看着清,是因为浅。
河流看着浑浊,因为汇入的小溪多。
不知道什么时候,污水脏水就跟着进来了。
海水看着清,是因为它够大,脏东西被稀释、被带走、沉到底下。
屎山
项目是这么长起来的。
一开始只有几个模块,谁都看得懂。
业务往前走,模块里塞组件,组件里塞分支,系统长成一张网。
每一行在写的时候都有理由,堆到一起就没有理由了。
屎山不是谁想堆的,是它自己长出来的。
等发现的时候,已经推不动了。
拦
一条路是 commit 的时候检查。
lint、类型、单测,钩子挂在提交前,不过就不让提交。
好处是快,问题刚写下去就被抓住,改起来几分钟的事。
但是它只拦得住看得见的东西。
格式、命名、没用的变量,它管得住。
模块边界糊了,依赖绕成圈,它管不住。
清
另一条路是定期清理,像海的自清洁。
潮汐来回推,洋流把东西带走,重的沉下去,底下的微生物慢慢分解。
这是一套循环,不是一次大扫除。
代码也一样。
挑个固定的时间,翻一遍最近的代码,合并重复的,拆开过大的,删掉没人调用的。
难点不在动手,在判断。
但是不删也不行。
留着不动,账只会越滚越大。
所以还是要下定决心删。