程序员修炼之道阅读笔记

第31节 靠巧合编程

从本节开始进入书目的第6章,本章主要讲在编码时应该注意的各类事项。传统智慧认为,项目一旦进入编码阶段,工作主要就是机械的把设计转换成可执行语句。我们认为,这种态度是许多程序丑陋、结构糟糕、不可维护的最大一个原因。编码不是机械工作,要想让程序长久无误的运行,每一分钟都需要做出决策,且需要对这些决策进行仔细的思考和判断。

1、靠巧合编程即代码正好是可运行的,至于为什么能够正常运行,却不清楚。这是我们应该极力避免的。

2、在打算重构某个看起来有问题的代码时,我们会面临这样的疑惑,是否有必要冒着把能工作的东西弄糟的风险呢?这时我们可以考虑一下几个理由:

  • 它也许不是真的能工作,只是看起来能工作。

  • 你依靠的边界条件也许只是一个巧合。

  • 多余和没必要的调用会让你的代码变慢并增加新 bug 的风险。

3、如何深思熟虑的编程,有以下建议:

  • 总是意识到你在做什么。
  • 按照计划(设计)行事。
  • 依靠可靠的事物而非假设。
  • 不要只是测试你的代码,还要测试你的假定。
  • 不要让已经做完的事情限制你的下一步,做好重构的准备。

第32节 算法效率

1、注重实效的程序员几乎每天都要使用估算,估算的资源包括:时间、处理器、内存等等。

2、估算算法即是我们熟知的时间复杂度,用O()表示,它有以下几种常见类型。

  • O(1),常量时间,不随数据的多少变化
  • O(n),线性时间,简单的循环
  • O(m*n),嵌套循环
  • O(log(n)),二分法,平衡二叉树的查询
  • O(nlog(n)),分而治之,快排
  • O(2^n),指数级,斐波那契数列

3、不同的时间复杂度在达到一定数量级的时候将相差很多,所以某些情况我们要想方设法优化算法的效率。我们主要需要关注的是是复杂度的阶。在确认了算法之后,还需要对其进行测试。

4、最好的并非总是最好的,是否使用最优算法,还需要根据我们遇到的实际情况。有时数据量很小的情况,算法的效率是可以忽略不计的。

第 33 节 重构

1、重写、重做和重新架构代码合起来,称为重构。

2、当代码出现以下特征,就应该考虑重构了:

  • 出现重复内容,违反DRY原则。
  • 非正交的设计。
  • 知识过时了,或者你对某部分的了解更深一步。
  • 对性能造成了影响。

3、重构的原则:早重构、常重构。重构面临的敌人通常都是时间,但这个借口并不成立,因为之后由此引发的时间额外消耗很可能更多。

4、如何重构。

  • 不要试图在重构的同时增加功能。
  • 重构之前,确保拥有良好的测试。
  • 采取短小,深思熟虑的步骤,不要一次改动太多内容。
posted @ 2023-05-22 16:27  Weebles  阅读(7)  评论(0编辑  收藏  举报