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

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

/b6AU'c'Q*G:r0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:

{%{\-S.|D0F y^0 心理学空间y_ V"T }TQ#I:u,s

你们认为编程的首要原则是什么? 心理学空间hL$aj\*m

心理学空间!C6ks rd7}7Vn

作为我的学习原则的一个实践:important 心理学空间G8mcKai1i

心理学空间4{!j{ K,R!P8R0DO

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

(P#s2FM:O-I~ F]/`?A0
心理学空间I"W.rr.~Se

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

/m4O:BD2YJ4}p/O0

0jeeH sZW6\q01. 获得最多认同的答案

"oV g+}Sm0
心理学空间m!XH^&U%Q&L7k"F(d

KISS – Keep It Simple Stupid

X"[%j!eSg_7G0 心理学空间 c9U+{RW*S1o%SlW

DRY – Don’t Repeat Yourself 心理学空间zXoK;fAg-s*S.S

心理学空间k8z6vGA4J&t'I9I3d

一点不感到意外吧?

$W1\%Ls%oVZ+[0 心理学空间K,qp N&rSq)C9LX

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

-@:?xB#FM02. 获得第二认同的答案心理学空间&Wa#iyA

心理学空间z|0Xw$K Q7o&A$Uc

写代码时时刻设想你就是将来要来维护这坨代码的人。 心理学空间 B V` _@}\

MR/b4ojl(_-T)W N:Z0在这个答案后面有人添加到:心理学空间J#?.kfM

心理学空间2y-r_maHza

最好设想你的代码会被一个挥着斧头的精神病来维护。心理学空间+v,p%DZ3qKaC

心理学空间5?z+S+DfHM |R

有人接着又YY道:

2NG4jg%K]!]0

Zm8_.e"yd@0而且这个挥着斧头的精神病还知道你住在哪儿。1

H;Zd'[| D5y0
心理学空间-vR IIy&n]x'g

注:其实这个原则在设计API时也有用:心理学空间N?AQQ+Bgc`

5K2Z/vpe-[c _(W0写API时时刻设想你就是要去使用这坨API的人。心理学空间UoU.LcN#a

7i] Oxv uj]1u03. 一些众所不一定周知的答案心理学空间 T-eYf t4?#@:b$V

心理学空间/VGH-sT$g CP usAs

先弄清你的问题是什么!心理学空间;pq E3on1\c*P

Vzw(Ni"L`"F0弄清问题永远是问题解决过程中的第一步和最重要的一步。

O/b/y W4j%ma8Z4x2\0

$zwNz Q!k i{I[0代码只是工具,不是手段。心理学空间v"W0~t"Zx-m,k

心理学空间 I2`9Al1dF

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

C/I7l3CZ*U9O.`0
心理学空间:ks{)`-w_

知道什么时候不该编码心理学空间k%D gU)lR

心理学空间4@+J0Y8}3F~

(类似条目:YAGNI——“你并不需要编写这坨代码!”,针对你的需求编码,“写你所需”,别做“聪明事”,为一个不确定的未来编码。同时也注意模块化设计,以便能在未来新增需求时无痛扩充系统)心理学空间5J?%tS9Y

N/[+A!V3QR0永远不要假定你已经了解一切了!心理学空间8c e3u!y*|2?

心理学空间`*HvKi.Hv8Ha,O&y?

不作没有证据的推论。心理学空间Xt{T)la$~To&E

心理学空间5Yc.hqQ4|$r6[Xc[

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

!Rb5Q$V;`-t&M1J0
心理学空间 Q8x O*o\3|s

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

t3z#Y4Qr-No0
心理学空间/lh]k(N2b:y.UA%n9l

越懒越好。

o8Oh,l9T:t:P+W0 心理学空间 y3V0pA h8ctOgJ9D

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

/C&OQlV0T0 心理学空间;H I;u'zPiG+p

不要重新发明轮子。

6B Z.V,{vc"z0

,GE6G$F/DZ^0测试通过前说什么“它可以工作”都是纯扯淡。心理学空间 h#v RZZ2G7tE

心理学空间"V"z\_)\

了解你的工具。

Qv[hW ]0 心理学空间0qn,s j]{ h*x

一切以用户需求为导向。

F)j/Q ilL-E.G0 心理学空间 Q+u*E[%Crh

利用分治、抽象,解开子问题之间的耦合。心理学空间#I}0y4qA"Xq

1p;{ aahFOSe05. 最幽默的答案心理学空间F9]~4X%AN]S

4p9?#iUQ0咖啡进,代码出。(Coffee in, Code out)2心理学空间'd _U._\'Oh1r'v

F H{4mEM{0最后,整个问题的 thread 在这里

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