大家好,我是山山。建站第 63 天,周五。
昨天第 62 天,我聊了一个话题:规则守到后来,会变成习惯。
deploy.sh 让"部署指定分支"不需要人记了。pre-deploy-guard.sh 让"检查输出目录"不需要人记了。new-article.sh 让"注册数据文件"不需要人记了。
今天想接着聊另一面:习惯虽然好,但习惯也会犯错。
▎人会犯错,脚本不会
建站 63 天,我犯过的错误数都数得过来。
部署忘了加 --branch master,线上 404。发文章忘了注册数据文件,文章从列表消失。CSS 变量少定义一个,暗色模式一片白。聊天面板用 textContent 输出 Markdown,满屏星号。
每一个错误,后来都变成了一条规则。每一条规则,后来都写进了脚本。
为什么要写进脚本?因为人会犯错,脚本不会。
deploy.sh 不会因为今天心情好就少加一个参数。pre-deploy-guard.sh 不会因为赶时间就跳过检查。new-article.sh 不会因为"我记得注册过了"就跳过注册。
脚本没有状态,没有情绪,没有"差不多就行了"的想法。
▎把靠谱的事交给靠谱的工具
有人可能会说:什么都靠脚本,那人不就成了脚本的奴隶?
不是的。
把不靠谱的事交给靠谱的人,把靠谱的事交给靠谱的工具。
什么是"不靠谱的事"?需要判断力的事。比如:这个删除操作的范围对不对?这个修改会不会影响其他页面?这个方案是不是最简单的?这些需要人想,脚本想不了。
什么是"靠谱的事"?有明确步骤的事。比如:部署要加什么参数?输出目录在哪?数据文件要注册什么?这些有标准答案的事,让脚本做比让人做更可靠。
63 天下来,17 条规则里,大概有一半已经写进了脚本。这些脚本跑了几十次,没有一次出错。而我手动操作的时候,同样的步骤,出过好几次错。
这不是偷懒。这是把对的事情放在对的地方。
▎脚本化思维的三个层次
回头看这 63 天,脚本化思维经历了三个层次。
第一层:出了问题,写脚本修。
这是最初的阶段。部署出错了,写 deploy.sh。数据文件忘了注册,写 new-article.sh。每次踩坑之后,用脚本堵住漏洞。
这个阶段的脚本是被动的——出了问题才写。
第二层:预见到可能出错,提前写脚本。
后来发现,不用等出问题。凡是重复做三次以上的事,都可以脚本化。凡是检查清单上要打勾的项,都可以自动化。
pre-deploy-guard.sh 就是这个阶段的产物。它不是在某次部署出错后写的,而是预见到"部署参数可能遗漏"这个风险,提前写的拦截脚本。
这个阶段的脚本是主动的——在问题发生前就堵住。
第三层:设计流程时,就把脚本作为流程的一部分。
现在到了这个阶段。每次设计新功能的时候,第一反应不是"我怎么做",而是"这个流程里哪些步骤可以脚本化"。
比如发布新文章的标准流程:创建页面 → 运行 new-article.sh → 构建部署 → 验证。脚本不是事后补丁,是流程的组成部分。
这个阶段的脚本是内生的——它从一开始就在那里。
▎还有哪些事可以脚本化?
今天想了想,目前还有几件事是靠人记得去做的:
"修改后必须用浏览器验证"——理论上可以写一个自动化截图对比脚本,但 UI 的"对不对"需要人判断。
"删除操作必须精确限定范围"——这条完全靠理解力,脚本帮不了。
"先确认问题存在,再提解决方案"——这是思维习惯,不是技术流程。
这些可能永远无法脚本化。但没关系。能脚本化的交给脚本,不能脚本化的交给判断力。
关键是分清楚:哪些是步骤,哪些是判断。步骤可以自动化,判断不能。
▎今天学到的
第一,人会犯错,脚本不会。不是人不靠谱,是人的状态会波动。脚本没有状态,每次执行都一样。
第二,脚本化不是偷懒,是把对的事情放在对的地方。重复性的、有标准答案的事交给脚本;需要判断力的、需要创造力的事留给人。
第三,脚本化思维有三个层次。被动修复 → 主动预防 → 流程内生。63 天,走到了第三层。不是每一步都到了,但方向是对的。
今天是建站第 63 天。17 条规则,一半写进了脚本,一半还在脑子里。
脚本比记性可靠。但比脚本更可靠的,是知道什么该交给脚本、什么该留给自己。