编程的首要原则(s)是什么?
作者: 刘未鹏 / 2838次阅读 时间: 2009年3月09日
来源: 刘未鹏 | MIND HACKS
www.psychspace.com心理学空间网

编程的首要原则(s)是什么?

!ufnJyw._v:`0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:心理学空间 gN s2CPe7e

心理学空间,K'Q RD%m3D.E6a@)J

你们认为编程的首要原则是什么? 心理学空间twWE2L~"s+U

z+W cSE0作为我的学习原则的一个实践:important 心理学空间9r:o&fb6~6t6_

Wu/D+{6p}x l%vr9Y08. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

XO(V:b$J&CA0
心理学空间R'qm;e aj

5个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:

/s bM6?)W0g0

&vC Ye:^ql01. 获得最多认同的答案心理学空间f0JCKGh { ]z

心理学空间C \kmj E;L8k

KISS – Keep It Simple Stupid 心理学空间U](~@r;uLO ?6?

心理学空间2o9y2HHM6DFZ/BLK

DRY – Don’t Repeat Yourself 心理学空间xcfP ?SOOu8`

心理学空间2o!o @({/[ L3y6V_L

一点不感到意外吧? 心理学空间[7OZ U;qtt

F_b [.?V)l%d-\0注:DRY原则倒是比较好理解和实践的。但KISS原则则是看上去直白,其实实践起来不那么容易的一个原则,因为simple和stupid的定义并不是每个人、在每个场景下都是一致且明显的,一个人的simple可能是另一个人的stupid,一个人的stupid可能是另一个人的unnecessary。一旦一个标准取决于具体场景,事情就不那么简单了。所以我们经常要说“It depends”。

"CS8edp'X'x6u1v0

;y\ RF bl5W%t K8C02. 获得第二认同的答案心理学空间5[;J/WC [%_I

9~3N2Ps E6Ll,G&]0写代码时时刻设想你就是将来要来维护这坨代码的人。

Q2{"hH&Stb0

)G*^2zq3jm4e K0在这个答案后面有人添加到:心理学空间~.Q2y$?'u$n)y

h&p4U R1AY*p*|!k0最好设想你的代码会被一个挥着斧头的精神病来维护。

:z0dn&G9J)Y @'?2k9C0
心理学空间 R&{zDS`

有人接着又YY道:

bVmxM0

j"jjB#S W'`0而且这个挥着斧头的精神病还知道你住在哪儿。1

nLU8U,Q0H o'jp0
心理学空间y0S+pY]`M

注:其实这个原则在设计API时也有用:

)Hl/~.f @9^:M}{1v,V0
心理学空间c G;i5{&zy6iv-_L ^,A

写API时时刻设想你就是要去使用这坨API的人。

0}_2t F[|r Z0
心理学空间\lRt;\

3. 一些众所不一定周知的答案心理学空间)f3E _'A FE+]3I y

心理学空间&r#zF+xRV g

先弄清你的问题是什么!

}1bXXIFWf0

,MpYQ p;T0弄清问题永远是问题解决过程中的第一步和最重要的一步。心理学空间:]TJZ8LBY#kxV

心理学空间6z9jxs/pc\s

代码只是工具,不是手段。心理学空间"T&@ E"b }r"t

心理学空间KwDd#W"H%iH

不知道怎么最好地解决你手头的问题(注:需求、架构、算法,技术选型,etc..),写上一万坨代码也是浪费比特。

]1N/m@yjjS0

5@T:a4R6T#^#N+o0知道什么时候不该编码

T:k t X+W'^-a0h6V(a0

_}ADe*Ru0(类似条目:YAGNI——“你并不需要编写这坨代码!”,针对你的需求编码,“写你所需”,别做“聪明事”,为一个不确定的未来编码。同时也注意模块化设计,以便能在未来新增需求时无痛扩充系统)心理学空间+U/}4@#Uf UJ(v#H

心理学空间,P@(j5UDY T

永远不要假定你已经了解一切了!心理学空间y#NK ng ]-Iu

心理学空间 f!??d;mx1w

不作没有证据的推论。心理学空间 F l#jV'X`3W

心理学空间Ef Yeac

想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。心理学空间#p6HH:{8[:Xk8f-~

*v+Ff9JB4jN04. 一些众所很可能周知的答案:心理学空间r ["rq,Jy4~ l

*i"n5f'V6Mg0越懒越好。

-n9|8Cf T#U0 心理学空间^ C6ca.w1C+Yq*k

过早优化是一切罪恶的根源。

Pn.J3U+c~gH0

D.G i%V'[1aq{0不要重新发明轮子。

X|Y"|#^CaH"C8J RH0

v\G%n\kO/jD0测试通过前说什么“它可以工作”都是纯扯淡。

vor!p Bt8s4C]0

3J `W|#hN R;J*OR0了解你的工具。心理学空间!eCO#[8Wu

心理学空间7KCdS(^+IG

一切以用户需求为导向。心理学空间"H`~M/e C0P2e

心理学空间 |!d"}r)j J&? Y

利用分治、抽象,解开子问题之间的耦合。心理学空间:t3Ia]Le3MK"K

VY q$wsa!H05. 最幽默的答案心理学空间`.q&pM*k7Ju

)d d0j+s{cw.W j0咖啡进,代码出。(Coffee in, Code out)2

z)G%Zf1X/|0

)S1hW,s3P | Qn h$S0最后,整个问题的 thread 在这里心理学空间_qgThW7{;f"I,]L

Footnotes:
  1. 事实上后面有人指出这是 Martin Golding 的一句名言 []
  2. 参见 Garbage in, Garbage out. []
www.psychspace.com心理学空间网
«[BetterExplained]为什么你应该(从现在开始就)写博客 刘未鹏
《刘未鹏》
逃出你的肖申克(二):仁者见仁智者见智?从视觉错觉到偏见»