《代码阅读方法与实践》阅读笔记一
这是一本比较老的书了,因为平时我们大部分时间都在编写代码,修改代码,但是关于系统的代码的书写规范以及怎么研读一个较大的程序的代码,这些问题对我来说都是很模糊的,所以选择了这本书来阅读。首先代码阅读是软件开发工作者必须去做的一件事,为了修复检查和改进现存的代码或者是想要找到某个细节的解决方法,这都是一个必经的过程。每种原因的代码阅读都有自己的一套技术,分别强调不同方面的技能。经常阅读别人的高品质的代码就像是雨点都高品质的散文能够丰富词汇、激发想象力、扩展思维一样,还可以使自己编写代码的水平得到提高。
因为我们已经学习过几种编程语言了,知道了它们使用中的大部分语法规则。首先在阅读一个项目的代码时要清楚当前是哪一种语言的代码,熟悉它的基本的语法,比如说C++和java程序运行的时候要以main为入口,再清楚这些基本的知识之后就会更快地读懂代码了。在本书的开始几章的中介绍了goto,break,continue等的用法,由于有很多现在都不常用,所以经挑选了比较重要的经常使用的指针等仔细阅读了一下。
指针是一个低级、强大却很难掌握的工具,因此学会分析它的应用和常见的编码模式就显得比较紧迫;而仅仅查看那些一成不变的少数代码是很难提高的。指针主要用来构造链式数据结构、引用动态分配的数据结构、实现引用调用、访问和迭代数据元素、传递数组参数、引用函数、作为其他值的别名、直接访问系统内存。指针可以表示诸如链表、树和图等数据结构;可以用在以引用传递的方式接受参数的函数中,由于我们现在写的都是比较小的程序,可以不用考虑时间复杂度和空间复杂度,但是对于实际的项目来说,尽量减小内存将剩余的空闲内存进行管理都是很重要的。
递归代码经常用相似的定义来反映数据结构或算法,递归语法定义还适用于一系列遵行这种语法结构的函数,递归下降分析器,这种方法经常用于分析相对简单的结构,比如命令专有或领域专有的语言、表达式、或基于文本的数据文件。分析代码与语法之间存在对称性,这种对陈性甚至外延到标识符的命名。如果对函数的所有调用都发生在函数返回点之前,这类递归就是尾递归,这等同于一个回到函数开始处的循环。
异常机制允许程序员将处理错误代码从正常控制流程中分离出来,在C++和java中都会遇到类似的构造,这些语言中用异常处理的一些错误通过信号报告给程序,java异常都是java.lang.Throwable类的子类产生的对象,如果一个异常没有在抛出它的方法中被捕获,那么它将会沿着方法的调用栈向上传播给方法的调用者,调用者的调用者,依此类推,直到被捕获。程序中有时会有空的catch子句,用来忽略异常,这样做可能是因为这些异常对正在执行的代码并不重要。在硬件层,可能遇到的并行处理类型包括同意处理器运行多个执行单元、智能的集成或外部设备、多任务的硬件支持、多处理器计算机;软件层有进程、线程和特别模型。
对于大型项目的代码,有一些常用的设计与实现方法,软件生命周期的各个组成部分常常被划分为更小的任务进行处理,他们经常是软件代码库的一个组成部分。而重大的项目固有的复杂性,以及大量开发人员的参与,都要求必须采用正式的准则来组织开发工作。另外大的开发工作必须使用一种合适的构架来构造所要创建的系统,控制其复杂性。在实现层,使用诸如函数、对象、抽象数据类型和组件等机制,对系统的组成元素进行积极的分解。我们可以通过浏览项目的源代码树,包含项目源代码的层次目录结构,来分析一个项目的组织方式。不能被庞大的源代码集合吓倒,它们一般比小型的专门项目组织得更出色。因为尽管它十分庞大,但找到特定工具的源代码依旧轻而易举;可以对其目录结构进行图形化浏览。要注意项目的源代码远不止是编译后可以获得可执行程序的计算机语言指令,还包括规格说明、最终用户和开发人员文档等信息。