很多长期使用的工具,最初都只是解决眼前问题的几十行脚本。它们随后被定时任务调用、被其他人引用,又逐渐接触凭据、远程主机和不可逆的数据操作。规模可能仍然很小,责任却已经完全不同。
输入和输出要稳定
工具可以简单,但输入格式、退出码和输出位置应该明确。面向人的提示与面向程序的数据最好分开,让调用者不必从一段易变的文字里猜测结果。
失败时不要扩大影响
在写入之前完成校验,临时文件与正式产物分开,替换时使用原子操作。涉及远程状态时,先读取当前值并保留回滚点;涉及删除时,只处理精确命中的对象。
留下一条验证命令
“命令没有报错”不等于目标已经实现。一个好用的小工具,通常会附带一条低成本的验证路径:检查生成文件、读取服务状态,或者用真实输入跑一次最小闭环。
工具的成熟度不取决于代码量,而取决于它是否知道自己的边界,并在边界被触碰时给出清楚的答案。