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

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

心理学空间v-XT9F3|vz%y3`0[D

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

E)M+W#X.h6]'Tk'H0

Y6C:aaY cg0你们认为编程的首要原则是什么? 心理学空间;tFr \4E\+mAA$Ai)^

d$J(rUAB Qq0作为我的学习原则的一个实践:important

nVnuV%r3d TJ0

J)Li4oZ A x08. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。心理学空间f*^uv:@a#a

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

W l6w8AS0

&te'e%r+ln*hKl3K7G9{01. 获得最多认同的答案

-@ ?5pT^BLP0

y$ngsQ0KISS – Keep It Simple Stupid

;AIMK{,DEK0

TP I0r`3Yt(z0DRY – Don’t Repeat Yourself 心理学空间 A7O&l1o/E@6_

\;U#\,is;@([9zhe0一点不感到意外吧?

Z3^)yA%J(z2T [0

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

(^ Fr zv"@0 心理学空间Twl~:pq4V~\}

2. 获得第二认同的答案心理学空间'l#``Lx;M;k&S

QdK0E7U,|+w8d3v,A0写代码时时刻设想你就是将来要来维护这坨代码的人。 心理学空间*E:F2ICvr5v

心理学空间1T+CNh P&dw)k yA

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

N+e(po9q6Ph^0

%Faj` ]-c*S0最好设想你的代码会被一个挥着斧头的精神病来维护。

X3g nk0WFOk,B2}0
心理学空间"Y9nJEc3kp$|

有人接着又YY道:

?@9P?!M5u0
心理学空间 TML6{6M} ?.|N7KT

而且这个挥着斧头的精神病还知道你住在哪儿。1心理学空间P@j.WnHM

Azn,^&C5nU/}0注:其实这个原则在设计API时也有用:

G_d#v]-L0
心理学空间#R,M4Y,ric)RcE?}

写API时时刻设想你就是要去使用这坨API的人。心理学空间 \ z4z*fI5l&p4u4A

心理学空间e"S3Jz"oP5V+?r

3. 一些众所不一定周知的答案心理学空间|0m9z.D8V

ME\+h:i rU0先弄清你的问题是什么!心理学空间hw7V k+nRH'Ih

心理学空间rW}2f)AZ0Xq!_

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

B,xV!t4J9ix0

2F/TX)K^5C4b5K ^0代码只是工具,不是手段。心理学空间SD%Fy8v G'd/V m{:Gu

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

/| \H|#}S-[` r_0
心理学空间k'u7z/bBT m

知道什么时候不该编码

p1?.OImQ'o b |0
心理学空间 GN:?Xp@x \0@

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

心理学空间b/r'F3NsN:f

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

1q|c \ I J0
心理学空间 |Ez/@C[9lL

不作没有证据的推论。心理学空间9_5WZL!S/c AK

心理学空间6wu&lZg dT

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

*x2q;{6P-A0
心理学空间L;W^g6_'Aq J

4. 一些众所很可能周知的答案:心理学空间b)q8j2G%l3X2bw0f

心理学空间yR \"M[+z!H

越懒越好。心理学空间2Zbp/@g6RZc3l

心理学空间.FC C^/V8pg3u

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

0B:}#k5GQ7N-Z f jFt(W5d0

!_6f ? L'jlxw`2|9t0不要重新发明轮子。

\y&a }$e N&f0 心理学空间KO-S s0`-me,V

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

'[8U'B:b9MH&G0

*r3}kX\|gP2[0了解你的工具。

%r5S v0w,k0 心理学空间t5@1fw-~\

一切以用户需求为导向。

-Ks j?q K&D^1U:q0 心理学空间N;a7z6g:Ld

利用分治、抽象,解开子问题之间的耦合。心理学空间{L4gb4y.ciX-?

zYr],G*_`05. 最幽默的答案

N0^;S0? m}0

mW/p:N1Pws0咖啡进,代码出。(Coffee in, Code out)2心理学空间WB{*B+ck

ABt*x"Hx0最后,整个问题的 thread 在这里

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

 刘未鹏

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