无我编程的10条诫律最早出现在 1971 年 Gerald Weinberg 出版的《程序开发心理学》中。后由Stack Overflow网站的联合创始人 Jeff Atwood 在其2006年5月9日的博文《无我编程的10条诫律》中再次列出。
The Ten Commandments of Egoless Programming
https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/
Jeff Atwood 在其2006年5月12日的博文《无我编程:你的工作不代表你》中,引用 Johanna Rothman的描述,解释了无我编程的由来。
Egoless Programming: You Are Not Your Job
https://blog.codinghorror.com/egoless-programming-you-are-not-your-job/无我编程发生在开发阶段,表现为技术团队经常通过同级评审的方式来发现软件中的缺陷。目的是让所有人(包括作者)都参与寻找缺陷,而不是证明软件产品里没有缺陷。人们会交换各自手上的代码,相互进行评审,并且大家都有这样的共识:代码的原始作者会犯错误,而作为评审者,他们会找出这些错误。最后的结果是,每个人都从自己的错误以及别人的错误里有所长进。这就是无我编程(egoless programming)的由来。不管我的工作做得“完美”还是“有欠缺”,“我”本人并不对正在开发中的产品负责。“我”的价值体现在尽心尽职,以及从错误中学习而付出的努力,而不是我的工作的最初成果。
Stephen Wyatt Bush在2012年4月7日的博文《爸爸和无我编程十条诫律》中提到:
在爸爸去世前,我和他谈论了2个星期关于编程的事。
我22岁,一个在大学里攻读美术设计的四年级的学生。爸爸62岁,一个很老的爸爸。早在世纪60年代他就在田纳西理工大学编程,他在打孔纸带上做FORTRAN开发。他知识丰富。
这个学期我才刚刚开始接触编程,而我的整个脑子全被它吸引住了。编程很神奇,很强大,在很多方面比图像设计更富创造性(我会在另外的文章里谈论这个话题)。
在我假期回到家时,爸爸向我分享了无我编程的十条诫律。他把它打印出来,逐条和我讨论。这是在他意外去世前我们仅有的关于编程的讨论。也许这是让我对此念念不忘的原因。
http://blog.stephenwyattbush.com/2012/04/07/dad-and-the-ten-commandments-of-egoless-programming/
tshi&老曹根据网络上流传的翻译版本,对照英文原文,编译如下。
- Understand and accept that you will make mistakes.
理解和接受自己会犯错误。
这是对待自己的态度么?气急败坏可没有任何益处,关键是要在错误进入到生产环境之前把它们找出来。所幸的是,在软件行业中犯错误通常不会导致灾难性事故。我们可以,也应该从错误中吸取教训,微笑,并继续前进。
- You are not your code.
不要使用代码来针对个人(你不是你的代码)。
这是对待同行的第一个态度吧?要记住,代码评审的目的是为了找出问题,而且最终会找到问题。如果真的找到了问题,请不要把它作为针对个人的借口(当有问题疏漏时不要自责)。
- No matter how much "karate" you know, someone else will always know more.
不管你知道多少“秘籍”,总有人比你知道得更多。
对待学习的态度?敏而好学,不耻下问。如果你开口,他们就会教你更多的东西。从别人那里寻找和接受新的知识,特别是那些你认为不太需要的知识。
- Don't rewrite code without consultation.
不要在没有讨论的情况下重写代码。
对待代码的态度?“修复代码”与“重写代码”是有明显的区别的。了解这些区别,并且在代码审查的制度下做风格上的调整,不要独断专行。
- Treat people who know less than you with respect, deference, and patience.
尊重比你懂得少的人,并对他们抱以耐心。
这是对待同行的第二个态度吗?与技术人员打交道的非技术人员认为技术人员要么是妄自尊大的讨厌鬼,要么是爱撂挑子的倔驴。所以,我们不要用我们的愤怒和不耐烦去加深他们对我们的这种印象。
- The only constant in the world is change.
这个世界唯一不变的就是变化。
对待环境的态度? 敞开胸怀,面带微笑地去拥抱变化。把每一个需求变更、平台变更或工具变更都看成是一个新的挑战,而不是令人厌恶的麻烦。
- The only true authority stems from knowledge, not from position.
真正的权威来自知识,而不是职位。
对待知识的态度?知识造就权威,权威带来尊敬——所以,如果你想要在一个无我的环境里得到尊重,那么充实你的知识吧!
- Fight for what you believe, but gracefully accept defeat.
坚定你的立场,优雅地接受挑战。
对待思考结果的态度?要知道,你的想法有时候会遭到反对。就算最后证明你是对的,也不要总是试图报复,不要总是叫嚷着“我早就说过”。千万不要让你心爱的被抛弃的想法变成殉道者或抱怨素材。
- Don't be "the guy in the room“.
不要成为“角落里的程序员”。
这是对待沟通的态度么?不要躲在角落里写代码,就算偶尔露个面,也只是为了买一杯咖啡。藏在角落的里程序员短视、与世隔绝、不受控制。这样的人在公开的、合作的工作环境中可能发不出声音。
- Critique code instead of people – be kind to the coder, not to the code.
批评代码,而不是人。
这是对待代码的态度?对人友善,但不要对代码友善。让你所有的评审为代码带来积极的改进,把你的评审与局部标准、程序规范和更好的性能结合在一起。
因为指出了我们的工作态度,这些关于人们编程活动的原则永不过时。《程序开发心理学》写于1971年,老曹在那一年刚刚出生。虽然已经过去了几十年,但这些原则并没有被时间侵蚀,程序员普遍很强的自尊心也没有被侵蚀。
程序员普遍很自我(ego),专家们也都好为人师。在有部门边界的大型组织中,或者是层级结构的小型组织中,技术人员在讨论问题时,往往包含了自己的价值取向,利益选择。也就是屁股决定了脑袋。
把自我价值观从本职工作中分离出来是很重要的!
你的工作不代表你。你的价值不在于你银行里有多少钱,也不在于你穿什么鞋,或者你钱包里的任何证件。电影《搏击俱乐部》(Fight Club)里的几句台词
如果你的工作不代表你,接受别人对你工作的批评就要容易得多了!
遗憾的是,对工作不敬业的人在这个世界上随处可见。而对于这些热爱编程、并且已经成为行家里手的人来说,我们有走向另一个极端的趋势——我们太在乎了:
在程序开发的早期岁月里,程序被认为是程序员的私有财产。一个人不会去读他的同事的程序,就像他不会在未经许可的情况下去读别人的情书。从本质上来说,程序就是程序员写给机器的情书,里面充满了只有当事人才知道的私密信息。于是,程序里充斥着宠物的名字,还有情人之间的昵称——他们活在幸福的二人世界里,眼里只有对方。这种程序对于局外人来说,简直不知所云。