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

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

vr-TK0\(S,n;nv0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:

9Rg.HH)c0 心理学空间$b!h3k9Q+Zsi/iun

你们认为编程的首要原则是什么? 心理学空间%dm Ls@l LX7GK

心理学空间t:u1vsSL2v

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

}:t }'kUGMV0

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

|U;FB+FM+U"b0
心理学空间imW:z]3tun

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

S`#xJkZI.E*[0 心理学空间2dzfh5NrW

1. 获得最多认同的答案心理学空间2IhB |\+ogM

心理学空间@"[2e b mCC5`j

KISS – Keep It Simple Stupid 心理学空间f|UQ kRW%X

Zn!m?7}`a^0DRY – Don’t Repeat Yourself 心理学空间 U+`d,^G

心理学空间4HSe(RH L

一点不感到意外吧?

#qh;f)m g5q0

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

Q&H,m2Z2C&U'^ ko0 心理学空间#^9f:u;\W-~}G

2. 获得第二认同的答案

XI n2a5T;g0
心理学空间ng4hH#L0b7Sl

写代码时时刻设想你就是将来要来维护这坨代码的人。 心理学空间3F,_v{.GXo3_?~

9uWQ!p7Z9h,D0在这个答案后面有人添加到:心理学空间JdF(O PTq+?Le7hq

F TQm!MV%MT0最好设想你的代码会被一个挥着斧头的精神病来维护。

.Cx'r.gY0

'uJHW2K@7c0有人接着又YY道:

B+[7F'l es0
心理学空间:r4W q}!T

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

T,_R8K8h m+v q0

.A-Z5H1I6H-l-}5i F0注:其实这个原则在设计API时也有用:心理学空间7DM+F7qg_ p#ZzM

@(CaR%r0写API时时刻设想你就是要去使用这坨API的人。

Hdw5mQDK#^0

.a6^LN[0?v03. 一些众所不一定周知的答案心理学空间1O(X#@%t$^i4U

心理学空间Xc rS3J KI

先弄清你的问题是什么!

5Fng|2o0
心理学空间5@ j:zrz$Bm9i

弄清问题永远是问题解决过程中的第一步和最重要的一步。心理学空间;~7ht tb0]9J7z

心理学空间l6r2r2o%v ?

代码只是工具,不是手段。心理学空间-}P J4oE}G

6j+_ N}"D'a thi+I0不知道怎么最好地解决你手头的问题(注:需求、架构、算法,技术选型,etc..),写上一万坨代码也是浪费比特。心理学空间H9Oj_+q.S5akd

v P-Ut/D/qw,IG}0知道什么时候不该编码

'on)d.H3gG$_!x^.n!qz0
心理学空间}:m%@6R0TeU

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

心理学空间^ qWyD7iYb N RP

永远不要假定你已经了解一切了!

%]0Hq Q#R'MK0

x:? HIHWFHd c0不作没有证据的推论。心理学空间J[ Z5Zq/?#Q2Y

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

i*@,vw_/j&w-EcG[&nc0

6CR1p+kv qC%r?)R5{04. 一些众所很可能周知的答案:心理学空间#{.Mr}D

0[ TY,u&a_V.K0越懒越好。心理学空间EAx*W;H+b/A

心理学空间"C O8m`M;HTu

过早优化是一切罪恶的根源。心理学空间0NC\}`b4ue

心理学空间9OW*C[d

不要重新发明轮子。

?oP k%?0

sL.qG5|pzH0测试通过前说什么“它可以工作”都是纯扯淡。心理学空间7MHX7E4lrY

pKCg+y WF!{.c0了解你的工具。

.mtysg'q0 心理学空间%t+]bXH

一切以用户需求为导向。心理学空间4F i!b/CQ

心理学空间!|~li7@U

利用分治、抽象,解开子问题之间的耦合。心理学空间/ae`5B%W%F

v^ @d'u$[q05. 最幽默的答案心理学空间3O#} Y}(L xVu r4T)_m

心理学空间@&i qgZh,MF1|!Q8x

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

)@8@^j*p"v O%L-l:h0
心理学空间/a'IPtR

最后,整个问题的 thread 在这里心理学空间KmG NR7r*DRH

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

 刘未鹏

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