9月第二份阅读笔记
《程序员修炼之道:从小工到专家》第二章主要讲解了注重实效的途径,由重复的危害,正交性,可撤销性,曳光弹,原型与便笺,领域语言,估算七部分组成。
避免重复,不要重复你自己,系统中的每一项知识都必须具有单一,无歧义,权威的表示。当我们更改程序中多次出现的同一事物时,记得更改其他处该事物的相关代码,否则就会产生矛盾。避免强加的重复,无意的重复,无耐性的重复,开发者之间的重复。编写简单的过滤器或代码生成器,给代码加上注释,避免产生重复。营造一种环境,在其中找到并复用已有的东西,让复用变得更加容易。
注意正交,消除无关事物之间的影响。正交的优点:可以提高效率,促进复用;降低风险,使所得系统更健壮,在设计过程中测试也可以更容易。团队组织也是这样,正交可以大大提高团队的工作效率,使得生产过程有条不紊的进行。维持正交性,就要让代码保持解耦,实现代码与代码间的隔离,避免使用全局数据,改为创建含有语境的结构,并传递指向这些结构的引用。并且避免编写相似的函数,养成不断批判对待自己的代码的习惯,改善其结构和正交性。
保持可撤销性也很重要,保持代码的灵活性的同时,也要维持灵活的架构,项目不能只拘泥于一个版本,当有更优选时要进行调整,这时可撤销性的重要性就凸显了出来。
要善于用曳光弹找到目标。完成项目的过程中逐渐充实基本结构,通过并行地扩大曳光代码的各个组件增加新的功能。快速,直观,和可重复地从需求出发,满足最终系统的某个方面要求。曳光代码与项目永不会结束的理念是一致的:总有改动需要完成,总有功能需要增加,这是一个渐进的过程。曳光代码有许多优点:用户能够及早看到能工作的东西,能直观的可以让用户尽早看到结果,展示进展,有了可以演示的东西。曳光弹在没有击中目标的时候,还可以让用户看到轨迹。简单来讲,关键就是反馈结果,可以看到目前做出来的东西距离目标还有多少距离开发者构建了一个他们能在其中工作的结构,如果你已经找出应用的所有端到端的交互,并体现在代码里,你的团队就无须再无中生有,让每个人都充满了干劲,同时促进了一致性。你有了一个集成平台,没一个新改动的影响都更为显而易见,而交互也更为有限,于是调试和测试将变得更快,更准确。你有了可用于演示的东西;你讲更能够感觉到工作进展,避免了创建整体式代码块。当然,曳光代码不是总能击中目标,但可以进行调整,直至击中目标为止。与其他任何方法相比,能够花费较少代价,更为迅速地生成新的,更为准确的版本。
构建软件原型的目的是为了分析和揭示风险,并以大大降低的代价,为修正提供机会,进一步降低了因为错误而导致消耗的人力与时间。通过原型来研究任何带有风险的事物,以前没有试过的事物,任何未被证明的,实验性的,或有疑问的事物。例如架构,已有系统中的新功能,外部数据的结构或者内容,第三方工具或组件,性能问题,用户界面设计。总之,原型制作是一种学习经验,其价值不在于所产生的代码,而在于所学到的经验教训。为了学习而制作原型。原型可以遮盖细节,聚焦于所考虑系统高迪某些具体方面,帮助我们在开发周琦的早期确定和改正潜在的问题点,节省大量时间,金钱,并大大减轻遭受的痛苦和折磨。如果在开发过程中使用原型代码的目的有可能被误解,最好还是采用曳光弹方法来得到一个坚实的框架。
靠近问题领域编程。用你的用户的语言进行设计和编码,从用户的需求出发完成项目。通过在更高的抽象层面上编码,专心解决领域问题的自由,忽略琐碎的实现细节。
估算,以避免发生意外。在着手之前先进行估算,提前发现潜在的问题。同时要考虑解答的语境,从实际出发,解决需求问题。