这本书大部分讲的都是软件开发的细节,本章节讲的主要是从宏观角度讲解软件工艺。
  • 控制复杂度

    • 软件开发的精髓就是控制复杂度
    • 降低复杂度的方法
      • 将系统拆分成子系统
      • 精心设计接口,尽量隐藏设计细节
      • 避免使用全局变量
      • 避免深度继承
      • 避免goto
      • 整个项目使用同一种错误处理方法
      • 统一Exception的使用方法
      • 不要把类设计得太复杂
      • 保持函数的短小
      • 使用良好的变量名
      • 减少函数的参数
      • 使用现成的编码规范,这样可以降低复杂度
    • 编码规范的作用就是降低复杂度
    • 抽象可以降低复杂度
    • 根据作用命名变量
    • 总之,软件设计的核心就是控制复杂度
  • 软件工程过程
    • 软件工程的过程很大程度上影响了最终产品
    • 开发软件的时候要关注软件工程方面大大小小的过程,这方面是值得花时间的
    • 软件开发是一种不断创新的过程
  • 写代码给人看,顺便给机器运行
    • 代码可读性的好处

      • 可以被别人理解
      • 可以进行代码审查
      • 可以减少错误率
      • 可以方便调试
      • 可以方便修改
      • 可以减少开发时间
      • 从而增强软件的外部质量(用户能感觉到的软件质量)
    • 写出可以读的代码和不可读的代码花费的时间基本上是一样的
    • 就算代码写出来是给自己用的,也不能忽略代码的可读性
  • 不是用语言来编程,而是用编程来丰富语言
    • 有些语言不支持assert,可以写一个assert函数
    • 有些语言不支持常量,可以用大写的变量来代替
  • 注重编码规范,这样可以把注意力集中在问题本身
    • 编码规范包括:缩进、空格、命名规范等
    • 编码规范包含了重要的信息
    • 编码规范防止了错误的发生
    • 编码规范让底层的功能更加明显,你不需要猜测
    • 编码规范可以弥补编程语言的缺陷
  • 编码的时候注意问题本身,而不是实现细节
    • 把问题分解成几个层次

      • Level-0:操作系统级别的操作,机器码
      • Level-1:语言方面的,比如基本数据类型,控制结构等。一般人不会接触Level-0和Level-1
      • Level-2:底层结构实现,算法/数据结构
      • Level-3:底层方案实现,解决项目中的基本问题
      • Level-4:高层方案实现,这个层次的代码应该能让不懂技术的人看懂
    • 另外一种方法
      • 编写一个类解决项目相关的问题
      • 隐藏底层的数据细节
      • 使用有意义的命名常量
      • 加入中间变量,让计算过程易于理解
      • 复杂的条件代码可以用函数代替
  • 小心落石
    • 如果一段代码调试了很长时间,意味着程序员写代码的时候不机智
    • 如果项目中的代码很多地方是重复的,修改一个地方往往要修改另一个地方,意味着代码不够好
    • 不要小看编译警告
  • 迭代、重复、一次又一次
    • 软件设计是一个启发式的过程,不是决定性的过程
    • 代码调优用到了迭代
    • 代码审查用到了迭代
  • 信念
    • 软件先知:多多尝试新方法
    • 折中:软件开发的过程中要考虑各种方法,没有一种通用的方法
    • 试验:软件开发过程中要使用多种方法,选择最合适的方法

【读书笔记】代码大全34章:软件工艺主题相关推荐

  1. 【Python自然语言处理】读书笔记:第三章:处理原始文本

    本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...

  2. Think in Java第四版 读书笔记9第15章 泛型

    Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...

  3. 【Python自然语言处理】读书笔记:第四章:编写结构化程序

    4 编写结构化程序 4.1 回到基础 1.赋值: 列表赋值是"引用",改变其中一个,其他都会改变 foo = ["1", "2"] bar ...

  4. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第十一章 攻击性取证

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第十一章 攻击性取证 文章目录 黑帽python第二版(Black Hat Python 2nd Edi ...

  5. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

  6. 【Python自然语言处理】读书笔记:第五章:分类和标注词汇

    jupyter 版请见我的github:https://github.com/JackKuo666/Python_nlp_notes [Python自然语言处理]读书笔记:第五章:分类和标注词汇 本章 ...

  7. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒 文章目录 黑帽python第二版(Bl ...

  8. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置 文章目录 黑帽python第二版(Black Hat P ...

  9. 【《C Primer Plus》读书笔记】第8章:字符输入/输出和输入验证

    [<C Primer Plus>读书笔记]第8章:字符输入/输出和输入验证 8.1 单字符I/O 8.2 缓冲区 概念 为什么要引入缓冲区? 缓冲区的类型 ANSI C 缓冲区的大小 缓冲 ...

最新文章

  1. 在编写flash游戏播放声音时的一个要注意的地方
  2. cnblogs.com精华收藏帖
  3. 8 个你必须要掌握的 GitHub 实用技巧!
  4. Oracle中的pfile和spfile详解
  5. php 弹窗代码大全,PHP_asp.net弹出窗口代码大全,//关闭,父窗口弹出对话框,子窗 - phpStudy...
  6. 自从用了这几个网站后,linux下的开发(使用)更加简单化
  7. jpa jql 时间范围查询_SpringBoot整合JPA案例
  8. HDU2027 统计元音【入门】
  9. 本地html调试java接口_solr源码通过idea进行本地调试
  10. 单代号网络图计算例题_如何把横道图转化成双代号网络图?
  11. 敏捷开发-Scrum
  12. matlab张正友程序,张正友标定程序—MATLAB
  13. angularjs实现 - 增删改查+排序+敏感字(最终版)
  14. 注意int类型数据相加的溢出
  15. Ubuntu 16.04 安装显卡驱动(详细!)
  16. 一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian
  17. IP广播分控隐私政策
  18. 汉诺塔问题的解决思路及算法
  19. 【广播剧后期】你一定要掌握的的几个方面
  20. php类型 fcgi,php -v显示cgi-fcgi

热门文章

  1. i5 12400f配什么主板
  2. Activity跳转的几种方式
  3. linux服务--nfs服务
  4. 瑞星:过年购票还需谨慎病毒和网络钓鱼威胁
  5. TeamViewer修改绑定设备
  6. 2022年元旦火车票开售时间公布,元旦火车票购票用便签提醒
  7. 使用XRECODE II转换几乎任何音频格式
  8. 架构师工具-docker环境篇
  9. Xamarin For VS2015安装
  10. Unity 3D之碰撞检测