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

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

B$Bp g-h4U[|`0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:

4l;] @b.V-K0 心理学空间?#] O)^ l!RZ\

你们认为编程的首要原则是什么?

8` ?yX1_#J h0 心理学空间p c Qk&n X

作为我的学习原则的一个实践:important

)uXo H$q)?Bq4p o0

'L E0k.D5LF)d`08. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

#W}k:E+t;? \'s#e0

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

i;u)o5S&ZC,M0

1s:K#T*@L6[01. 获得最多认同的答案心理学空间.O;^AG-cxA

心理学空间x8G-R;e'I4d;]!v

KISS – Keep It Simple Stupid

{R |2C2[t.K*o&uI h0 心理学空间4_&G(k;] t4n R!f En

DRY – Don’t Repeat Yourself 心理学空间O:]x\0[ Q#e

&s%wNb%Of \+l I*v+E0一点不感到意外吧? 心理学空间l+s-W [c@`t.w~-k

a0i[*Mv*W%U'g(G0注:DRY原则倒是比较好理解和实践的。但KISS原则则是看上去直白,其实实践起来不那么容易的一个原则,因为simple和stupid的定义并不是每个人、在每个场景下都是一致且明显的,一个人的simple可能是另一个人的stupid,一个人的stupid可能是另一个人的unnecessary。一旦一个标准取决于具体场景,事情就不那么简单了。所以我们经常要说“It depends”。 心理学空间E'TFP!|3U"fp D

心理学空间+`;M^)o ^G E

2. 获得第二认同的答案心理学空间y.u-u V2Z,G)V

心理学空间0W}xV6Ur'Fw

写代码时时刻设想你就是将来要来维护这坨代码的人。

$FX3^2{"N b%Z0

~ahzR/zj0在这个答案后面有人添加到:

DUD7UJ!?0

E}w0G"Yrj0最好设想你的代码会被一个挥着斧头的精神病来维护。心理学空间7vBv%Gli

心理学空间W6FP:M8Rs'o

有人接着又YY道:

4ZT X(AW"@I0
心理学空间!m ` ~V-U*Rb#q p?

而且这个挥着斧头的精神病还知道你住在哪儿。1心理学空间?&W-Z?w H]qy

心理学空间jJ3T9c7[tqu

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

?vj.pt!G'j4p8X/Q*V0
心理学空间hA3w s3@@L

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

)RH:v"I,W2P|Z W:aS#b0
心理学空间Z'GLn.K)twd9p

3. 一些众所不一定周知的答案心理学空间+\\(YJJ:ku8G

?m~rF,I9Z4FN0先弄清你的问题是什么!

'J8OC,Be0
心理学空间i ^9cS-Z%@m/k

弄清问题永远是问题解决过程中的第一步和最重要的一步。

@HQ?0J^0
心理学空间e't:j"[n4ys

代码只是工具,不是手段。心理学空间4~ JXTr9\

心理学空间B2n~$Wiw]!{s

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

6b9^?$FH z0
心理学空间f ]I^A/vqZQ6N

知道什么时候不该编码

@?i D6@U-p0f!OD;r0

-HV'k QKk*`P x0i3Q0(类似条目:YAGNI——“你并不需要编写这坨代码!”,针对你的需求编码,“写你所需”,别做“聪明事”,为一个不确定的未来编码。同时也注意模块化设计,以便能在未来新增需求时无痛扩充系统)

e6DQqa M0
心理学空间1CuVM;V8@+g

永远不要假定你已经了解一切了!心理学空间H5@K7A+k

心理学空间%D3CCtI hZ5g

不作没有证据的推论。心理学空间es!n ]w-L ~^d

CnV:C!v0想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。心理学空间)\bF*dO6`-I@'j

心理学空间*K#g4g\@~KD

4. 一些众所很可能周知的答案:

a~5@)H7l0

6c%o+l$T7P/v0越懒越好。心理学空间U4M,r l:LL"_ H

心理学空间fv? Kl

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

!I7\2KY_YR/W-i0 心理学空间/H/e D0pg2IMNB

不要重新发明轮子。心理学空间[-x`9r5A3Ug

!r0Y \"s ]0测试通过前说什么“它可以工作”都是纯扯淡。

yj&B ]/g-_z;b+@7`0 心理学空间'hBkh#Q"d'BeR+Z4ij%q

了解你的工具。心理学空间LmVZY0TcO

"r |u!um+H0一切以用户需求为导向。心理学空间K:z*X7Ab wsw+E

心理学空间0l _c JtmDo

利用分治、抽象,解开子问题之间的耦合。心理学空间8W*g%G E|| V

_"CB xqWx05. 最幽默的答案心理学空间 x3b!f!aP-W-}

心理学空间K0H2G2^&T Z5~5a

咖啡进,代码出。(Coffee in, Code out)2心理学空间l+u*L0jE

心理学空间 y!o#RD:C

最后,整个问题的 thread 在这里心理学空间 F(@5n5}5C7A&P C*N+?M

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

 刘未鹏

兴趣: 人工智能、机器学习、认知科学、神经科学、心理学、数学
刘未鹏 | MIND HACKS 思维改变生活http://mindhacks.cn/