《代码大全2》读后感czz

经老师推荐,买了一本《代码大全2》,花了近3个月的时间看完了,看完后觉得还有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。所以,作个读书心得。全书的主题是软件构建,关于软件构建问题的方方面面均有涉及,共分7个部分,从软件构建前期准备,到语言层的一些问题,再到代码完善,系统考虑以及软件工艺等等。以下分别进行简单说明。

第一部分是打好基础,本部分主要是软件构建前期的工作,以及对一些基本概念的介绍,具体包括如何选择编程语言和构建实践方法,如何理解软件开发的过程。软件开发本质上说就是工程,书中用建筑工程对其作比喻。不过由于软件产品本身的特性,使其需求产生变化的可能性很大,因而也产生一系列需要额外考虑的问题(否则的话,直接套用现在的工程方法就OK了)。

第二部分是创建高质量的程序,第三部分是变量,第四部分是语句。这三个部分是对语言层进行说明。

第二部分从整个程序的角度,包括构建类的考虑因素,创建子程序需要注意的地方,以及如何进行防御式编程。个人以为防御式编程是很重要的,不光是可以保证程序现在的正确性,同时也可以较长时期保证程序不至于出现大的问题。由于防御式编程,所以可以在出现问题之后,较快的确定问题所在甚至是处理部分问题。这个实现技术主要是异常处理机制,断言等等。实际上一个真正强大的软件大部分的逻辑应该是异常逻辑,只是解决正常工作情况的程序,不能称之为软件,其鲁棒性远远没有达到要求。

第三部分是变量,这是全书描述的最细微的单元。主要包括如果对变量命名,变量与数据的绑定时间,基本的数据类型以及一些不常见的数据类型,比如指针、全局变量等等。变量命名是有多种方法的,用哪种无所谓,关键是要统一。变量与数据的绑定时间,这个问题我以前没有系统考虑过。书中的观点是绑定时间越滞后,则系统越灵活。这个我赞同。硬编码到程序中的,是直接赋予数值的常量,除非修改源码,否则不变;编译时刻确定的,是一些静态变量;运行时间确定的,就难说了,可能是从I/O获得,也可能是从内存获得。其它是介绍基本数据类型,在此不赘述。

第四部分是语句,这是构建程序主体的基本构成单元,比变量又高了一级。这部分主要描述语句的组织结构,比如直线型、循环控制、条件控制、表驱动等。一般的方法比如条件循环等等,大部分情况下可见。表驱动,我是不常见的,应该是对程序逻辑的高度概括,并且高度灵活化。这个只在写编译器课程实践代码的时候简单运用过。

第五部分是代码改善,这部分包括以下几个主题,协同、测试、调试、重构、调整。这里的测试是开发者测试,应该是指单元测试了,现有很多合适的工具,比如NUnit、CppUnit、JUnit等等。调试主要难点在于寻找和定位问题,解决问题虽然也不容易,但需要的是远见,因为再不济,总会存在一种打补丁的方法可以临时解决问题。重构和代码调整是我近期需要关注并且不断提高自己的主题。这两个技术的运用,可以较好的弥补前期代码设计不足所带来的隐患。代码调整的目标是进行性能优化。这需要考虑方法以及后果,书中有一个很重要的观点是,往往表面看起来有效的优化却并不有效,尤其是你看似整洁不重复的代码,却还不如一个重复代码执行效率高。要达到这一步,需要在每次的调整后进行性能测试,以判定性能是否优化。

第六部分是系统考虑,这部分是对软件管理方面的考量,具体包括程序规模对构建的影响,如何去管理构建过程,如何集成模块,以及介绍软件构建的工具。这部分内容像是给Manager准备的哈,现在的我,需要在多个项目中逐步体会。

第七部分,全书最后一部分,讲述软件工艺。软件说到底,也就是一个产品,只不是产品的形式与一般不同。一部分是构建出来的可执行程序,一部分是完整的软件源码。对于源码的书写,就涉及到工艺了,不同层次的人写出来的代码是完全不一样的。水平高低暂且不论,单是注释的规范整齐程序,就可见一斑。这部分主要对代码的布局,如何写注释,个人性格对代码书写的影响等方面进行说明。全书最后一章是好书推荐。

总结到此,之后在构建方面,我需要继续关注重构和代码调整一类的内容,以及系统架构等等。

《代码大全2》读后感czz,布布扣,bubuko.com

时间: 2024-12-28 09:19:15

《代码大全2》读后感czz的相关文章

《代码大全》读后感

最近买了几本经典编程书,有<head first 设计模式><人月神话><程序员修炼之道><代码大全>,<代码大全>是第二本看完的. 看的期间不断有所悟,书中多处让我惊讶「原来是这样子」.不过由于工作之余时间有限,这本大著看了快两个月才完了,现在仅凭印象把之前悟到的写下来,算是总结. 如果要用一句话概括<代码大全>的话,我以为是「为人写代码,而不是机器」. 一:为人写代码,势必要考虑代码的扩展性.人是多变的,现实世界也是多变的,所以写

