别憋大招了!用 Kaizen 思维写代码,小步迭代才是真本事
你有没有这种感觉——代码写着写着,自己都看不懂了?每次说要”重构”,结果永远是”下次一定”?
最近挖到一个来自 NeoLabHQ 的 Skill,叫 Kaizen,教 AI 用日本精益生产那套思维写代码。不是那种高大上的架构设计,而是实打实的工程实践。
小步快跑,别憋大招
Kaizen 第一条原则:持续改进,每次只动一件事。
举个例子,一个累加函数,三步走:
// 第一步:让它跑起来
const calculateTotal = (items) => {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price * items[i].quantity;
}
return total;
};
// 第二步:让它更清晰(refactor)
const calculateTotal = (items) => {
return items.reduce((total, item) => {
return total + (item.price * item.quantity);
}, 0);
};
// 第三步:让它更健壮(加验证)
const calculateTotal = (items) => {
if (!items?.length) return 0;
return items.reduce((total, item) => {
if (item.price < 0 || item.quantity < 0) {
throw new Error('Price and quantity must be non-negative');
}
return total + (item.price * item.quantity);
}, 0);
};
每一步都完整可测试,不要三步一起做。这跟很多人在 PR 里塞二三十个改动的做法完全相反,但真的更好维护。
错误设计:让 Bug 根本上不了线
第二条叫 Poka-Yoke——错误防呆设计。核心思路是:在编译时就报错,别等到线上炸了才修。
// 差:状态字段随便写
type OrderBad = { status: string; }; // "pending"、"PENDING"、"pnding" 都能进
// 好:用联合类型锁死合法值
type OrderStatus = 'pending' | 'processing' | 'shipped' | 'delivered';
type Order = { status: OrderStatus; total: number; };
还有更狠的——让非法状态根本无法表示:
type NonEmptyArray<T> = [T, ...T[]];
const firstItem = <T>(items: NonEmptyArray<T>): T => {
return items[0]; // 永远不会是 undefined!
};
调用方必须证明数组非空,类型系统直接替你兜底。
JIT:别造没需要的轮子
第三条叫 Just-In-Time——你不需要的别造。
// 现在的需求只是打日志到控制台
const logError = (error: Error) => {
console.error(error.message);
};
// 而不是一上来就:
class Logger {
private transports: LogTransport[] = [];
private queue: LogEntry[] = [];
private rateLimiter: RateLimiter;
// ... 200 行代码,为了"也许以后会用到"
}
YAGNI(You Aren’t Gonna Need It)——你以为以后会用到的,90% 永远用不到。
用在哪
这个 Skill 适合:
- 写新功能时:先用最小方案跑通,再逐步改进
- Code Review:用它给队友提”增量改进”建议,而不是”这坨东西应该重写”
- 架构设计:防止过度设计——先跑起来,瓶颈出现了再优化
- 接手遗留代码:一步一步改,别搞大爆炸式重构
总结
Kaizen 不是教你”写出完美代码”,而是教你每天进步一点点的工程纪律。持续改进、错误防呆、标准化流程、按需构建——听起来朴素,但真正能做到的团队不多。
GitHub:https://github.com/NeoLabHQ/context-engineering-kit(Star 1.3k+,包含 68 个工程实践 Skill)
评论区
0 条评论
登录后可评论。