程序员修炼之道(六)
程序员修炼之道
第六章
当你编码时
1.靠巧合编程
我们应该避免靠巧合编程,依靠运气和偶然的成功,而是应该深思熟虑的编程
-
什么是巧合编程,写出一些代码,进行试验,代码好像能工作
它也许不是真的能工作,而是看起来能工作;
你依靠的边界条件也许是一个偶然;
没有记入文档的行为可能会随着库的下一次发布而变化;
多余的和不必要的调用会让你的代码变慢;
多余的和不必要的调用还会增加bug的风险; -
怎么深思熟虑的编程,尽可能的早期抓住并修正错误
总是意识到你在做什么;
不要盲目的编程,拒绝构建你不完全理解的应用,或者使用你不熟悉的技术;
按照计划行事,计划最好能有准确的记录;
依靠可靠的食物,不要依靠假定或巧合;
为你的假定建立档案,测试你的假定;
不要只是测试你的代码,还要测试你的假定。如同之前所说,如果你有猜测,不要去假设,去证明;
为你的工作划分优先级;
不要做历史的奴隶,不要让已有的代码支配将来的代码,如果不适用,所有的代码都可以被替换;
2.算法的速率
了解自己的算法效率,学会估计自己设计的算法,保证自己代码的效率
O()表示法
实践中的算法速率,估算你的算法时间
- 最好的并非总是最好的,常说的没有最好的方法,只有最合适的方法。在工作中,根据情况,使用最合适的算法,最合适的架构
3.重构
随着时间的变化,程序的演化,我们最早编写的代码可能需要进行修改。代码需要演化,它不是一成不变的。
什么是重构?重写,重做和重新架构代码合起来,成为重构
Refactor Early, Refactor Often
-
何时进行重构?
重复,违反了DRY原则;
非正交的设计;
过时的知识,比如你对问题的看法更深了,过时的方法;
性能; -
怎样进行重构?
不要试图在重构的同时增加功能;
在开始重构之前,确保拥有良好的测试,以便暴露重构时出的错误;
采用短小,深思熟虑的步骤;
确保对模块做出剧烈的改动,比如以一种不兼容的方式更改了接口和功能,这样我们能很快定位老客户,并做出更新;
4.易于测试的代码
- 单元测试
- 针对合约进行测试
- 编写单元测试
- 使用测试装备
- 构建测试窗口
- 测试文化
5.邪恶的向导
这块让我想起了,Dreamweaver,拖动窗口,按钮等等完成页面设计;这就是靠巧合编程,项目的维护,重构都是极其费力的。
- 不要使用你不理解的向导代码
- 如果使用向导生成代码,但是不理解它,那么你就无法控制你自己的应用,没有能力去维护它,在调试的时候遇到更大的困难