程序员修炼之道 第二章
第二章 注重实效的途径
7重复的危害
知识不是稳定的,所以我们需要花大量时间去维护我们的知识。程序员也必须不断维护软件,而开发中的重复则是维护的噩梦。所以可靠的开发软件,并让我们的开发更加易于理解和维护的唯一途径是DRY原则,及系统中的每一项知识都必须具有单一,无歧义,权威的表示。
重复分为强加的重复:来自项目标准,编程语言自身的结构重复等;无意的重复:来自设计的重复;无耐性的重复:相同或类似的内容更多人会选择去拷贝,我在写一些题的过程中也遇到过,有的东西就是需要反复用到的,但我是选择了拷贝,而不是单独写成一个方法再反复调用;开发者之间的重复:处理这个问题的最佳方式是鼓励开发者相互进行主动交流。
8正交性
正交性是指两个或更多事物中的一个发生变化,不会影响其他事物。正交可以消除无关事物之间的影响。正交的系统可以提高生产率和降低风险。在项目团队,设计,工具箱与库的选择,编码,测试和文档者几个方面,我们都应该考虑正交性。例如编码,我们可一通过让代码保持解耦,避免使用全局数据,避免编写相似的函数来维护正交性。紧密结合DRY原则,运用正交性原则,你将会发现你开发的系统会变得更加灵活,更易理解,并且更易于调试,测试和维护。
9可撤销性
如果某个想法是你唯一的想法,再没有什么比这更危险的事情了。一个项目不能仅仅局限于一种实现方式。关键决策不容易撤销。我们需要考虑可撤销性,把决策视为是写在沙滩上的,而不是刻在石头上,不存在最终决策,错误就在于决策是浇铸在石头上,同时没有为可能出现的意外事件做准备。另外,我们不但要设法把持代码的灵活性,还需要考虑维持架构,部署及供应商集成等领域的灵活性,该换就换。
10曳光弹
在黑暗的环境中开枪,士兵选择使用曳光弹。在项目的开发当中也可以使用曳光代码,
曳光代码含有完整的错误检查,结构,文档及自查,只不过功能不全。通过曳光代码可以检查距离最终目标还有多远,并且可以及时调整代码。相比于传统的把完整代码都实现的方法,曳光代码有几个优点,用户能够及早看到能工作的东西。开发者构建了一个他们能在其中工作的结构,你有了一个集成平台,你有了可以用于掩饰的东西,你将更能感觉的工作进展。曳光代码并非总能击中目标,但他可以提醒你及时调整,最终击中目标。
11原型与便笺
我们可以构建软件原型来分析和揭示风险,并以较低的代价,为修正提供机会。软件原型不一定非要是代码,便笺也可以。原型的目的是为了回答一些问题,代码可以忽略不重要的细节。任何有风险的,没试过的,实验性的或有疑问的东西都可以为其制作原型。制作原型的价值在于学到的经验教训。制作原型可以忽略正确性,完整性,健壮性和风格。适当使用原型可以帮人在开发周期的早期确定和改正潜在的问题点,及时改正,省时省力省钱。
12领域语言
我们可以发明一种为应用领域进行了适当裁剪的小型语言来确切表达用户的需要。这种语言是我们自己的一个工具,方便我们更加靠近问题的领域工作。不同的用户有不同的问题领域,我们可以为他们生成各自的小型环境和语言。小型语言可以采用面向行的,易于解析的格式。还可以用更为正式的语法,实现更复杂的语言。实现小型语言还可以拓展已有的语言。
13估算
估算,以避免发生意外。在估算的过程中,你可以加深对你的程序所处世界的理解。对于不同的问题,答案的准确性是不一样的。我们应选择能反映你想要传达的精确度的单位。估算以问题模型为基础,而估算的一个诀窍就是问做过此事的人,你会成功借鉴他人的经验。为了更好估算,我们应该理解提问内容,建立系统的模型,把模型分解为组件,给每个参数指定值,计算答案。同时追踪你的估算能力,估算项目进度。