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

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

pit0IHB ?d G8yp5B9\0半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:

:q|'ZKd6P0 心理学空间 gBZt*yeE ~ yV

你们认为编程的首要原则是什么? 心理学空间3Jnvp9o

$cX J3E0I#qv0作为我的学习原则的一个实践:important

h9]_U7U0
心理学空间x.O0G~p)d:W

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

{|L8B QW0

ibc5q:W!ND{7K05个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:心理学空间co W(C{

心理学空间;O^(KT!Z$B

1. 获得最多认同的答案

E S p8i4@i+RIH8M l0
心理学空间%U:A!c o.@&]_5u

KISS – Keep It Simple Stupid

|'wsQu$BF[0

s"O%S"i7WMP0DRY – Don’t Repeat Yourself

(kUyr3r,gS0

S0id6h-VF| l7r0一点不感到意外吧?

T}EA#c!T.k8\M r4R0 心理学空间.WM \)fCSkJH

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

!_\ a#D"h0 心理学空间#w!c-^#f9Oa7W

2. 获得第二认同的答案

r8d0|2B V0
心理学空间#Mgi/}4we[j9bLe

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

(@0e0LzT$H0

:e|4a"eZG1B$r0在这个答案后面有人添加到:心理学空间W)D,GM U"n AH

i2Gm k3B2c `s0最好设想你的代码会被一个挥着斧头的精神病来维护。心理学空间 ck(^h7K

心理学空间KTsr'Z6Q0D*B

有人接着又YY道:心理学空间6ny au$@Q

心理学空间OQ8GY_x ]!Z2OC5B

而且这个挥着斧头的精神病还知道你住在哪儿。1心理学空间{q bk)bY L^

心理学空间E2g1B t%@p+L8`7S

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

x X;`)P-[1A0
心理学空间+?W7J~f j&^

写API时时刻设想你就是要去使用这坨API的人。心理学空间%PxN(Vk7@

心理学空间f J hBH4\cj

3. 一些众所不一定周知的答案

n/n?N~b)m0
心理学空间;A:vk}%J_ T&R&x

先弄清你的问题是什么!

L3W;{:W)T|0

q#d*FQo N,I3v%^-f`6t0弄清问题永远是问题解决过程中的第一步和最重要的一步。

5S4~ v*bh Y0
心理学空间9a Gv e0Q

代码只是工具,不是手段。心理学空间*q q-O`"Q_c3y6z

心理学空间jf(pH @f

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

Cp&@5{6D j0

vq,kf`$c V g0知道什么时候不该编码心理学空间a"qx4[aL#s:A!T

心理学空间1l,Sm9v#A1ynd

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

心理学空间&bmy y-V0~ d|SD

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

+bX8I4q)zs0a u0
心理学空间8{uE5nj!V/S)y

不作没有证据的推论。

%aa tt@;?0J0

gw*bR Zf(Zj@ VI0想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。心理学空间;TXl9x6| x_5^

R.r#m/EH0bR?|.R-K04. 一些众所很可能周知的答案:

*q.^Id2bV(t-t a0

%m R-@M w~G0越懒越好。

q S S'BST8|#JH0

lI SM:S lR;n0过早优化是一切罪恶的根源。

(^y)a%Jnu*k+C0

$Q1B+dyb]`)WVU0不要重新发明轮子。

8TS'PG9}\0

Bt)kfq$[B/C_0测试通过前说什么“它可以工作”都是纯扯淡。

#n7y.vzHiq0 心理学空间7J@ \)^&\0\av

了解你的工具。心理学空间3{xq l2VU

心理学空间 h3{)yt+c N~w Z

一切以用户需求为导向。

-H3A!Q SnU*O/Fe0

!fv m'E0a Uu(z0利用分治、抽象,解开子问题之间的耦合。心理学空间x,@C;{0]+^nP

心理学空间2@s8iD3~'BI\

5. 最幽默的答案心理学空间B4jFs D/T6fEp

]7k2Q1N{ QO0咖啡进,代码出。(Coffee in, Code out)2

+E.y6zGR0

f0HS4kym^z0最后,整个问题的 thread 在这里

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

 刘未鹏

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