第2章 注重实效的途径

时间:2022-05-22 11:59:38

读书笔记 摘自:《程序员修炼之道》


7 重复的危害

11. 不要重复你自己
DRY – Don’t Repeat Yourself
系统中的每一项知识都必须具有单一、无歧异、权威的表示。
12. 让复用变得容易
Make It Easy to Reuse
如果复用很容易,人们就会去复用。创造一个支持复用的环境。

系统中每一项知识都必须具有单一、无歧义、权威的表示。
强加的重复、无意的重复、无耐性的重复、开发者之间的重复

重复的危害在于维护的负担。
DRY原则首先在于拒绝重复;其次在于鼓励可复用性。
总是在一些代码中看到好几份PI常量、ASSERT宏的定义,这种重复是相当低级、不负责任的,为什么不在用之前先搜索一下呢? 就好像你在论坛提问前,先要搜索一下是否该问题已经问过一样。

8 正交性

13. 消除无关事务之间的影响
Eliminate Effects Between Unrelated Things
设计自足、独立、并具有单一、良好定义的目的的组件。

不相互依赖性、解耦性
设计自足的组件:独立,具有单一、良好定义的目的(内聚)
提高生产率(改动得以局部化、促进复用、正交组件进行组合)、降低风险
分层降低模块之间依赖关系失控的风险

编码:让你的代码保持解耦,避免使用全局数据,避免编写相似的函数
紧密结合DRY原则、运用正交性原则,系统会变得更为灵活、更易于理解、调试、测试、维护

不知道为什么造这么一个名词出来,在我看来,这就是独立性,内聚性,就是尽可能的减少组件间的相互依赖。

9 可撤消性

14. 不存在最终决策
There Are No Final Decisions
没有决策是浇铸在石头上的。相反,要把每项决策都视为写在沙滩上的,并为变化作好计划。

如果某个想法是你唯一的想法,再也没有什么比这更危险的事情了。
灵活的架构:保持代码的灵活性,维持架构、部署及供应商集成等领域的灵活性

就是抽象性,想在D3D和OpenGL中切换,想在Oracle和 SQL Server切换?用自己的接口封装其基本概念!

10 曳光弹

15. 用曳光弹找到目标
Use Tracer Bullets to Find the Target
曳光弹能通过试验各种事物并检查他们离目标有多远来让你追踪目标。

反馈是即时的
用户能够及早看到能工作的东西,开发者构建了一个他们能在其中工作的结构,有了一个集成平台,有了可用于演示的东西,感觉到工作进展

迭代开发,并通过不断的反馈进行调整。最近在实施的 Scrum敏捷开发,其实是同样概念的开发方法。

11 原型与便笺

16. 为了学习而制作原型
Prototype to Learn
原型制作是一种学习经验。其价值并不在于所产生的代码,而在于所学到的经验教训。

构建原型时,可以忽略:正确性、完整性、健壮性、风格
原型是为了探索,为了验证。原型比较适用于研究型的项目,而曳光弹,则比较适用于方案比较明朗的项目。原型是用完就扔的代码,这里你可以忽略所有规范,为的只是最快的建立验证系统的原型。

其实,在曳光弹方法中,对于一些局部的任务,也可以采用原型方法来验证。

12 领域语言

17. 靠近问题领域编程
Program Close to the Problem domain
用你的用户的语言进行设计和编码。

什么是领域语言,我的感觉就是比以编程语言更加直接、高级的方式来实现功能。我的经验中,用过一些:
1. 通过一个xml文件来配置系统的UI,系统实现了一个解析器会在运行时解析该文件创建UI
2. 用一个perl脚本把一个reg文件解析为一个头文件,然后编译进代码中,该解析过程会在prebuild时间中调用
3. 其实,我觉得通过系统API完成的工作,也算是领域语言。

13 估算

18. 估算,以避免发生意外
Estimate to Avoid Surprises
在着手之前先进行估算。你将提前发现潜在的问题。
19. 通过代码对进度表进行迭代
Iterate the Schedule with the Code
用你在进行实现时获得的经验提炼项目的时间标度。

其实,生活中,工作中到处都是估算。你去买个菜大概要多少时间,做个晚饭要多少时间,洗个澡要多少时间~~~~
完成这个模块的分离要多少时间。
估算需要知道:要完成什么,怎么完成,怎样才算完成。书中有个观点感同身受:你估算的单位会对解读造成影响。(秒?分?。。。还是年)。

要提高估算的能力,关键在于多估算,多反馈。这样有两个好处:
1. 每次根据你的估算与实际花费,找出差异,你的考虑会越来越全面。
2. 估过的项目多了,很多时候你就可以依靠之前的经验了。

部分评论摘自豆瓣书评


===========文档信息============
读书笔记由博主整理编辑,供非商用学习交流用
版权声明:非商用*转载-保持署名-注明出处
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://my.csdn.net/dkjkls