《代码大全2》读书笔记 week 7
博主终于继续更《代码大全2》了 (*´・ω・`)⊃,课上老师一再强调读书笔记要写出自己的心得不能简单摘抄,所以我现在基本上只会写一下自己在阅读过程中印象深刻或者有发散思考的地方,字数可能会明显减少。其实之前按原文大段摘抄是考虑到也许真的有一些没办法看到原著的读者......
本周我阅读了第九章“伪代码编程过程”和第十章“使用变量的一般事项”。第九章主要介绍了伪代码编程过程(Pseudocode Programming Process, PPP)如何减少设计和编写文档的工作量,以及提高这两项工作的质量,而第十章从变量的定义、初始化、引用、作用域、生命周期各个方面阐述了使用变量的一般注意事项。
我自己再正式编程之前习惯在纸上写下总体思路 ,对于一些起到关键作用或者算法比较复杂的子程序或类,写下构思的过程中不知不觉就会使用程序语言,待停笔,纸上已经是满满一页代码。一方面这种做法完美跳过了伪代码的步骤,另外,将纸上的代码转移到电脑上可能引入新的错误,而且很多情况下浪费了时间。书中作者所推崇的伪代码编程过程,是用类似自然语言(比如中文、英语)的语句来精确描述特定的操作,而且要避免使用目标编程语言中的语法元素。根据我的了解,我身边的很多同学也并不喜欢撰写伪码,甚至以能迅速上手编程为豪。阅读了这一章后我确实意识到了编写伪码的诸多好处,虽然在实践过程中无法做到书中作者所要求的所有步骤,但从中吸取经验是必要的。根据书中内容,我总结了编写伪码的一些优点:
1.从本意的层面——比代码更高的层次、更自然的层次上去设计类或子程序,可以让开发者更迅速并相对准确地表述出自己的思路
2.对各种编程语言通用,具有良好的可移植性
3.让高层设计的错误更明显,检查细节上的设计时不用读源代码,减少了评审工作的复杂度
4.伪代码的许多部分可以作为注释和文档中的语句
5.减少做出变更的代价(对于复杂的的工程,一句伪代码的改变可能涉及到源代码中的许多地方)
6.可以在伪代码中实验各种方案、想法,毕竟真正开始编程后就会对自己的代码产生情感,推倒从来是一个巨大的心理挑战
第十章所提到的诸多变量使用上的规则,我们从刚开始学编程就已经有所耳闻,实践过程中也在走过大大小小的坎后对这些规则有了更深刻的体会。书中作者将这些使用规则提升到理论层面,为我们详细地论证了它们的重要性。以下只列举若干我印象比较深刻的知识要点:
1.在靠近变量第一次使用的位置初始化它,如果编程语言支持的话,在靠近变量第一次使用的位置定义和声明的它。
2.保持变量需要重新初始化的假设,尤其对于累加器和计数器而言。
3.就近原则,把相关的操作放在一起,使变量引用局部化,减小平均跨度, 提高程序的可读性,也易于查错。
4.跨度指示对一个变量引用的集中程度,存活时间指示变量从被定义到最后一次被引用历经的语句数量。缩短变量存活时间可以增强代码的可读性,减小修改语句过程中变量值被错误修改的可能性,需要把一个大程序分成小程序时,这种做法也很有价值。
5.绑定时间指变量和它的值绑定在一起的时间,一般有五个层次:编码时->编译时->加载时对象实例化时->即时,复杂度依次升高,灵活性也依次增大。灵活性和复杂度常常会发生冲突,好的程序员善于从中找到平衡,在满足灵活性要求的同时又不引入额外的复杂度。
除此之外,这两次编程作业中我吸取到的经验教训恰好验证了这两章中的一些建议。比如,设计子程序或类的同时要考虑如何测试,这对迭代式开发大有裨益;在为如何提高每个子程序的效率苦苦思索前,优先考虑高层设计的优化,选用更合适的算法或数据结构。在编程作业中,我在优化阶段的一些改动实际上是违反编程规范的,但事实上一些看似会拖慢运行速度的规范限制并不是问题症结所在,符合规范的代码实际上是能提高效率的,当代码效率低下时,一般不是由于代码规范的约束,而往往是高层设计(比如算法、数据结构、乃至整个顶层设计)的缺陷。
《代码大全2》读书笔记 week 7的更多相关文章
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记1 - 基本的bash shell 命令
这本书买了好久了,除了刚到手的那几天翻看了一下以外,竟然到今天都没有看过.突然想要写一个shell脚本,发现什么也不会,是时候开始学习了,今天先把最简单的一章再看一遍顺便做一些笔记,明天继续后面的! ...
- 【代码大全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)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
- 《代码大全2》读书笔记 Week8
这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...
随机推荐
- 淘汰赛制_NOI导刊2010提高(01)
题目描述 淘汰赛制是一种极其残酷的比赛制度.2n名选手分别标号1,2,3,…,2^n-1,2^n,他们将要参加n轮的激烈角逐.每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第 ...
- Nacos-服务注册地址为内网IP的解决办法
最近在使用Spring Cloud Alibaba这一套微服务解决方案,但是在服务注册的时候,网关死活找不到微服务地址,自己的微服务通过网关怎么也访问不到. 查找原因 仔细一查才发现,网关去访问了一个 ...
- android ListView列表显示数据
item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...
- html中a标签伪类的优先级与顺序
/** 这四个伪类的优先级相同,前一个会覆盖后一个 建议书写顺序: lvha => love hate(好记) */ a:link { color: red; } a:visited { col ...
- 一、Gulp
开发和部署前端项目: 在开发Web应用中为加速客户端资源响应(js和css),减少对js和css的请求,通过bundles来实现. 在ASP.NET5中放弃该特性,被其他类似的组件所代替.比如使用Gu ...
- go语言从例子开始之Example8.数组
在 Go 中,数组 是一个固定长度的数列. package main import "fmt" func main() { 这里我们创建了一个数组 a 来存放刚好 5 个 int. ...
- 微信小程序 摇一摇
本次案例是有一点像微信的那个摇一摇但是没有那么好看,一些APP也有看到摇一摇功能. 小程序虽然没有提供摇一摇API接口,但是也一个加速器API ,加上搜索一些大神的资料,我这里就做了一个dome, ...
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo dp+矩阵快速幂
E. Okabe and El Psy Kongroo Okabe likes to take walks but knows that spies from the Organization c ...
- POJ 3187 Backward Digit Sums (dfs,杨辉三角形性质)
FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N < ...
- OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类:http://blog.csdn.net/jiangwei0910410003/article/details/4 ...