总结一下最近学习SICP的内容。
SICP教会我很多在设计大型系统时所需的方法和策略,让我深刻的了解如何控制系统的复杂度。
那么到底是如何控制大型系统的复杂度呢?引用SICP原文:“他们将基本元素组合起来,形成复合元素,从复合元素出发通过抽象形成更高一层的构件,并通过采取某种适当的关于系统结构的大尺度观点,保持系统的模块性。”
理解这句话非常简单,举例来说,我们在构造一个APP时,都知道基本元素其实就是按钮,文本,图片等等。我们用这些基本元素进行排列组合,形成各式各样的组件。我们还会对组件抽象成一些模板函数或者类,使我们能够更方便的创建丰富的组件。然后把各种组件拼接起来,形成一个个不同的界面,这些界面在产品角度上进行组合,最后形成用户模块,订单模块,消息模块等功能,最后拼接成完整的APP。几乎每个企业的产品都是如此设计和开发的,所以我们很了解如何进行模块化。
就如经验丰富的农民工们,不管开发商要建造什么样的大楼,在他们的眼里都是块砖,我们程序员眼里,不管什么行业什么领域的APP,其实也无非是一些代码砖而已。
我们能够跨行业写代码,不仅仅由于我们的经验达到了一定水平,更是因为上层设计者告诉我们,APP基本元素是按钮,文本,图片等等,而不是其他。他们还给我们设计了各种组合办法,以及抽象方法,使得我们能够在复杂的应用中不必方寸大乱。
我觉得SICP这句话看似很简单,但并不简单,其中的关键在于回答这几个问题:
- 什么是基本元素?
- 如何对基本元素进行组合?
- 如何进行抽象?
精读SICP之后就会发现,它的每个章节都是对这三个问题进行不同纬度的解读,使得我们对系统的设计有更深刻的理解。
在日常的工作中,我将试图在开发前思考这三个问题,并用这个答案去设计或重构系统,希望能对自己的认识有所提高吧。