【读书笔记】代码大全34章:软件工艺主题
- 控制复杂度
- 软件开发的精髓就是控制复杂度
- 降低复杂度的方法
- 将系统拆分成子系统
- 精心设计接口,尽量隐藏设计细节
- 避免使用全局变量
- 避免深度继承
- 避免goto
- 整个项目使用同一种错误处理方法
- 统一Exception的使用方法
- 不要把类设计得太复杂
- 保持函数的短小
- 使用良好的变量名
- 减少函数的参数
- 使用现成的编码规范,这样可以降低复杂度
- 编码规范的作用就是降低复杂度
- 抽象可以降低复杂度
- 根据作用命名变量
- 总之,软件设计的核心就是控制复杂度
- 软件工程过程
- 软件工程的过程很大程度上影响了最终产品
- 开发软件的时候要关注软件工程方面大大小小的过程,这方面是值得花时间的
- 软件开发是一种不断创新的过程
- 写代码给人看,顺便给机器运行
- 代码可读性的好处
- 可以被别人理解
- 可以进行代码审查
- 可以减少错误率
- 可以方便调试
- 可以方便修改
- 可以减少开发时间
- 从而增强软件的外部质量(用户能感觉到的软件质量)
- 写出可以读的代码和不可读的代码花费的时间基本上是一样的
- 就算代码写出来是给自己用的,也不能忽略代码的可读性
- 代码可读性的好处
- 不是用语言来编程,而是用编程来丰富语言
- 有些语言不支持assert,可以写一个assert函数
- 有些语言不支持常量,可以用大写的变量来代替
- 注重编码规范,这样可以把注意力集中在问题本身
- 编码规范包括:缩进、空格、命名规范等
- 编码规范包含了重要的信息
- 编码规范防止了错误的发生
- 编码规范让底层的功能更加明显,你不需要猜测
- 编码规范可以弥补编程语言的缺陷
- 编码的时候注意问题本身,而不是实现细节
- 把问题分解成几个层次
- Level-0:操作系统级别的操作,机器码
- Level-1:语言方面的,比如基本数据类型,控制结构等。一般人不会接触Level-0和Level-1
- Level-2:底层结构实现,算法/数据结构
- Level-3:底层方案实现,解决项目中的基本问题
- Level-4:高层方案实现,这个层次的代码应该能让不懂技术的人看懂
- 另外一种方法
- 编写一个类解决项目相关的问题
- 隐藏底层的数据细节
- 使用有意义的命名常量
- 加入中间变量,让计算过程易于理解
- 复杂的条件代码可以用函数代替
- 把问题分解成几个层次
- 小心落石
- 如果一段代码调试了很长时间,意味着程序员写代码的时候不机智
- 如果项目中的代码很多地方是重复的,修改一个地方往往要修改另一个地方,意味着代码不够好
- 不要小看编译警告
- 迭代、重复、一次又一次
- 软件设计是一个启发式的过程,不是决定性的过程
- 代码调优用到了迭代
- 代码审查用到了迭代
- 信念
- 软件先知:多多尝试新方法
- 折中:软件开发的过程中要考虑各种方法,没有一种通用的方法
- 试验:软件开发过程中要使用多种方法,选择最合适的方法
【读书笔记】代码大全34章:软件工艺主题相关推荐
- 【Python自然语言处理】读书笔记:第三章:处理原始文本
本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...
- Think in Java第四版 读书笔记9第15章 泛型
Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...
- 【Python自然语言处理】读书笔记:第四章:编写结构化程序
4 编写结构化程序 4.1 回到基础 1.赋值: 列表赋值是"引用",改变其中一个,其他都会改变 foo = ["1", "2"] bar ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第十一章 攻击性取证
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第十一章 攻击性取证 文章目录 黑帽python第二版(Black Hat Python 2nd Edi ...
- Think in Java第四版 读书笔记10 第16章 数组
Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...
- 【Python自然语言处理】读书笔记:第五章:分类和标注词汇
jupyter 版请见我的github:https://github.com/JackKuo666/Python_nlp_notes [Python自然语言处理]读书笔记:第五章:分类和标注词汇 本章 ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒 文章目录 黑帽python第二版(Bl ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第五章 WEB黑客(3)暴力破解目录与文件位置 文章目录 黑帽python第二版(Black Hat P ...
- 【《C Primer Plus》读书笔记】第8章:字符输入/输出和输入验证
[<C Primer Plus>读书笔记]第8章:字符输入/输出和输入验证 8.1 单字符I/O 8.2 缓冲区 概念 为什么要引入缓冲区? 缓冲区的类型 ANSI C 缓冲区的大小 缓冲 ...
最新文章
- 在编写flash游戏播放声音时的一个要注意的地方
- cnblogs.com精华收藏帖
- 8 个你必须要掌握的 GitHub 实用技巧!
- Oracle中的pfile和spfile详解
- php 弹窗代码大全,PHP_asp.net弹出窗口代码大全,//关闭,父窗口弹出对话框,子窗 - phpStudy...
- 自从用了这几个网站后,linux下的开发(使用)更加简单化
- jpa jql 时间范围查询_SpringBoot整合JPA案例
- HDU2027 统计元音【入门】
- 本地html调试java接口_solr源码通过idea进行本地调试
- 单代号网络图计算例题_如何把横道图转化成双代号网络图?
- 敏捷开发-Scrum
- matlab张正友程序,张正友标定程序—MATLAB
- angularjs实现 - 增删改查+排序+敏感字(最终版)
- 注意int类型数据相加的溢出
- Ubuntu 16.04 安装显卡驱动(详细!)
- 一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian
- IP广播分控隐私政策
- 汉诺塔问题的解决思路及算法
- 【广播剧后期】你一定要掌握的的几个方面
- php类型 fcgi,php -v显示cgi-fcgi