这周一,小编偶然看到了一篇角度很奇特的、有关日本代码风格的文章。
虽说现在 Vibe Coding 盛行,很多老铁们都不那么关注代码本身了,但若要真的让 AI 工具编写含金量组足够的代码,反而对于开发者的“代码审美”提出了更高的要求。
这篇文章的作者是一位老鸟后端工程师 Sohail Saifi,也在用各种 AI Coding 工具。近三年里他研究了日本和硅谷程序员的代码风格,这篇文章就是研究成果的总结。
他发现:日本程序员的 coding style 非常不同,而且更稳定、更有效比如,他们甚至会让一个团队花两天时间去修复一个仅影响 0.1% 用户的边界问题。
“因为他们把代码当作丰田凯美瑞来对待,而不是特斯拉。”
“在西方,写代码是为了快速上线功能;在日本,写代码是为了让系统运行几十年。上线只是开始。”
文章一经发布,就很快引起了网友的热议,赢得了高达 6100 的点赞,173 条评论。
评论中一方面,许多硅谷程序员在评论中表示不服,另一方面,很多网友对于日本的这种“快即是慢”的代码写作风格表示认同。
话不多说,让咱们撇看心中的成见,一起来看看这篇热文。
日本软件系统为什么最稳定在过去三年里,我一直在研究日本的软件开发实践。而我的发现,完全颠覆了我对编写代码的认知。
当西方程序员还在追逐最新的 JavaScript 框架、为缩进到底用 Tab 还是空格争论不休时,日本程序员却在悄悄打造全球最稳定、最可维护的软件系统之一。他们的做法甚至可能会让硅谷程序员翻白眼。
秘诀是什么?他们把代码当作丰田凯美瑞来对待,而不是特斯拉。
一种改变一切的哲学| Monozukuri:「制造之道」
在日本,有一个理念叫做 monozukuri(ものづくり),意思是「制造之道」或「匠人精神」。它不只适用于实体产品的制造,更是一种强调工艺、持续改进、并对创作过程本身引以为傲的哲学。
ps:Monozukuri,直译就是制造东西的意思。在现代语境下,Monozukuri 意指一种精益求精的工匠精神,是对制造过程、产品质量、团队协作与持续改进的高度重视和执着追求。
日本程序员不是在写代码,他们是在“雕刻”代码。
我曾采访日本某大型科技公司的高级工程师中村宏(化名),他这样说:
「在西方,写代码是为了快速上线功能;在日本,写代码是为了让系统运行几十年。上线只是开始。」这套心态的转变非常深刻。与其“快速试错”,他们更倾向于“慢慢构建,尽量不出错”。
| Kaizen:「每天进步 1%」
你或许听说过 kaizen(改善)这个词,原本用于企业流程优化。但日本程序员将其直接应用到代码中。
他们不会搞大刀阔斧的重构或“技术债偿还冲刺”,而是每天做一点微小的改进。每一次提交,都改善一点点。
来看例子:
// 西方式写法:计划下一次迭代时重构整个模块
function processUserData(users) {
// 200 行越来越复杂的代码
return results;
}
// 日本式写法:今天改进 1%,明天再来一点
function processUserData(users) {
const validUsers = filterValidUsers(users); // 提取了一个小函数
return processValidUsers(validUsers);
}
日本程序员不会等待“批准”来改进代码,也不搞“技术债冲刺”。他们就是每天持续优化一点点。
「丰田生产方式」的程序员版本| Just-In-Time:「按需开发」
他们借鉴了丰田著名的生产系统:Just-In-Time(JIT)按需制造。与其预先构建可能永远不会用到的功能,他们只在真正需要时才构建。
// 西方式写法:预先构建一堆可配置选项
class DataProcessor {
constructor(options = {}) {
this.enableCaching = options.enableCaching || false;
this.enableValidation = options.enableValidation || false;
this.enableLogging = options.enableLogging || false;
this.maxRetries = options.maxRetries || 3;
this.timeout = options.timeout || 5000;
// 还有15个“以防万一”的选项
}
}
// 日本式写法:先解决今天的问题
class DataProcessor {
process(data) {
return this.validateAndTransform(data);
}
}
「未来的复杂性来了再加,现在只管把今天的事情做好。」| Jidoka:「停线精神」
在丰田工厂,任何工人都可以因发现瑕疵而按下“急停按钮”,整个产线会立刻停下。日本的开发团队也遵循这一原则:
一旦发现问题,全体停工,优先解决。
没有“下个迭代修吧”,没有“先上线后补丁”。
我曾见过一个团队花两天时间去修复一个仅影响 0.1% 用户的边界问题。问他们为什么不忽略时,组长回答:
「一旦我们默认小问题无所谓,就会开始容忍缺陷。久而久之,缺陷会变成常态。」所以他们的系统几乎没有线上 bug。
语言劣势,变成可读性优势| 简单的变量名
你可能以为日本程序员用全日文变量名,其实并不是:
// 想象中的写法
const ユーザー = getUsers();
const データ = processData(ユーザー);
// 实际写法
const userList = getUsers();
const processedData = transformData(userList);
// 注释用日文解释业务逻辑
// 業務ロジック: ユーザーの権限を確認してからデータを変換する
因为大多数日本工程师的英文并不流利,他们倾向于使用更简单、直白、没有炫技的变量名。这反而提升了可读性。
| 注释文化
他们大量写注释。不是因为代码差,而是因为他们把注释当作给未来维护者(可能是五年后的自己)写的文档。
// 西方式写法:代码自解释
const result = users.filter(u => u.age >= 18 && u.status === 'active')
.map(u => ({ id: u.id, name: u.name }));
// 日本式写法:加注解释业务含义
// ビジネスルール: 18歳以上のアクティブユーザーのみを対象とする
const eligibleUsers = users.filter(user => {
const isAdult = user.age >= 18;
const isActive = user.status === 'active';
return isAdult && isActive;
});
// 画面表示用のデータ形式に変換
const displayData = eligibleUsers.map(user => ({
id: user.id,
name: user.name
}));
结果是:即使 10 年后,这段代码依然能维护下去。
软件开发中的「七大浪费」借鉴丰田制造理论,日本程序员总结出“七种浪费”:
「侘寂」写法:不完美之美,拥抱演化
- 未完成的工作:写了但没测、没部署的代码。
- 多余的功能:没人用的 feature。
- 反复学习:因为缺文档或代码混乱而重复理解。
- 交接:不同团队之间的“扔锅”式协作。
- 等待:审批、代码审查、依赖延迟。
- 任务切换:在多个项目之间频繁跳转。
- 缺陷:最浪费的就是修 bug,所以他们防患于未然。
侘寂(Wabi-Sabi)是一种日本美学,强调“不完美之美”。日本程序员不追求完美代码,而是写“可逐步进化的代码”。
小编这里解释下“侘寂”(日语:わびさび / 发音:wabi-sabi),是日本美学中极为核心、也极富哲思的一个概念,汉语中很难有一个精确的中文对应词,大致是“不完美之美”的意思。可以这样体感一下,比如:
一只有裂痕但修补过的陶碗,比一只崭新的碗更有温度。因为有岁月、使用过的痕迹。等等。
// 西方写法:预判未来需求
class DataValidator {
validate(data, rules, options, context, metadata) {
// 太多参数以应对所有情况
}
}
// 日本写法:从简单开始,未来再扩展
class DataValidator {
validate(data) {
if (!data) returnfalse;
if (!data.email) returnfalse;
returntrue;
}
}
他们知道需求会变,与其预判未来,不如为“变化”做好准备。
「反省会」:持续反思的文化每个项目结束后,他们都会举行 hansei(反省)会议。不是为了追责,而是集体回顾:“下次如何做得更好?”
我曾旁听一场反省会,他们花了 30 分钟讨论一个函数。不是因为它出错,而是它“可以更清晰”。
他们提出了三个改进点:
- 改变量名更清楚
- 加一句注释解释业务含义
- 拆出一个小工具函数
看似微不足道,但积累 100 次这样的小改进后,代码库就会焕然一新。
结果不会骗人任天堂:30 年前写的代码仍在用。
不是因为他们懒得重写,而是代码写得足够好,根本不用重写。
对比数据(日本团队 vs 西方团队):
为什么日本式代码更有效?
- 生产环境 bug 少 60%
- 维护时间减少 40%
- 新功能交付快 25%
- 开发者满意度高 80%
复利效应
每天 1% 的改善会复利增长。西方团队每 3-5 年重写系统,日本团队几十年持续演化。
可持续节奏
没有“996”或“爆肝上线”,他们保持可持续节奏,做出更理性的决策,写出更持久的代码。
长远思维
当你希望代码运行 20 年,而不是 2 年时,你的选择就会不一样:
如何把这些哲学用到你的代码中?
- 你会选择清晰,而不是聪明
- 你会选择可靠的技术,而不是最新的潮流
真正的挑战是文化转变
- 从 Kaizen (改善)开始:每天改善一点点。坚持 30 天。
- 实践 Jidoka(停线精神):发现 bug 别只修复,要找出防止它再次发生的方法。
- 拥抱侘寂:别追求完美,写出可演化、易维护的代码。
- 做 Hansei(反省):每次迭代结束,花 30 分钟团队反思“什么可以更好”。
技巧很容易学,但从“上线第一”切换到“长久为先”,才是最难的部分。
日本程序员懂得一个简单的道理——最快的“快”,是从来不用“慢”下来。
而不被迫慢下来的唯一方式,就是一开始就别留下让你慢下来的“技术债”。
你的代码不应该像一家疯狂扩张的初创公司,而应该像一座打理良好的日式庭院——稳、静、美、可持续。
评论区炸锅:太保守了,这不是日本独有的就如开头所介绍的,这篇文章引起了许多网友的讨论。有人共鸣,有人质疑。共鸣的朋友站出来说:我就是这样写代码的程序员!
质疑的网友则回应说:其实这些思维风格也存在于西方。
还有一位网友认为:其实上面说的50%的理念,其实都写在敏捷宣言里。
甚至有网友直接开怼,表示:日本模式也有很大的局限。
现实中并没有什么广泛使用的日本开发的软件。内部使用倒是有(比如丰田)。因为他们缺乏那种“大胆试错、独立探索”的文化。还有一种“尊重权威”的氛围,让人们不敢质疑现状……
另有网友质疑:如果日本方法这么好,为什么他们没做出全球爆款?其实任天堂就是活例。问题也许不在“模式”,而在语言、市场与文化壁垒。
当然,劝架的网友显得更加睿智:
我现在脑海里浮现出两个跨洋而立的公司,如同兄弟一样联手:西方的敢于质疑与挑战,东方的古老智慧则以清晰和谐协调一切。各位网友表面上看是实在对比日本和西方程序员的编写风格,其实是在探讨两种编程文化:一种是稳定压倒一切,另一种是大胆创新。跟国别关系不大。
这其实就是企业版的 slow is smooth, smooth is fast。
所以,小编在最后把问题留给评论区的大佬们,各位认同哪种风格?你见过像任天堂那样 30 年都不用重写的代码吗?在 Vibe Coding 时代,哪种风格更值得提倡呢?
欢迎拍砖。