在最近一次Android程序开发过程中,我发现软件开发方法非常契合笛卡尔的方法论,而且处理大多数工程问题都可以依照这套方法论进行处理。
第一条是:凡是我没有明确地认识到的东西,我决不把它当成真的接受。
在开发中,我们经常碰到"子弹卡壳"的现象,比如某个API调用总是出错,某个功能不知道如何实现,或者程序中诡异异常(比如segmention fault)。遇到这样的问题时候,我们要做首先是怀疑程序里我们最吃不准的地方,比如第三方库,网络"狗"来的代码,首先聚焦这些地方。对自己怀疑和不清楚的问题,充分做好"情报工作"。情报工作包括,仔细阅读API文档,论坛的讨论文章(比如stackoverflow网站)。情报工作是任何工程或者学术工作的重要部分,需要经常补充学习,日新,日新,日日新。
第二条是:把我所审查的每一个难题按照可能和必要的程度分成若干部份,以便一一妥为解决。
即"拆解"问题,在做好充分的"情报工作"之后,一般都可以将复杂的问题分解为简单容易处理的子问题。如果发现子问题依旧是个困难问题,回到第一步,重新进行情报收集,将这个难的子问题进一步拆解。确保每个问题都是简单的how to问题。
第三条是:按次序进行我的思考,从最简单、最容易认识的对象开始,一点一点逐步上升,直到认识最复杂的对象;就连那些本来没有先后关系的东西,也给它们设定一个次序。
即一个个解决小问题,这些小问题的大都能在google第一页找到了,所以处理是简单的。对开发程序而言,面向原型开发非常重要,每次解决一个小问题就集成到这个原型里面,这个原型会一步步越来越强大。当所有小问题都搞定的时候,原型系统已经基本可以work的版本。这个时候需要进行所谓"重构",再一次审视系统,理清里面的数据流, 用户体体验流程等。"重构"完成之后,引入测试用例,准备第一个release版本