第一部分 打好基础
第二章 用隐喻来更充分地理解软件开发
计算机科学领域中形象的隐喻描述了软件领域中各种特定的现象和事物,借助他们能够更加深刻理解软件开发的过程。
2.1 隐喻的重要性
建模:将你不太理解的事物和你较为理解且十分类似的事物做对比,对不太理解的事物产生更深刻的理解。
一个好的隐喻应该是简单的,它与另一些相关的隐喻联系密切,且能够解释大部分实验证据及其他已经观测到的现象。
地心说—>日心说
以计算机为中心—>以数据库为中心的转变
一系列”不太合适“的隐喻—>”更好“的隐喻
不是很贴切的隐喻—>更贴切的隐喻
你对隐喻有多理解,也就决定了你对软件开发有多理解
2.2 如何使用软件隐喻
隐喻不会告诉你去哪里寻找答案,而仅是告诉你该如何去寻找答案。
隐喻的作用更像启示,而不是算法。
- 算法是一套定义明确的指令,使你能完成某个特定的任务,算法是可预测的、确定性的、不宜变化的。
- 启发式方法(试探法)是一种帮你寻求答案的技术,但给出的答案具有偶然性,它仅仅告诉你该如何去找,而没有告诉你要找什么。
它们的差别在于其距离最终解决办法的间接程度:算法直接给你解决问题的指导,而启发式方法则告诉你该如何发现这些指导信息,或者至少到哪里去寻找它们。
对于编程来说,最大的挑战还是将问题概念化,编程中的很多错误都是概念性的错误。
能一般性地知道大致如何解决问题,至少也和知道如何解决特定问题一样有价值
应该使用隐喻来提高你对编程问题和编程过程的洞察力;用它来帮助你思考编程过程中的活动,想象出更好的做事情的方法。
2.3 常见的软件隐喻
软件中的书法:写作代码
不需要正规做计划,想到什么写出来就是了
写作注重原创,但代码强调复用以提升效率。
文字写作这一隐喻暗示着软件开发过程是一种代价昂贵的试错过程,而非仔细的规划和设计。
软件的耕作法:培植系统
一次设计系统的一小部分,写一段代码,做一段测试,将成果一点点添加到系统中,小步前进,将每次遇到的麻烦减少到最小。
软件耕作的弱点在于它暗示人们将无法对开发软件的过程和方式进行任何直接的控制。
软件的牡蛎养殖观点:系统生长
需要学会如何一次为软件系统增加一个小部分…以增量方式进行设计、编译、测试。
在进行增量式开发时,我们先做出软件系统的一个尽可能简单、但能运行的版本(不必接受真实的输入,真正对数据处理,产生真实的输出),仅仅需要构成一个足够强壮的骨架,支撑起未来将要开发的真实系统
演进式交付–>敏捷开发/增量式开发
软件构建:建造软件
建造一座房子同软件开发是一致的
应用软件技术:智慧工具箱
把所有的方法、技术以及技巧留在脑海中—合适的时候即可拿来就用
组合各个隐喻
善用隐喻
key point
- 隐喻是启示而不是算法。它们往往有一点随意
- 隐喻把软件开发过程与其它你熟悉的活动联系在一起,帮助你更好地理解
- 有些隐喻比一些隐喻更贴切
- 通过把软件的构建过程比作是房屋的建造过程,我们可以发现,仔细的准备是必要的,而大型项目与小型项目之间也是有差异的
- 通过把软件开发中的实践比作智慧工作箱中的工具,我们又发现,每位程序员都有很多工具,但并不存在任何一个能适应所有工作的工具,因地制宜地选择正确的工具是成为有效编程的程序员的关键
- 不同的隐喻之间彼此并不排斥,应当使用对你最有益处的某种隐喻组合