程序员修炼之道读书笔记2
注重实效的途径
重复的危害
1.我们都是在一个时间和资源有限的世界上工作。如果你善于估计出事情需要多长时间完成,你就能更好的在两者都很匮乏的情况下生存下去。
2.DRY原则:系统中的每一项知识都必须具有单一,无歧义,权威的表示。
正交性
1.如果两个或更多事物中的一个发生变化,不会影响其他事物,这些事物就是正交的。
2.正交性的另一个有趣的变体是面向方面编程,Aspect-Oriented Programming,AOP。
可撤销性
1.我们不必做出许多关键的,不可逆转的决策,所以我们的代码需要有可撤销性。
曳光弹
1.曳光弹与常规弹药交错装在弹药带上。发射时,曳光弹中的磷点燃,在枪与它们击中的地方之间留下一条烟火般的踪迹。如果曳光弹击中目标,那么常规子弹也会击中目标。
2.曳光弹的优点:用户能够及早看到能工作的东西;开发者构建了一个他们能在其中工作的结构;你有了一个集成平台;你有了可用于演示的东西;你将更能够感到工作进展。
3.原型制作生成用过就扔的代码;曳光弹虽然简约,却是完整的,并且是构成最终系统的一部分。
原型与便笺
1.我们也以同样的方式构建软件原型,为了分析和揭示风险,并且大大降低代价。
2.原型的设计目的就是回答一些问题,所以与投入使用的产品应用相比,他们可以忽略不重要的细节,开发便宜得多。
3.你可以为下列事物制作原型:架构;已有系统中的新功能;外部数据的结构或内容;第三方工具或组件;性能问题;用户界面设计。
领域语言
1.计算机语言会影响你思考问题的方式,以及你看待交流的方式。
2.如果用户有一些做了良好限定的陈述,你可以发明一种为应用领域进行了适当裁剪的小型语言,确切的表达他们的需要。
3.我们已经看到若干不同的文法,范围从简单的面向行的格式到更为复杂的看起来像真正的语言的文法。既然实现更为复杂的文法需要额外的努力,你又为何要这样做呢?权衡要素是可扩展性与维护。所以有时候我们也可以考虑用其他语言,在保证可扩展性与维护的前提下。
估算
1.但有人要你进行估算时,你要问自己的第一个问题就是,你解答问题的语境是什么?他们是需要高度的准确性,还是在考虑棒球场的大小?
2.“130天”和“6个月”表示相同的时长,但“130天”却可能暗含了比你的感觉更高的精确程度。
3.除了精确度问题外,你还需要把握问题域的范围。比如说:假定没有交通意外,而且车里还有汽油,我会在20分钟内赶到那里。
4.把估算分解为小估算,然后给每个小估算的参数赋值,最后合并为大估算。
5.在被要求进行估算时可以说:我等会儿回答你。