IT技术博客大学习 共学习 共进步

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

刘未鹏 | Mind Hacks 2009-10-10 15:00:06 浏览 3,504 次

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

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

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

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

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

    1. 获得最多认同的答案

    KISS - Keep It Simple Stupid

    DRY - Don’t Repeat Yourself

    一点不感到意外吧?

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

    2. 获得第二认同的答案

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

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

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

    有人接着又YY道:

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

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

    写API时时刻设想你就是要去使用这坨API的人。

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

    先弄清你的问题是什么!

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

    代码只是工具,不是手段。

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

    知道什么时候不该编码

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

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

    不作没有证据的推论。

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

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

    越懒越好。

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

    不要重新发明轮子。

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

    了解你的工具。

    一切以用户需求为导向。

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

    5. 最幽默的答案

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

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

Footnotes: 事实上后面有人指出这是 Martin Golding 的一句名言 参见 Garbage in, Garbage out.

建议继续学习

  1. 我是如何学习计算机编程的 (阅读 181,021)
  2. 面向“接口”编程和面向“实现”编程 (阅读 13,761)
  3. 我学编程时犯的最大两个错误 (阅读 7,862)
  4. 提高编程技能最有效的方法 (阅读 6,402)
  5. 函数式编程很难,这正是你要学习它的原因 (阅读 5,302)
  6. 如果你看不见你还能编程吗? (阅读 4,903)
  7. 那些曾伴我走过编程之路的软件 (阅读 4,763)
  8. 函数式编程 (阅读 4,585)
  9. 你从未听说过的一种编程方式 (阅读 4,302)
  10. 也谈编程改革 (阅读 4,241)