« Freebsd 下 glx 的一点问题 | 返回首页 | 关于地表贴图 »

编程的首要原则

刘未鹏的 blog 上写了一篇 编程的首要原则(s)是什么? ,这段时间在我的 google reader 上被许多人分享。

我问自己,我目前的首要原则是什么?

其实想说的,那篇里都有人说了。如果非要说首要,我也认可最多人认可的:

KISS - Keep It Simple Stupid

不过对 DRY - Don’t Repeat Yourself 我反而认为是次要的,当然是在和 KISS 相冲突的时候。

如果换一句和 KISS 原则相当分量的话,我会说:不要用愚蠢的方法做事。很矛盾?Repeat Yourself 往往代表了一些愚蠢的方案,且并不 simple ,至少会付出更多的体力。我想,KISS 的最后一个 S 指的是大智若愚的愚,而自做聪明则是另一种愚蠢。

在 KISS 的大原则下,我想其实可以分出一些细节的东西,也是别人都提过的:

最近两年我对同事说的最多的几句话,“弄清你的问题是什么”,“你不一定需要解决这个问题” 。

因为什么都不做才是最简单的。要知道什么可以不做,必须了解你的问题。

面向对象以及复杂软件技术的滥用,或是找不到更 Simple 的方案解决问题(以性能、以需求等为借口去实现更复杂的方案)往往都是对需求了解不清,或者眼光太短。把手段当成了目的。(以为达到目的,必须采用某种手段,而如何应用这种手段就变成了目的)

同时,我觉得过度抽象也来源于对问题的认识不清。我还没想好后面要写什么,实现些什么,所以先利用“抽象” 把其它的部分搭起来。久而久之,不分析具体问题,先做抽象就变成了惯性。而抽象层本身往往是软件中最复杂的部分,离 KISS 原则最远的一块。

Comments

需求很重要,避免后期大改。

抽象隔离了事物的普遍联系。
在面向对象的世界中永远不会发生蝴蝶效应;但现实世界里总是会发生。

还没读过《你的灯亮着吗?》

看来应该去读一读 :D

“弄清你的问题是什么”,“你不一定需要解决这个问题” 。
记得都是在《你的灯亮着吗?》里面的。我因为看了《系统化思维导论》把清华出的温伯格的书的全部买下来了,就是买不到《你的灯亮着吗?》。后来找到pdf,发现这本书确实太强大了。我记得丁磊好像也推荐过这本书的说- -

对"..., stupid"这个句式是不是有点误解?这句话是比较糙的,相当于说“应该如何如何,猪头!”。

对"..., stupid"这个句式是不是有点误解?这句话是比较糙的,相当于说“应该如何如何,猪头!”。

“以为达到目的,必须采用某种手段,而如何应用这种手段就变成了目的”
太有道理了

有道理啊,,你的灯泡亮吗

另,真正可以大规模提高开发效率的方法只有两个字:标准!

编程的首要原则:
1 功能
2 资源
---
使用接口并不是为了抽象,而是可以先无需考虑资源的共享和利用问题,专注于将功能描述清楚。
---
实现类最重要的作用在于封装共享资源,将功能的粒度变大,使得在该粒度上的每个对象都可以认为自己是资源的独占者。

编码前先设计,设计前先搞懂需求。

例如
有人说:我做人有什么什么原则,也就是告诉你,在那个情况下,他是永远找不到借口或者台阶的。

KISS应该是Keep It Simple, Stupid的缩写,强调simple。Simple的方法倒未必是Stupid的,而且往往是Smart的:) 参见http://en.wikipedia.org/wiki/KISS_principle

因为软件研发的复杂度远远超过了人类的能力控制范围,“去想好后面要写什么”其实往往都是行不通的。使用抽象是延长软件生命周期的一种很有效的方法。
其实问题是出在,为了应对需求的变化,往往需要在抽象层做相应的调整。好的抽象和差的抽象之间的差别,就是好的抽象不仅简单、易懂、清晰,而且具有非常好的扩展性和应变性。
就好像,请一个架构师过来的目的不是希望他能做一套最完美的系统(因为是不存在的),而其希望他能在每次需求变更时都使用最少的成本去满足需求。

sf:)

感觉云风已经达到另一个高度了,已经不探讨一些具体的细节了,而喜欢探讨一些方法了:)

Post a comment

非这个主题相关的留言请到:留言本