《代码大全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)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
随机推荐
- docker内的服务无法获取用户真实IP
原文:blog.baohaipeng.top 背景:MySQL数据库和Redis运行在宿主机上(Linux),server运行在docker内,web运行在Nginx内(Nginx运行在docker内 ...
- PHP简单导出Excel表格
<?php header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; ...
- Oracle中删表遇到ORA-14452
删表的时候碰到表忙的情况,会报错. DROP TABLE TMP_TAB_T_AGENT * ERROR at line 1: ORA-14452: attempt to create, alter ...
- ORACLE PL、SQL编程
PL(Procedural Language)过程化的编程语言,是在SQL的基础上增加的部分,如:变量的使用.流程控制等, 重点学习Oracle和MySQL创建存储过程及流程控制的异同. 一.存储过程 ...
- Shell内置命令 eval
- su - 运行替换用户和组标识的shell
SYNOPSIS(总览) su [OPTION]... [-] [USER [ARG]...] DESCRIPTION(描述) 修改有效用户标识和组标识为USER的. -, -l, --login 使 ...
- AtCoder Grand Contest 001F Wide Swap
解法参考这位大佬的:https://www.cnblogs.com/BearChild/p/7895719.html 因为原来的数组不好做于是我们想反过来数组,根据交换条件:值相邻且位置差大于等于k, ...
- Python爬虫总结——常见的报错、问题及解决方案
在爬虫开发时,我们时常会遇到各种BUG各种问题,下面是我初步汇总的一些报错和解决方案. 在以后的学习中,如果遇到其他问题,我也会在这里进行更新. 各位如有什么补充,欢迎评论区留言~~~ 问题: IP被 ...
- git命令的基本使用
git init 创建仓库 git status 查看当前版本库的状态 git add filename 使用git add命令告诉git,把该文件添加到仓库 git commit -m 'c ...
- js 循环json
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...