上节我们讲到程序员修炼之道 从小工到专家-注重实效的哲学,程序员修炼之道,修炼的是内容,要注重实效, 这一次我们就来看一下注重实效的途径有哪些。
重复的危害
时代在改变,一切事务都在不断变化中,项目的维护是持续的,如果程序中过多的重复,就难以维护。
系统中的每一项知识必须具有单一、无歧义、权威的表示。
DRY: Don't Repeat Yourself,不要重复你自己
重复是怎么发生的
- 强加的重复——开发者觉得他们无可选择,环境似乎要求重复
- 无意的重复——开发者没有意识到他们在重复信息
- 无耐性的重复——开发者偷懒,他们重复,因为那样似乎更容易。
- 开发者之间的重复——同一团队(或不同团队)的几个人重复了同样的信息
或许,最难检测和处理的重复发生在项目的不同开发者之间。处理这个问题较好的办法是开发者之间相互进行主动的交流。让复用变得容易。
正交性
在计算机技术中,正交性表示某种相互不依赖性或解耦性。非正交系统:系统内部各部分相互影响
正交的好处:消除无关事物之间的影响。
编写正交的系统的好处有如下:
- 提高生产效率
- 降低风险
可撤消性
如果你的想法是你唯一的想法,再没有什么比这更危险的事情了。
可撤消性代表着灵活性 更好,适应能力更好
不存在最终决策
灵活的架构
保持灵活的架构很重要
曳光弹
在黑暗中发光的代码
曳光弹行之有效,是因为它们与真正的子弹在相同的环境、相同的约束下工作。为了在代码中获得同样的结果,我们要找到某种东西,让我们能快速、直观和可重复地从需求触犯,满足最终系统的某个方面的要求。
曳光代码是指代码实现能够把某些未知的因素或者隐藏的东西暴露出来,使开发者能够了解其内部工作原理。
采用曳光弹有许多优点:
1、用户能及早看到能工作的东西,以便更好的改进,会收获到更多
2、开发者构建了一个他们能在其中工作的结构。最令人畏缩的纸是什么也没有写的白纸。
3、你有了一个集成平台。每一次的改动都显而易见。
4、你有了可用于演示的东西
5、你讲更能够感觉到工作进展。循序渐进的去解决每一个任务。
曳光弹并非总能集中目标
曳光弹告诉你击中的是什么,那不一定总是目标。出现类似的情况很正常,我们应该找出怎样改变已有的东西、让其更接近目标的方法。小段代码的惯性也小——要改变它更容易、更迅速。
原型与便签
许多不同的行业都使用原型试验具体的想法:与完全的制作相比,制作原型要便宜得多。
1、应制作原型的事物
任何未被证明的、实验性的、或有疑问的实物,任何让你觉得不舒服的实物,都需要为他们制作原型,比如下列的:
- 1、架构
- 2、已有系统中的新功能
- 3、外部数据的结构或内容
- 4、第三方工具或组件
- 5、性能问题
- 6、用户界面设计
原型制作是一种学习经验。其价值并不在于所产生的代码,而在于所学到的经验教训,这才是原型的要点所在。
2、怎样使用原型
在构建原型时,可以忽略的细节:
- 1、正确性,可以适当使用假数据
- 2、完整性
- 3、健壮性
- 4、风格
因为原型应该遮盖细节,并聚焦于所考虑系统的某些具体方面,可以用非常高级的语言实现原型。
3、制作架构原型
寻求的是了解系统怎样结合成一个整体,推迟考虑细节,具体问题:
1、主要组件的责任是否得到了良好的定义?是否恰当
2、主要组件间的协作是否得到了良好的定义?
3、耦合是否得以最小化
4、你能否确定重复的来源
5、接口定义和各项约束是否可接受
6、每个模块在执行过程中是否能访问到其所需要的数据?是否能在需要时进行访问?
领域语言
语言的界限就是一个人的世界的界限。
在某些情况下,我们可以采用领域的语汇、语法、语义——语言——进行实际编程。
1、靠近问题领域编程
2、实现小型语言
3、数据语言与命令语言
4、独立语言和嵌入语言
5、易于开发还是易于维护
估算
通过估算,将会加深对你的程序所处的世界的理解。
估算,以避免发生意外。
1、多准确才足够准确
在某种程度上,所有的解答都是估算。当进行估算的时候,要考虑解答问题的语境是什么?什么才是提出问题的人最关心的问题?最想知道的问题
度量时间估算:
时长报出估算的单位1~15天天3~8周周8~30周月30+周在给出估算前努力思考一下
同样的概念适用于对任何数量的估算:要选择能反映你想要传达的精确度的单位
2、估算来自哪里
所有的估算都以问题的模型为基础,去问已经做过这件事情的人,它总能给出好的答案
3、理解提问内容
任何估算练习的第一步都是建立在对提问内容的理解。
4、建立系统的模型
根据你对所提问题的理解,建立粗略、就绪的思维模型骨架。
5、把模型分解为组件
一旦拥有了模型,你可以把它分解为组件。你需要找出描述这些组件怎样交互的数学规则。
6、给每个参数指定值
一旦你分解出各个参数,你就可以逐一给每个参数赋值。在这个步骤中你可能会引入一些错误。诀窍是找出哪些参数对结果的影响最大,并致力于让他们大致正确。在典型情况下,其值被直接加入结果的参数,没有被乘除的哪些参数重要。
7、计算答案
只有在最简单的情况下估算才有单一的答案。在计算阶段,你可能会得到看起来很奇怪的答案。不要太快放弃他们。如果你的运算是正确的,那么你对问题或模型的理解就很有可能是错误的,这是非常宝贵的信息。
8、追踪你的估算能力
记录你的估算,从而让你看到自己接近正确答案的程度。如果证明估算错误,找出事情为何与你的猜想不同的原因,渐渐的就会好了。
9、估算项目进度
- 检查需求
- 分析风险
- 设计、实现、集成
- 通过代码对进度表进行迭代。
- 向用户确认
10、在被要求进行估算时说什么
多给自己一点时间思考,慢点回答,总能得出更好的结果。
注重实效不是一句空话,要实际做到位,以上分享的是一些注重实效的途径,可以根据具体的实际情况,践行之。