2009年10月25日星期日

读书:梁肇新《编程高手箴言》

s2301239上个星期读了超级解霸的作者梁肇新的这本书。这本书行文亲切自然,国人写的书显然比国外的图书的中文版更具有“亲和性”。当然了,也许也会有很多人对文中的一些观点有不同的意见,但是不同的人一定会得到不同的启发,绝对值得一读。带着自己的思考和结合自身编程的实践经验去阅读这本书也许可以得到更多的收获。这里谈谈我从中得到的一点启发。
曾经参与一个项目开发经过多次失败,最后才发现对于实际应用软件项目,最适合的方法就是类似“实现核心-->增强功能-->测试”这样一个过程。强烈赞同书中的观点:
“我们不可能一开始就把所有的细节都考虑清楚,通常,开始只需要一个基本的框架,也就是核心的核心。如果这个核心都实现不了,即使再进行下去,整个项目也都是多余的,只是浪费时间而已。所以,一开始就要解决最核心的问题。当最核心的问题解决之后,就可以进行第二阶段。我们把软件开发分为设计规划阶段,功能设计阶段,测试阶段。所有的产品都可以划分为这三个阶段。事实上,如果最核心部分实现了,那么依赖于此核心,再实现增强一点功能就是第二阶段。第二阶段完成后,就可以进行第三阶段。”
还有例如书中谈到的关于界面和接口的“箴言”:
“界面是界面部分,接口是独立的一块。接口部分就是程序的实现内核,通常先用Console方法直接地实现程序,这样更便于分离界面和内核。如果开始就用Windows的界面去实现内核部分,这样就可能会把界面和内核混在一起,无法分开。所以,一开始做程序时,就不要考虑界面是什么样子。”
“接口的目的就是把外部条件和内部条件分离开来。外部条件由别的程序提供,别人可以用。做接口最好的方法,就是直接用Console程序先实现程序的主体,然后从中提炼出接口来。这样做提炼会简单明了。如果用可视界面先实现了程序的功能后再去提炼,就会比较困难,因为这样就会把界面和功能实现混在一起,很难区分。”
看完后深有体会,我在做一些应用软件项目时总是把界面和功能实现混在一起,的确会造成维护,修改,甚至是阅读的很大困难,程序结构也会不够简单明了。
我总是太过局限于“软件工程的思维框架”中,常常在抽象化的时候,总是想要把所有的事情都想全了,常常做一个巨大无比的对象,这本书对此也提出一些让人有所反思的观点,例如:
“做对象化时还有一条准则,既对不同的应用去设计程序,而不是针对一种所谓的虚拟模型去设计一个对象。所谓的抽象化,就是想着将来有可能会用的某个功能。这样设计出的软件又庞大又耗时,运行也很慢。这就是杀鸡取卵(教科书会教你这种方法)。”
“杀鸡取卵就是指设计的软件提供了很多的功能,其实用到的功能只是那么一丁点。可能做了一个巨大无比的对象,但是只用到对象的很小的一些功能而已。因为做抽象化的时候,要把所有的事情都想全了,但是这是不现实的,实际上也是没有必要的,且是浪费的。如果凡是思考问题都是为了将来的大而全,这样出错的可能性也会成倍的提高。一般来说,代码越大,出错的地方也就越大,如果代码越小,出错的地方也就越小。将功能模块做成API函数与做出对象就不一样,做成一个对象时,该模块出错的机会就多一些,因为对象还有一个动态的过程,但做成一个函数时,调用函数就可以了,模块出错的机会就会比较小。所以,程序越简单,越不容易出错。”
书中的“程序主干和分支”的概念,也令人很有启发:
“核心就是整个系统中最重要,最基础,最简单的部分。首先要把程序的核心提炼出来,在给它添加附加的部分,它就能成为一个完整的软件。主干是最核心的核心,其后在添加的其他的部分就是枝叶了。”
“编程就是要保证核心的核心不出错,那剩下的枝叶都是一层一层地构建出来的。”
读《编程高手箴言》,也是自己编程思想,习惯等等的一个“自审”的过程。你一定可以找到适合自己需要的“箴言”,用它去提高自己吧。

没有评论: