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

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

j V y#|%g$Z4l4\S u0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:心理学空间/eZ r&U6xl"k(|0L/M X

心理学空间U]:k!j.Eh$Zw

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

}})uq]^$w0 心理学空间-i*v[+it'Z*s|T

作为我的学习原则的一个实践:important 心理学空间Z%~j v$H9F:w

yUU@ Si@]$T08. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。心理学空间&hq-{D,|(hN\D,d(ie

T~+pI5E/S S05个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:心理学空间:f6f$~%[g4M5T

心理学空间Gs!WoJsMPTDwU

1. 获得最多认同的答案

Ej2K)n#Jb'a Y0
心理学空间l0pd8O\4h$J&^*G

KISS – Keep It Simple Stupid

[2l1G0uBl tE0

\%g,M qIc0DRY – Don’t Repeat Yourself

y"j!I/HFc0
心理学空间1k)sB7m1Nt q

一点不感到意外吧? 心理学空间I/XQx"s%@A

心理学空间:qP|Xbg

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

x^g"e%qZ:E02. 获得第二认同的答案

H8c%PINT+D0?0
心理学空间-bD JO&Qo{|

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

(W%\(N qu8G3r0
心理学空间\U9yPSh&F%G2_

在这个答案后面有人添加到:

U kw|*H KFM-h0
心理学空间!~yl^ Gmb }3k

最好设想你的代码会被一个挥着斧头的精神病来维护。心理学空间K+jHBn-dy)W

心理学空间5I L^q?%Vw/N:g

有人接着又YY道:

P*NoJ/|0
心理学空间4Y%iO~-q.IF

而且这个挥着斧头的精神病还知道你住在哪儿。1

KO \E_q|;C$g0
心理学空间3Rm)YU0i8o6N

注:其实这个原则在设计API时也有用:心理学空间}*zQqaoG

LB6P r7n*e/ey0写API时时刻设想你就是要去使用这坨API的人。心理学空间bmtO_5U!O1K

Hs~.IU-W03. 一些众所不一定周知的答案

^'vIm[Y0

G]5h&t J|.bKpbI2{0先弄清你的问题是什么!

G(b\wwm(]E0
心理学空间2X-q*\](rZ7GK? V(z

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

6xF*Gb yCvn0
心理学空间/JD+?*U^

代码只是工具,不是手段。心理学空间1@}8K{;e,iT&p J

心理学空间2z NsJc.e rgFF&j

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

*{{3[dsYO-MAC0
心理学空间2F gP8d o,?c7A

知道什么时候不该编码心理学空间x+t*IA*PFSE2W

'm'D @Sa^%z0(类似条目:YAGNI——“你并不需要编写这坨代码!”,针对你的需求编码,“写你所需”,别做“聪明事”,为一个不确定的未来编码。同时也注意模块化设计,以便能在未来新增需求时无痛扩充系统)心理学空间zaY6L ]~_3u4Y*`;P,L-F

'e'NU{*nR4AB0永远不要假定你已经了解一切了!心理学空间(NCy-o@'C:U8]

心理学空间rgiX2\ [

不作没有证据的推论。

-N}R@M-R0
心理学空间$d0kR)g.G#q

想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。

w V5Hx2mC6C0

F []e)u!m#GA04. 一些众所很可能周知的答案:心理学空间P%DD D W1q#zV

心理学空间+Hg&X5V,Qug

越懒越好。

W g JyD;]s0 心理学空间,X}"dS;s&@7Q

过早优化是一切罪恶的根源。心理学空间&BI+x1P9E@ |5I?9P

:z,W o6J?Nu0不要重新发明轮子。心理学空间HtTCv+M([

心理学空间v {$Syl x

测试通过前说什么“它可以工作”都是纯扯淡。

'_r$u4Z1L-}0

(C.CWn7f#~ n0了解你的工具。

_5^.R5r(u Ty0

/q#Re)Ye(zFj0一切以用户需求为导向。心理学空间e_m5qPB

!@u3P"c(ak#Wx4l P4w0利用分治、抽象,解开子问题之间的耦合。心理学空间8otgSF$@8w

U'~^*v9J Q05. 最幽默的答案

"UKh%CT%r B K;en@0
心理学空间 Lj0W%E iI

咖啡进,代码出。(Coffee in, Code out)2

\[M vdZ GYws0

6jk(l'V*s#?\V0最后,整个问题的 thread 在这里

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

 刘未鹏

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