曳光弹 曳光代码 原型制作 读《读程序员修炼之道》

最近读书《程序员修炼之道:从小工到专家》,看书到第2章 注重实效的途径中,从第10小节曳光弹,到11小节 原型与便笺这两节,相对于整本书中一直都比较顺畅的理解,相对而言这一节可以说是翻译的十分晦涩、生硬,没有上下文和例子的情况下,理解起来十分困难。于是决定写下笔记,写下自己的理解。老实讲,对于外文翻译的书籍,其实中文版的翻译大都是直白的翻译,稍有解释的较为通俗易懂的,这就是所谓的画虎难画骨吧。不过之所以出现理解不顺畅,除了翻译晦涩外,很明显是没有将书中的内容与实际应用结合起来。于是去读大师的英文版原作,有了新的理解。

曳光弹,放到软件开发领域,确实没法让人定位到这到底是什么。我们先看一下它在生活中到底是什么吧,概念呢?原来曳光弹是一种装有能发光的化学药剂的炮弹或枪弹,在发射后会发出红色﹑黄色或者绿色的光,很明显这些颜色可以指示出子弹的轨迹(也称之为弹道)和并可以看到距离目标的差距。


曳光弹 曳光代码 原型制作 读《读程序员修炼之道》

首先从字面意思分析下曳光弹相对于普通子弹的区别,无非是因为他在黑夜中会在开枪后到他们击中目标之间留下一条轨迹,这是因为它的子弹头会在飞行过程中发光发亮,没错黑夜中你可以看到子弹运行过程中烟火般的轨迹,这样在光源不足或者黑夜中就能显示出轨迹。而普通子弹是看不到如何击中目标的,在黑乎乎的夜里要是你能看到普通子弹的轨迹,应该就是所谓的火眼金睛了,普通的人类是没有这种特异功能的。这两者之间的区别无非是曳光弹可以及时反馈轨道,举例目标还有多远,轨道如何。如果软件设计中,反映到代码中,就是能直观的可以让用户尽早看到结果,展示进展,有了可以演示的东西。曳光弹在没有击中目标的时候,还可以让用户看到轨迹。简单来讲,关键就是反馈结果,可以看到目前做出来的东西距离目标还有多少距离(子弹在击中目标前差多远)。

但是软件不是子弹,子弹在空中飞行时其实开枪的人已经无法通过枪来调整子弹的轨迹,而软件可以做到在过程中,不断调整准星,知道击中目标。在软件开发过程中,可以不断修正,使其更加接近目标。因为这个直观性,结果的可视性,用户可以了解到他们要的东西有了实现的基础,而不是纸上谈兵,换言之用户眼中这一切都不是空谈了。

对于实际项目应用的话,举类似的例子。整个项目的目标就是实现一个接口,可以获取到结果。这个项目的过程就是针对这个最初的接口,非常迅速设计实现出来,没错点击后就发现接口的数据被返回了,界面上也显示了结果。尽管它没有漂亮的界面,业务也不完善,数据的获取可能用最简单的算法,没有任何出错检查和其他产品服务,但是这个系统的基本架构其实已经开始做好了。这就是曳光弹中一个基本的骨架部分,后续的开发都在此基础上进行。

再详细些的例子,比如就让做一个第三方平台登录系统购物,初始做一个简单的登录界面,可以登陆成功一个用户的从界面到数据库的调用实现后,这个最初的目标就迅速实现了,尽管登录界面的输入没有任何容错,但是真实调用了api登录函数,找到了一个商品并购买成功,哪怕目前的实现中就这么一个商品,但是这是真实的调用,后续在这上面进行完善就好了。

而原著中开始提到的原型制作,则可以理解为做出来给用户看看后就会扔掉的东西,没有后续完善的必要。原型制作是一种学习经验,其价值并不在于所产生的代码,而在于所学到的经验教训,目的是为了分析和揭示风险。书中原话是“为了学习而制作模型”。适合制作原型的有:架构、已有系统中的新功能、外部数据结构或内容、第三方工具或组件、性能问题、用户界面设计。

总结两者,曳光弹最终会成为系统骨架的一部分,而原型制作确实用完了就扔的代码。那么基于上一段中讲到的原型制作的目的是分析风险,那么原型制作就可以被理解为我们要发射曳光弹前,需要进行正常和情报搜集,以保证发射的轨迹可以更加准确的击中目标。现实的开发中,作为软件开发人员如果有了几年的工作经验,其实很可能接触过的项目中就有是曳光弹这种,只不过不知道在这部大师的著作中被称为曳光弹而已。

每每读书,遇到自己理解困难的部分,反复看几遍有时候就容易卡出了,没有理解的时候真是恨自己知识储备不足。不过当理解后,感觉还是很好的。如果以后接触的开发有了更深的理解,再进行更新下自己的想法和笔记,书真是怎么读都不厌倦啊!