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

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

心理学空间2z(g'M0bdL0q

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

\ blDy0 心理学空间9QW"}5I(P4V

你们认为编程的首要原则是什么?

T${X}~#n0z0

HfYv0F-Q `:`'r+v VS0作为我的学习原则的一个实践:important 心理学空间.A6IhtO |#@

Y9X |b1K6f!q$l"w08. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。心理学空间RC-fTyb_

GWYe[hR%l1fmR05个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:心理学空间t qh!^!D/?

V%F5p$dS_ f2u01. 获得最多认同的答案心理学空间 G2`eh Z-a+YI

w"M$l3V"Cn.^7a0KISS – Keep It Simple Stupid 心理学空间uW:]d)Tn

心理学空间[L4v1qX3HFk

DRY – Don’t Repeat Yourself 心理学空间"w*a0XeiDg

\q8H]%hm1dCW#Nz0一点不感到意外吧?

{m#TcXLna/oh)pH0 心理学空间'i&k@#w a z

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

心理学空间-S+N[Sr;|

2. 获得第二认同的答案

z0j(d4@.~ fp?0
心理学空间m%wAuF+n`

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

&N/] [c8}t"~ }+Q E4Q0

s@UF1?H+d4t0在这个答案后面有人添加到:心理学空间MJ0X+_1n L I7R

:OL{ D2e xf`0最好设想你的代码会被一个挥着斧头的精神病来维护。

d(\+_#p1Z(XS0

oW9CRP.Jvq0有人接着又YY道:心理学空间8a1o;Aq4W

心理学空间 hkz#t?c

而且这个挥着斧头的精神病还知道你住在哪儿。1心理学空间.`jNB l!p-i1J

%V j}#?9B|F0注:其实这个原则在设计API时也有用:心理学空间Tw?'M*L3v`ZF [

@;S`RG:U}ZI*^0写API时时刻设想你就是要去使用这坨API的人。

D{D"xr0

E@5onTC,[(Dn03. 一些众所不一定周知的答案心理学空间xBqiG dv

`y0W{ ^0先弄清你的问题是什么!心理学空间X3z L)MY$@+~~"f

[Esd2\8q b%]#S e0弄清问题永远是问题解决过程中的第一步和最重要的一步。

%UW$FLh0DVE0

|^s4{3A0代码只是工具,不是手段。心理学空间0wP_5ft l4K

@nZ r ^,o-@2y vT0不知道怎么最好地解决你手头的问题(注:需求、架构、算法,技术选型,etc..),写上一万坨代码也是浪费比特。心理学空间sq5b Dm8_Q1x3c ]

心理学空间wx[2{'h1K EG^

知道什么时候不该编码心理学空间#{@*iFbE.RN!?R

心理学空间TC![4n3|;G

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

0j:|.ok#|l/NL.N'c"L0

C1W @c_t(Z-C8t0永远不要假定你已经了解一切了!心理学空间,~EZY @8pPEz6t0Y

心理学空间x?(_@F+V

不作没有证据的推论。

{?Dz&n}0

/o0Pez p8l K3FZR0想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。心理学空间X#U4^5|.W uBkAs

心理学空间]_tTd GD:`Xf

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

dGw j%S/q}m4Mt0

!` D0u,W8wFP0越懒越好。

&w7Mk3jT_0

]_ks#n%rE0过早优化是一切罪恶的根源。心理学空间m~jBX {

心理学空间 {e3f7H8z%d#j#x

不要重新发明轮子。心理学空间'Un jh tt8G-H

心理学空间@*Zv7U3fK `o%@-v

测试通过前说什么“它可以工作”都是纯扯淡。心理学空间 a XNS"@4@I*k2`

j;@)so.Hr0了解你的工具。心理学空间S,uOb W g0`0J

G4W ?$Ex!yB(@0一切以用户需求为导向。

;L4S\7]m0 心理学空间_8F|5Kh

利用分治、抽象,解开子问题之间的耦合。

f@c*}:r LB:?u0
心理学空间1P5V(RR O2z}

5. 最幽默的答案心理学空间Qu H}%[ p

+JW&mJ+a W U0咖啡进,代码出。(Coffee in, Code out)2心理学空间7b ]vV;yB8A"eXN

$`{I.AB g:D Mn5aa` Z0最后,整个问题的 thread 在这里心理学空间kC%G\ w&t

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

 刘未鹏

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