分而治之与步步为营

分而治之是简化问题的相当有效的方法了,blog里面也提到很多次。

 

比如最近做的一个defer shading,开始一下子把程序都写出来,结果发现把多件事情放到一起做,工作量大概是指数级的增加。

 

比如我把2块东西一块做,那么一旦出问题,我需要去查找的范围是一个问题的2倍,而且是2个问题,所以工作量大概是4倍。

 

而且人不是机器,疲劳和厌倦速度也不是线性的,不是说难度上一倍,我就多一倍时间可以做完,难度上去了就更容易疲倦,疲倦和挫折感让人更加缓慢,而且缺乏快乐的工作简直是对人生的巨大破坏。

 

这么算下来,合理的分而治之可以获得指数级以上的效率提高,工作单纯看一次解决一个问题,但是每次都比较轻松,成就感伴随着快乐像吸血光环一样,让人越战越猛。

 

所以基于问题的客观本质和解决问题的人的客观本质,合理的去分化问题实为解决问题的重要部分。

 

 

 

 

步步为营算是分而治之的一个进阶了。

 

开始看到敏捷开发所倡导的,适当设计,然后多次重构,在重构中进一步设计调整我感到很是不解。

 

现在看来,对于不太大的项目,我深表同意。

 

《unix编程艺术》中有提到,最好的就是程序员一下子就可以装到脑袋里的东西,简单造就了容易驾驭,就容易让其正确稳定和优化。

 

我理解适当设计就是根据个人的知识和对问题的认识做适当粒度的设计,具体深入的细节除非对高层模块有影响,否则就不要着手去碰。

 

然后一个个模块去实现,测试,整合。

 

接下来去回顾自己的设计,是否会进一步改进,是否会最合适。

 

这样经过一系列的迭代达到最好。

 

这样讲的根据基本上就是:

  • 适当的设计和实现粒度可以指数级的控制复杂度。
  • 开发者是人而不是机器,人的因素决定这样是更好的方法。

尽管适当设计和迭代开发导致有一些工作是会被返工的,但是每一步代价都很小,犯错误的代价也小。

而充分设计则让每一步代价都很大,最终结算下来我认为对于不太大的项目仍旧是适当设计,迭代开发最好。

 

另外一个就是,对于一些难的东西,我们没做过,就必须去探索式一步步走,因为不知道,所以没办法去很细节的设定怎么做,只能根据已有的东西来走下面的路。

 

步步为营的核心战斗力在于,我们总是想着明确的方向,基于现有的东西一步步去做,这里面首先就是一个分而治之的思想,其次除了低复杂度和符合人的规律外,

  • 我们是基于前面的东西去做,我们在一步步完成的过程中对问题了解更加透彻,更有能力去提高效率和质量,避免错误。
  • 我们从心理上会更加有安全感,踏实稳定的安全感。

 

 

最后就是一个粒度问题了,原则很简单,选择适合自己的粒度,高玩选大粒度,低玩小粒度。

 

 

 


原文链接: http://blog.csdn.net/ccanan/article/details/3794459

你可能感兴趣的:(分而治之与步步为营)