程序员修炼之道(读书笔记):2.注重实效的途径

正交性

该术语用于表示某种不相依赖性或是解耦性。

非正交系统的改变与控制更复杂是其固有的性质。当任何系统各组件互相高度依赖时,就不具有局部修正(local fix)这样的事情。

设计

在程序设计的同时,还要问问你自己,你的设计在多大程度上解除了与现实世界中的变化的耦合?你在把电话号码当做顾客标识符吗?如果电话公司重新分配了区号,会怎样?不要依赖你无法控制的事物属性

可撤销性

如果某个想法是你唯一的想法,再没有什么比这更危险的事情了。

假定在项目初期,你决定采用供应商A提供的关系数据库。过了很久,在性能测试过程中,你发现数据库太慢了,需要采用供应商B的数据库。对于大多数传统项目,你不会有什么运气。大多数时候,对第三方产品的调用都缠绕在代码各处。当如果你真的已经把数据库的概念抽象出来–抽象到数据库只是把持久(persistence)作为服务提供出来的程度–你就会拥有“中流换马”(change horses in midstream)的灵活性。

错误在于假定决策是浇注在石头上的–同时还在于没有为可能出现的意外事件做准备。

要把决策视为写在沙滩上的,而不是在石头上,随时可能将它们抹去。

曳光弹

它适用于新的项目,特别是当你构建从未构建过的东西时。
经典的做法是把系统定死。制作大量的文档,逐一列出每项需求,确定所有未知因素,并限定环境。

原型与便签

我们构建软件原型的目的–为了分析和揭示风险,并以大大降低的代价,为修正提供机会。
原型制作是一种学习经验。其价值并不在于所产生的代码,而在于说学到的经验教训。那才是原型制作的要点所在。
作为能把低级的部分组合在一起的“胶合剂”,脚本语言工作良好。在windows下,VB可以把COM控件胶合在一起。更一般的,你可以使用像perl和python这样的语言,把低级的C库绑定在一起。

领域语言

语言的界限就是一个人的世界的界限。

计算机语言会影响你思考问题的方式,以及你看待交流的方式。每种语言都含有一系列特性–比如静态类型和动态类型,早期绑定和迟后绑定–所有这些特性都在提示或遮蔽特定的解决方案。

估算

估算,以避免发生意外。

当有人要你进行估算时,你要问你自己的第一个问题是,你解答问题的语境是什么?

你妈妈问你何时抵达,可能只是想知道是否准备午餐或晚餐。而一个困在水下的人可能对精确到秒的答案更感兴趣。

关于估算,另一个有趣的是,你使用的单位会对结果的解读造成影响。

所有的估算都以问题的模型为基础。有一个通用的解答方式:去问已经做过这件事情的人。在面对相当大的应用开发的各种问题与反复无常的情况时,普通的估算规则可能会实效。我们发现,为项目确定进度表的唯一途径通常是在相同的项目上获取经验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值