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

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

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/chizhenzhen/p/3761549.html

《代码大全2》读后感czz相关推荐

  1. 《代码大全》读后感1

    最近在看代码大全,觉得这本书写非常好,这本书没有涉及太多的算法和代码,讲的是一种编程的一种思维模式.下面是节选,我觉得把写软件比喻为建房子非常形象. "建造"一词的想象比" ...

  2. 代码大全(Code Complete)-- 目录和关键点

    读后感 <代码大全>是一本指导"代码构建"的书,指导我们如何写出优秀的代码,如何成为优秀的程序员. 这样一本900多页的大部头书,当我们基于既往的编程经验,在读每一个部 ...

  3. 与《代码大全》齐名的经典著作

    与<代码大全>齐名的经典著作 揭示微软成功的技术奥秘 C语言高手的秘籍 "本书所蕴含的思想精髓可以说是不朽的,它彻底改变了我的编程方式." --David Kline, ...

  4. javascript常用代码大全

    http://caibaojian.com/288.html     原文链接 jquery选中radio//如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ...

  5. 用python画动态樱花_利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白...

    利用python画一棵漂亮的樱花树,turtle画图代码大全,此处感谢知乎大佬小白 此处感谢知乎大佬 小白练手 练习一下比较流行的turtle(海龟库) 画一棵漂亮的樱花树,效果如下: ps: 是动态 ...

  6. python基础代码事例-python基础代码大全

    [实例简介] python代码大全,适用于基础python学习者,里面的代码基本上是基础学习者必经过程. Python学习入门很快,但学习之路任重道远 [实例截图] [核心代码] python代码大全 ...

  7. 《代码大全2》读书笔记 Week2

    <代码大全2>第四.五章 第四章"关键的'构建'决策"主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率. ...

  8. 《代码大全2》读书笔记 Week 1

    <代码大全2>第一.二.三章 隐喻思维在西方是一个热门的话题,隐喻的认知功能在各个学科正受到越来越多的重视,依照我的理解,其实就是以众所周知或者理解主体熟悉的事物为符号去将新事物.新概念具 ...

  9. 各种页面刷新代码大全,asp/javascript刷新页面代码

    页面自动刷新代码大全,基本上所有要求自动刷新页面的代码都有,大家可以自由发挥做出完美的页面. 1) 10表示间隔10秒刷新一次 2) <script> window.location.re ...

最新文章

  1. centos 安装指定版本gc_CentOS 环境安装所需命令
  2. 理解T-SQL: 存储过程
  3. 电脑计算机无法找到脚本文件夹,win10系统开机出现无法找到脚本文件的设置办法...
  4. LeetCode-Remove Duplicates from Sorted Array-从有序数组移除重复-简单逻辑
  5. excel公式中的$(美元符号)的作用
  6. Java Map集合面试题汇总
  7. java实现layui分页_layui如何实现数据分页功能
  8. Java Map 怎样实现Key 的唯一性?
  9. BAT运维系统Client设计探秘
  10. Ubuntu下vsftp安装和配置
  11. TCP Server 实现 RPN计算器(Python)
  12. java如何抽离_「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)
  13. 阿涛读书之——《坏血》
  14. 为什么使用Python保存的视频特别大!!(数据速率/总比特率)
  15. cmd模式下cd目录,文件夹命名有空格无法切换问题解决方法
  16. mysql数据库test密码_TestCenter常见问题
  17. Android IOS平台AE动画库
  18. 如何判断一个数是不是整数
  19. Linux通过stty命令操作串口设备(linux串口操作命令)
  20. python中%代表什么意思?

热门文章

  1. 数据库和区块链的异同
  2. k3应付系统初始化应付票据_在家工作时应付无尽干扰的真实感觉
  3. 程序员远程办公_如何从办公室变成远程程序员
  4. 头条小视频和西瓜视频signature签名算法
  5. 带哨兵节点的链_【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表
  6. java中判断两个字符(或者字符串相等)
  7. CSP 201909-2 小明种苹果(续)Python实现+详解
  8. java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解
  9. linux resin mysql_Linux下Resin JSP MySQL的安装和配置-2
  10. 学习Python有什么优势?