《代码大全2》读书笔记 Week2
《代码大全2》第四、五章
第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率。作为一种表达工具,编程语言当然也会影响到使用者的思维,然而大多数重要的编程原则并不依赖与特定的语言,而是使用语言的方式。作者提倡“深入一种语言去编程”,当选择的语言缺乏构件或者其他问题时,我们不应该被语言的可行性束缚住,而是试着发明自己的编码约定、类库等去弥补它。2. 高质量的软件工程强调“架构的概念完整性”与其“底层实现”之间的关系,各个具体部件都能反映出架构的内涵。这要求我们,尤其是团队合作时要对变量名称、类名称、子程序名称、注释约定等底层细节有合理地统一规定,以避免程序充斥着不同的风格和随意的变化,从而程序员能够更好地关注本质问题。3.在技术浪潮前期与后期,编程的环境和难度是截然不同的,对此应该因时适宜地调整开发的策略。
第五章“软件构建中的设计”内容非常丰富,值得仔细阅读。以下只对部分要点做分析概括。要理解设计的出发点和最终目标,不得不先理解软件的首要技术使命:管理复杂度。在书中,作者暗示复杂度来源于两种难题:偶然性与本质性难题。偶然性与事物的偶然、非本质属性关联,已经在编程语言和编程工具数十年的进化中得到了较好的解决。而本质性问题的求解进展则缓慢得多,本质性的困难来源于很多方面,概括来说是在复杂、无序的现实世界中精确而完整地识别出各种依赖关系并给出一套解决方案,而人们对现实世界中各种实体以及运行规律还未参透,这就增加了软件开发的本质性困难。 从管理复杂度这个首要使命出发,作者列出了一些理想的设计特性:最小的复杂度、易于维护、松散耦合、可扩展性、可重用性、高扇入、低扇出、可移植性、精简性、层次性等等。要实现以上设计特性,其中,层次化设计显得尤为重要。作者给出的基本层次是:软件系统 -> 子系统和包 -> 包中的类 -> 类中的数据和子程序 -> 子程序内部。接着作者花了大量篇幅介绍启发式的设计方法,其中最让我印象深刻的有两点,一是形成一致的抽象和信息隐藏概念。两者其实是相辅相成的,为层次化设计服务,而且他们展示了面向程序编程和面向对象编程的显著差别。分而治之——或者说模块化思想,在两种编程中都举足轻重,但面向过程侧重于,也许只能支持过程(具体来说函数)和自定义数据类型的封装,而面向对象编程在引入了类和对象的概念后将模块化思想进一步延伸,使得能够形成统一抽象的范围得到了扩大,比如说可反复使用的一整套操作在接口中定义,允许某些操作的事物定义为一个类,类之间还可以继承、多态。而信息隐藏是结构化程序设计与面向对象设计的基础之一,这个概念在实现类与类或子程序与子程序的松散耦合、提高扩展性等设计特性中都有非常大的价值。
《代码大全2》读书笔记 Week2的更多相关文章
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记1 - 基本的bash shell 命令
这本书买了好久了,除了刚到手的那几天翻看了一下以外,竟然到今天都没有看过.突然想要写一个shell脚本,发现什么也不会,是时候开始学习了,今天先把最简单的一章再看一遍顺便做一些笔记,明天继续后面的! ...
- 软工读书笔记 week2
<程序员修炼之道>这本书后面一部分则是更深入.更具体.更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发.以下是一些我感悟较深的点: ...
- 【代码大全2 学习笔记】ADT 抽象与封装
ADT abstract data type 抽象数据类型 要理解面向对象编程,就要先理解ADT这个概念.不懂ADT的程序员开发出来的类只是名义上的"类"而已--只是单纯的把一些相 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- 《Linux命令行与shell脚本编程大全》读书笔记
第一章:初识Linux 1.linux可划分为四个部分:内核.GNU工具.图形化桌面环境.应用程序 2.内核主要负责:系统内存管理.软件程序管理.硬件设备管理.文件系统管理 3.内核的系统内存管理,有 ...
- 《代码大全》阅读笔记-33-个人性格(personal character)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
随机推荐
- UML指南系列——用例图
可以用用例来描述正在开发的系统想要实现的行为,而不必说明这些行为如何实现. 结构良好的用例只表示系统或者子系统的基本行为,而且既不过于笼统也不过于详细.
- python基础【第七篇】
字典 列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强. 所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典. 字典(dict)是python中唯⼀的 ...
- bootstrap学习(四)表格
基础样式: 自适应沾满浏览器 <table class="table"> <tr> <th>序号</th> <th>姓名 ...
- ArcGis 创建含孔洞面要素AO C#
IGeometryCollection geometryCollection = new PolygonClass(); IPointCollection pointCollection_Exteri ...
- BUUCTF MISC ZIP
这道题有点烦,拿出来单独写先贴两张图,一会用 首先这题给了68个压缩包,每个压缩包里只有4bytes大小,于是可以想到是crc爆破,自己写的脚本总是被killed,犯懒找了个脚本 import zip ...
- Java创建线程后,调用start()方法和run()的区别
1) start方法: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一个线程,这时此 ...
- java随笔记录
JAVA的变量类型 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. public class Va ...
- thinkcmf链接多个数据库
1.打开/data/conf/config.php 'db1'=>[ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '', / ...
- Vue学习笔记【1】——什么是Vue.js
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于We ...
- Java/sql找出oracle数据库有空格的列
1.java方式 String table_sql = "select table_name from user_tables";//所有用户表 List<String> ...