代码大全读后感 第3篇

<<代码大全>>第31章专门介绍代码的布局与风格,前面提到过,编码规范最有用之处 在于让你避免做出武断决定,避免把时间花在无谓的争执上(第34.5节).McConnell 并不像一位“家具警察”那样对待代码的格式,他认为好的代码布局应凸现程序的逻辑结构, 使代码易于阅读.理解.检查及修改.至于循环体应该缩进几个空格,大括号的摆放位置这 些问题,正确答案不止一种.每次回答同样内容比起只是回答正确更重要.第28.5 节谈到了程序员的信仰问题,缩进风格.大括号的摆放位置.注释风格.命名习

代码大全读后感(1)

经老师推荐,开始看<代码大全>看完前面觉得有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍.在这,作个读书心得.全书的主题是软件构建,大致看了一下目录,关于软件构建问题的方方面面均有涉及,共分7个部分,从软件构建前期准备,到语言层的一些问题,再到代码完善,系统考虑以及软件工艺等等.以下分别进行简单说明. 第一部分是打好基础,本部分主要是软件构建前期的工作,以及对一些基本概念的介绍,具体包括如何选择编程语言和构建实践方法,如何理解软件开发的过程.软件开发本质上说就是工程,书中用建筑工

CSS颜色代码大全

CSS颜色代码大全 颜色代码表(一): EEEEEE FFCCFF FF66FF FF00FF DDDDDD FFCCCC FF66CC FF00CC CCCCCC FFCC99 FF6699 FF0099 BBBBBB FFCC66 FF6666 FF0066 AAAAAA FFCC33 FF6633 FF0033 999999 FFCC00 FF6600 FF0000 888888 CCCCFF CC66FF CC00FF 777777 CCCCCC CC66CC CC00CC 666666

代码大全阅读笔记03

无论怎么拖也总是要做的,我感觉自己的拖延似乎是毫无意义的浪费时间,我的拖延挤出来的时间都是在干啥,这真是让我反思.好了继续读代码大全,我开始烦了已经,因为它太厚了.过渡工程,这个问题把握好并不容易.一方面,我们希望系统健壮,如果组成系统的各个部分只在最低限度满足健壮性要求,那么整体通常是达不到要求的.软件健壮性不取决于最薄弱的地方,而是等于所有薄弱环节的乘积.构架应该指出每个部分,程序员为了谨慎而宁可做过度工程,还是做出简单的能工作的东西就够了.有些东西是不应该过分花精力的,这个错误我们也犯过,

Dreamweaver网页设计代码大全

Dreamweaver网页设计代码大全Dreamweaver网页设计HTML语法大全由51RGB小编Q群162542073整理分享: 网页设计视频网站链接http://www.51rgb.com/mproductzh.aspx?classid=31 <!> 跑马灯 <marquee>...</marquee>普通卷动 <marquee behavior=slide>...</marquee>滑动 <marquee behavior=scro

代码大全阅读笔记(二)

代码大全这本书只看懂了一部分,现只对最有收获的部分写入笔记里 第七章 创建子程序的正当理由 (1)降低复杂度;(2)避免代码充分;(3)支持子类化;(4)隐藏顺序;(5)隐藏指针操作;(6)提高可移植性;(7)简化复杂的布尔判断;(8)改善性能 对于过于简单的代码写成子程序的两大理由:1 可以增加程序的可读性 2简单程序可能变成复杂程序 1 在子程序层上设计 内聚性强调把一件事做好,不再做其它任何事情这样做的好处是得到更高的可靠性 顺序上的内聚性是指在子程序内包含有需要按特定顺序执行的操作,这些

阅读《代码大全》(第二版)体会小结

这一次阅读了著名的<代码大全>(第二版).全书虽然章节众多,但是主要就是几个大部分,这些部分我大多有一些浅显的了解但还未深入,当然也有一些全新的体验,例如表驱动法.全书内容丰富而详细,我在阅读的其中问题并不是太多,只不过很多的内容都觉得了解的还太浅,需要更多的实践以及阅读去体会.在这里记录下的也就是一些自己的体会,主要是对书中一些论断的不同看法与讨论,大部分是关于面向对象和结构化设计的内容:以及对于全新接触的表驱动法的学习体会. Question 1: “7.1 创建子程序的正当理由”中,提到

JS代码大全 (都是网上看到 自己整理的)

原文 JS代码大全 (都是网上看到 自己整理的) 事件源对象 event.srcElement.tagName  event.srcElement.type 捕获释放 event.srcElement.setCapture();   event.srcElement.releaseCapture(); 事件按键 event.keyCode  event.shiftKey  event.altKey  event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event