编程的原则

作者:【日】上田勋,人民邮电出版社,2020年6月第1版

编程没有特效药

编程中没有魔法般的万能解决方案。【必须要具体问题具体分析】

软件在本质上具有难度:

  • 复杂性
  • 同步性:必须与现实世界同步。现实世界的复杂性决定了编程存在难度
  • 可变性:软件必须时刻保持变化
  • 不可见性:软件是概念的集合体。

构建环境、编程语言、库和框架等都是软件的非本质部分。非本质部分容易改善,例如自动化。

我们要对软件的非本质部分进行自动化处理,尽量多留些时间给软件的本质部分。

代码即设计文档(code as design)

编程属于设计行为。

真正能称得上工程文档的,只有代码。

【代码是设计文档,代码是注释的面向机器的翻译】

很多东西只有在开始编程之后才能搞清楚。

我们应该尽早开始编写代码。不写代码的话无法弄清很多事情,设计也只会无限拖延下去。

保持代码简洁

一份简洁的代码,各要素承担的职责也降到最小,各要素之间的关系也比较简单。因此,简洁的代码可读性搞,容易理解,便于修改。

【代码要对事物进行抽象,抽象到原子层级,而后相互组装成为程序】

代码并不是用来炫耀聪明才智的,它的作用是给用户提供价值。我们不能在代码上耍聪明。【不要试图使用新学会的技术】

有时人名觉得将来会用到某些功能,认为最好趁现在写下来,于是就编写了过程的代码。现在用不到的东西就不应该现在写,因为在大多数情况下,这些东西将来也用不到。我们应该只写当前需要的的代码,保持代码简洁。

Don't Repeat Yourself (DRY)

不可以重复写相同的代码。

将代码翻译成母语的注释也是一种重复。

和重复代码会导致:

  • 代码的可读性下降
  • 代码难以修改
  • 没有测试

通过对代码进行抽象化操作来消除重复。即函数化、模块化。

编程要表达出意图

代码是写给人看的,而不是写给编译器看的。

编写可读性高的代码,用代码表达意图是唯一可取的方法。

重视代码的可读性,而不是代码的易写性。

“读代码的效率”应优于“写代码的效率”。同样优先于“执行代码的效率”。

将代码的可读性放在第一位,就以为着不能为了炫耀才华而写一些让人难懂的代码。

要写注释。

单一抽象层次原则(Single Level of Abstraction Principle, SLAP)

使代码具有概括性和可读性

将函数结构化。各函数处理调用比自己低级别的的函数。

开闭原则

代码的修改不互相影响

给代码添加接口

名字很重要

命名是代码最重要的课题。是面向代码阅读者的“用户界面”。

编程要从名字入手,宪哥代码中会出现的各个元素取一个能准确表达意图的名字。

  • 尽量多包含信息
  • 不能有歧义
  • 说明效果和目的
  • 能念出来
  • 能搜索出来。如果是一个字母或数字,就不能搜索到。【简单单词亦如此】

相比独创名字,标准术语更能获得大家的共识。

高质量代码

有多种扩展方法、不存在多余要素、可读性高、易于理解的代码。

六个基本原则:

  1. 效应局部化:减少修改带来的影响。
  2. 重复最少化:消除重复,函数化
  3. 逻辑与数据的一体化:把逻辑和逻辑处理的数据放在相近的位置,如同一函数或同一模块内
  4. 对称性
  5. 声明式表达
  6. 变动率

如果掌握了技术的使用步骤二不了解它的演变历史,那么就无法使用该技术真正解决问题。因为这种情况下,所选技术与要实现的目标并不匹配。

在学习技术的同时,我们也要了解它的工作原理、演化过程和设计背景。只有这样,我们才更容易达成目的。

编程理论的三大思想

  • 交流:代码是一种个人看的文档,而文档的本质在于交流。解决维护成本,就必须提高代码的可读性。
  • 简洁
  • 灵活性

软件架构基本技法

  • 抽象:对抗复杂的手段
  • 封装
  • 信息隐藏
  • 打包
  • 关注点分离:例如 MVC 开发模式:模型-视图-控制器
  • 充足性、完整性、原始性
  • 策略和实现的分离:
  • 接口与实现的分离
  • 单一引用点
  • 分治

代码审查的判断标准

  • 简单性原理:最简单的逻辑编写
  • 同构原理:力求规范,不搞特殊。比如采用同一单位制等。编写符合规范的代码。
  • 对称原理
  • 层次原理
  • 线性原理:让处理流程尽量走直线。提高可读性。尽量不在代码中使用条件分支。
  • 清晰原理:逻辑清晰。
  • 安全原理

UNIX 思想

诞生于1969年的 UNIX 被人们沿用至今。

  • 模块化原则
  • 清晰原则
  • 组合原则
  • 分离原则
  • 简单原则
  • 简约原则:不写大代码:代码量大、复杂度高
  • 透明性原则
  • 健壮性原则
  • 表达性原则
  • 最小意外原则
  • 沉默原则
  • 修复原则
  • 经济原则:珍惜程序员的时间
  • 生成原则:减少手动操作,编写用于生成代码的代码
  • 优化原则
  • 多样性原则
  • 可扩展性原则

UNIX 哲学

  • 小就是美
  • 工作唯一:一个软件只负责一项工作
  • 尽早创建原型
  • 可移植性优于效率
  • 文本数据:文本文件优于二进制文件
  • 充分利用软件的杠杆效应:将手动作业自动化
  • 活用 shell 脚本
  • 避开交互式用户接口:将控制权还给命令
  • 过滤器化:使用标准输入输出

耦合度

模块间应“疏远”

以实现低耦的模块为目标

代码中的“坏味”

【只要你担心有问题,就必然会有问题】

重构对代码来说必不可少

  • 重复代码
  • 函数太长
  • 模块太大
  • 模块太多
  • 名称不一致

程序员的三大美德

  1. 懒惰:不遗余力地减少整体劳力的消耗。写代码-->做工具-->自动化。
  2. 急躁:在计算机偷懒的时候会感到愤怒。当计算机的工作效率令人不满,或者计算机没有按照预想的方式工作时,应立即修改代码。
  3. 傲慢:拥有极强的自尊心,促使自己写出让被人挑不出毛病的代码

步步为营

编程时每一个函数,每一小步,都要写高质量代码。【小步骤测试】

关于车轮

非必要,不重新发明轮子

【搜索轮子】

作者: 老齐
链接: https://www.itdiffer.com/principles_programming.html
来源: 老齐教室
本文原创发布于「老齐教室」,转载请注明出处,谢谢合作!

https://gitee.com/qiwsir/images/raw/master/2021-2-15/1613357594979-1.png

results matching ""

    No results matching ""