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

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

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

.G'k7j@wDoF0 心理学空间/qtA7m|8G.sK1PW:a\

你们认为编程的首要原则是什么? 心理学空间?.u+h&c2d7l

心理学空间%@x9@Mf!M [

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

6jf8r;~*k4? Pks0

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

R"I h3A#R'v t)`0

#\u.K F8aW[:cS05个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:心理学空间 |vv `+Ff

心理学空间4E`i.Cd4d!wP

1. 获得最多认同的答案心理学空间 Vrr Z4hl$L X

+W,},FU@^@0KISS – Keep It Simple Stupid

K*P&q+ate,K4J]4C0

;`SEf!r,Ij0DRY – Don’t Repeat Yourself

l%L/nM!wH)S3OsQ0

AU q|3h4j]1Nqw0一点不感到意外吧? 心理学空间zH"f/E\,J*gc)jm

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

心理学空间N J7hR j~9IE` e

2. 获得第二认同的答案

$LU/g L$le-t/I~3Y0

7?*mK.lM\wb n0写代码时时刻设想你就是将来要来维护这坨代码的人。 心理学空间|4`(\:Y e;{

心理学空间%D5Q's/Re6si&|U`

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

9~WRmQY0
心理学空间'WCM$h%T

最好设想你的代码会被一个挥着斧头的精神病来维护。

8LF?5U$qI_2E$x2L*E0

R4n PS}dD5L0有人接着又YY道:

i1U2Z9i-m0j+~5q LA+E0
心理学空间l$C|'` fzV

而且这个挥着斧头的精神病还知道你住在哪儿。1心理学空间~ w,wg8M#p(O"xd~

心理学空间1NaL}-J!^aK

注:其实这个原则在设计API时也有用:心理学空间(l'[-Yr ij;v(pyI+?

zDa"e#L0写API时时刻设想你就是要去使用这坨API的人。心理学空间Lr,U nO7b

心理学空间/w2bwM/l

3. 一些众所不一定周知的答案心理学空间 Bh?!Z iGJ,p

:ba#`Rh(b0先弄清你的问题是什么!心理学空间w/F)H`Gxr

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

6Y;Oe(JfAa0

4q _o(M:[T'h0代码只是工具,不是手段。

3l5m2q!} `4R Xz-i0

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

-J-nt]Y5ph]%a.h,f0
心理学空间F`'R^{

知道什么时候不该编码心理学空间+|K!Pr`6WGf7o4bB

心理学空间2J {u+L Ii

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

心理学空间&x#V;Q o6R5k

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

!j8V&x4}SgR@X;?8j0

%CY6`8Wa@(h!N/S0不作没有证据的推论。

U1{ NIwy0

#d:~[-y?,m@+u0想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。心理学空间_"ON#t&z,B(m vS7H

心理学空间0]8qckv`0y

4. 一些众所很可能周知的答案:心理学空间4T8g|V/D!l`

PF \R.\5At9E f _;w0越懒越好。

v.e\1N U0 心理学空间U$@+}6Xg.P

过早优化是一切罪恶的根源。心理学空间W9q&Q[{l}

J4zi7~+h n0不要重新发明轮子。

sxH%D0Rx"a0

pz9Rq ]LC:lq0测试通过前说什么“它可以工作”都是纯扯淡。心理学空间s4s:U.P0BL

心理学空间RsK ^^*d2]6pskHw

了解你的工具。

:b1OrC T$QNX0

CA'W8P I4H$~f2Y6KJ0一切以用户需求为导向。心理学空间N3Na%{/OO%M

心理学空间%D3?LM/] V4vg

利用分治、抽象,解开子问题之间的耦合。心理学空间q |2[-gz8maC&d

OC Bxda4p8x-D}05. 最幽默的答案心理学空间;x#r&v(I9mx

心理学空间f [mT@!p"x

咖啡进,代码出。(Coffee in, Code out)2心理学空间 oP#I.x1^

心理学空间4x9a8_!]W|

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

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

 刘未鹏

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