《代码大全2》读书笔记 Week2

《代码大全2》第四、五章

       第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率。作为一种表达工具,编程语言当然也会影响到使用者的思维,然而大多数重要的编程原则并不依赖与特定的语言,而是使用语言的方式。作者提倡“深入一种语言去编程”,当选择的语言缺乏构件或者其他问题时,我们不应该被语言的可行性束缚住,而是试着发明自己的编码约定、类库等去弥补它。2. 高质量的软件工程强调“架构的概念完整性”与其“底层实现”之间的关系,各个具体部件都能反映出架构的内涵。这要求我们,尤其是团队合作时要对变量名称、类名称、子程序名称、注释约定等底层细节有合理地统一规定,以避免程序充斥着不同的风格和随意的变化,从而程序员能够更好地关注本质问题。3.在技术浪潮前期与后期,编程的环境和难度是截然不同的,对此应该因时适宜地调整开发的策略。

        第五章“软件构建中的设计”内容非常丰富,值得仔细阅读。以下只对部分要点做分析概括。要理解设计的出发点和最终目标,不得不先理解软件的首要技术使命:管理复杂度。在书中,作者暗示复杂度来源于两种难题:偶然性与本质性难题。偶然性与事物的偶然、非本质属性关联,已经在编程语言和编程工具数十年的进化中得到了较好的解决。而本质性问题的求解进展则缓慢得多,本质性的困难来源于很多方面,概括来说是在复杂、无序的现实世界中精确而完整地识别出各种依赖关系并给出一套解决方案,而人们对现实世界中各种实体以及运行规律还未参透,这就增加了软件开发的本质性困难。 从管理复杂度这个首要使命出发,作者列出了一些理想的设计特性:最小的复杂度、易于维护、松散耦合、可扩展性、可重用性、高扇入、低扇出、可移植性、精简性、层次性等等。要实现以上设计特性,其中,层次化设计显得尤为重要。作者给出的基本层次是:软件系统 -> 子系统和包 -> 包中的类 -> 类中的数据和子程序 -> 子程序内部。接着作者花了大量篇幅介绍启发式的设计方法,其中最让我印象深刻的有两点,一是形成一致的抽象和信息隐藏概念。两者其实是相辅相成的,为层次化设计服务,而且他们展示了面向程序编程和面向对象编程的显著差别。分而治之——或者说模块化思想,在两种编程中都举足轻重,但面向过程侧重于,也许只能支持过程(具体来说函数)和自定义数据类型的封装,而面向对象编程在引入了类和对象的概念后将模块化思想进一步延伸,使得能够形成统一抽象的范围得到了扩大,比如说可反复使用的一整套操作在接口中定义,允许某些操作的事物定义为一个类,类之间还可以继承、多态。而信息隐藏是结构化程序设计与面向对象设计的基础之一,这个概念在实现类与类或子程序与子程序的松散耦合、提高扩展性等设计特性中都有非常大的价值。

posted @ 2018-03-21 13:37  Viarow  阅读(134)  评论(1编辑  收藏  举报