程序员修炼之道(六)

程序员修炼之道

第六章

当你编码时

1.靠巧合编程

我们应该避免靠巧合编程,依靠运气和偶然的成功,而是应该深思熟虑的编程

  • 什么是巧合编程,写出一些代码,进行试验,代码好像能工作

    它也许不是真的能工作,而是看起来能工作;
    你依靠的边界条件也许是一个偶然;
    没有记入文档的行为可能会随着库的下一次发布而变化;
    多余的和不必要的调用会让你的代码变慢;
    多余的和不必要的调用还会增加bug的风险;

  • 怎么深思熟虑的编程,尽可能的早期抓住并修正错误

    总是意识到你在做什么;
    不要盲目的编程,拒绝构建你不完全理解的应用,或者使用你不熟悉的技术;
    按照计划行事,计划最好能有准确的记录;
    依靠可靠的食物,不要依靠假定或巧合;
    为你的假定建立档案,测试你的假定;
    不要只是测试你的代码,还要测试你的假定。如同之前所说,如果你有猜测,不要去假设,去证明;
    为你的工作划分优先级;
    不要做历史的奴隶,不要让已有的代码支配将来的代码,如果不适用,所有的代码都可以被替换;

2.算法的速率

了解自己的算法效率,学会估计自己设计的算法,保证自己代码的效率

  • O()表示法
    程序员修炼之道(六)

  • 实践中的算法速率,估算你的算法时间

  • 最好的并非总是最好的,常说的没有最好的方法,只有最合适的方法。在工作中,根据情况,使用最合适的算法,最合适的架构

3.重构

随着时间的变化,程序的演化,我们最早编写的代码可能需要进行修改。代码需要演化,它不是一成不变的。
什么是重构?重写,重做和重新架构代码合起来,成为重构
Refactor Early, Refactor Often

  • 何时进行重构?

    重复,违反了DRY原则;
    非正交的设计;
    过时的知识,比如你对问题的看法更深了,过时的方法;
    性能;

  • 怎样进行重构?

    不要试图在重构的同时增加功能;
    在开始重构之前,确保拥有良好的测试,以便暴露重构时出的错误;
    采用短小,深思熟虑的步骤;
    确保对模块做出剧烈的改动,比如以一种不兼容的方式更改了接口和功能,这样我们能很快定位老客户,并做出更新;

4.易于测试的代码

  • 单元测试
  • 针对合约进行测试
  • 编写单元测试
  • 使用测试装备
  • 构建测试窗口
  • 测试文化

5.邪恶的向导

这块让我想起了,Dreamweaver,拖动窗口,按钮等等完成页面设计;这就是靠巧合编程,项目的维护,重构都是极其费力的。

  • 不要使用你不理解的向导代码
  • 如果使用向导生成代码,但是不理解它,那么你就无法控制你自己的应用,没有能力去维护它,在调试的时候遇到更大的困难