Sense of Progress

第一次听到这个词是读斯坦福大学的犹太数学家George Polya的《如何解题》(强烈推荐)。书中提到,猎人会根据一些特征来追踪猎物,比如:一个星期的屎,顺着一个星期的屎,去找三天的屎。同样的道理哥伦布判断离陆地不远的依据是看天上的飞鸟数量,查看水面上的漂浮物,比如树枝。这一系列标志物其实意味着里目标越来越近了,给我们一种在沿着向目标的正确方向前进。

Sense of Progress对于数学家来说是否重要,因为数学题目往往十分困难,不可能一蹴而就,所以更加切实的、可靠方法是通过一系列的简化,将大问题切分出子问题,从最简单的部分开始。与此同时,Sense of Progress的好处是逐步获得信心。

Sense of Progress其实就是小步快走的策略,最关键的前提就是问题切分,即大问题切分出无数的、逐步递进的小问题。举一个例子,G2Rail正在对接意大利国家铁路的新API接口,这其实是很复杂的系统,考虑到意大利有几千个火车站、几千种不同的打折方式、几十种不同的车型、不同车型共有几百种不同的舱位。这背后意味着很多的排列组合。但是其实比较简单的问题其实只需要打穿从米兰到罗马的单人直达单程票就可以。直达车接通之后就可以拓展转车、往返、多人、折扣等更多种情况。

同样的道理,对于每天需要解决的问题,是否能够切分出几个小问题,然后持续提交?持续集成?当然其实每天工作的步幅要比上面米兰罗马的例子小得多。突然想起来2012年和吕国宁(Daniel)一起结对写Game of Life的视频,其实里面展示了细致。

不要只展示代码,展示如何演进代码

两个Daniel结对写 Game of Life – 2

两个Daniel结对写 Game of Life – 3

其实敏捷开发里面的TDD,实例化需求,数学里面的数学归纳法,岂不也是这个道理么?

Share