作者写这本书的目的在于缩小我们这个行业中一般的商业实践与大师级别人物及专家们之间的知识差距。许多强大的编程技术在编程领域被大众接受实现之前,都已经在学术论文和期刊之中尘封多年。譬如现今逐渐走进人们视野中的RESTful这个架构,在2000年时也只是Roy Fielding的博士论文而已。
-
软件构建世界
-
软件构件
软件开发的流程:

Figure 1
有时,软件的构建和编码总是被人认为是相同的概念,然而并不是。从某种程度上来说,"编码"是将已经存在的设计机械化的翻译成计算机语言,而"构建"则更多是将一个软件从无到有的创造出来,需要更丰富的创造力和判断力。
在书中,作者使用这样一幅图来描述软件开发的:

Figure 2
- 软件构件的重要性
-
- 构建活动是软件开发的主要组成部分——构建活动在整个软件开发活动总时间中所占比例一般在30%~80%之间,所以其必然会影响项目的成败。
- 构建活动是软件开发中的核心活动——需求分析和架构设计都是在构建活动开始之前就完成的基础性的工作,目的是为了进行更有效的构建;系统测试则是构建活动的后续工作,其用以验证构建的正确性。所以,很明显,构建活动位于软件开发的核心位置。
- 把主要精力集中于构建活动,可以大大提高程序员的生产率——软件开发中,架构师吃掉需求,设计师吃掉架构,程序员,软件食物链的最后一环,消化掉设计。如果一开始就被污染了,整个项目就会具有放射性,到处充满需要修补的缺陷。所以一个项目从最开始就决定了它能否成功。
- 构建活动的产物——源代码——往往是对软件的唯一精确描述——在很多项目中,程序猿可以得到的唯一文档就是源代码本身。需求和设计文档有时并不是最新的,但源代码总是最新的。
- 构建活动是唯一一项确保会完成的工作——一个理想的软件项目在进行构建之前,都要经过谨慎的需求分析和架构设计。一个理想的项目在构建完成之后,也要经历全面的、统计意义上受控制的系统测试。然而现实中并不存在那么完美的软件项目,往往跳过需求和设计阶段而直接进入构建环节。之后又由于有太多的错误要修正而又时间不够,测试环节也被抛到了一遍。但是,无论一个项目的计划有多忙、多糟糕,它都不可能扔下构建活动——这是一个不可或缺的环节。因此,对构建活动进行改进,是改进软件开发过程的一种有效途径。
-
用隐喻理解软件开发
-
隐喻的重要性
重要的研发成果常常来自类比,就像翻译一篇文章,遇到晦涩难懂的词语就将其用近义词来替换,将不理解的东西和一些皆为理解的,且十分类似的东西做比较,就会对不太理解的东西产生深刻的理解。这种方式被称之为"建模"。模型的威力在于其生动性,容易让人把握整个概念,通过它我们可以看到被描述物的各种属性,关系等等……
一个好的隐喻应该是简单的,它与另一些相关的隐喻联系密切,且能够解释大部分实验证据及其他已经观测到的对象。它未必是最新的,事实上一些被新模型所替代的旧模型依然很有用,我们所做的事情的不同,引用到的模型也就不尽如一。
-
使用软件隐喻
隐喻是一个探照灯,而不是一块字迹清晰的路牌。隐喻本身无法告诉我们答案,但却能给我们指一个方向,告诉我们如何去寻找答案,它是一个自发式的方法而非算法。通过将软件开发过程和其他熟悉的活动相联系,隐喻能帮助我们更好地理解寻求解法的过程。
-
常见的软件隐喻类型:
- 写作代码:对于个人规模乃至小型项目来说,写作代码这种隐喻是完全足够了的,它不需要什么规划,想到什么写什么。然而,一个软件项目多半会涉及到承担许多不同职责的很多人。对于写作来说,最重要的是其原创性。就软件构建而言,"努力创造原创成果"的开发效率要远远小于对过往项目的一些设计思想、代码以及测试用例的重用的开发效率。而且最重要的是,在写作时我们常遇到写了一些不想写的东西,然后就把它抛弃掉成为一个半成品,而软件构建则不允许我们这样做,因为已经付出了大量的人力物力,没有那么容易付之一炬。
- 培植系统:该隐喻将软件构建描述成类似播种耕作的情形,一次设计一小部分,编码一小部分,测试一小部分,并将成果一点点的添加到整个系统中。通过每次做一点,将麻烦减至最小。然而这种递进的方式无法对整个过程进行系统的控制。
- 系统生长:这种隐喻认为软件开发的过程就如同牡蛎制造珍珠的过程,是增量式的(增量的,迭代的,自适应的和演进的),就如同珍珠先有一颗细小的沙粒,然后慢慢长成珍珠。软件开发也是,先搭起骨架,然后一点一点增添代码,最后形成系统。其优点在于不会做过多的承诺,其缺陷在于还是不能够十分确切的描述软件构建的过程。
- 建造软件:这种隐喻认为软件开发的过程就像建造房子,需要计划、准备和执行。而事实上,软件工程里面的很多术语都源自建筑工程,譬如:软件架构(architecture)、构建(construction)、基础类(foundation classes)等等。同时还可以把很多建筑学上的模型引申到软件上来,这两者具有很多的相似性。
- 智慧工具箱:这种隐喻是说,在经年累月的开发过程中积累了大量的技术、技巧和诀窍。在开发中学习总结的越多,留在脑海中的工具就越多,在适当的时机就可以拿来运用。
代码大全读书笔记(一)
原文:http://www.cnblogs.com/dyikai/p/4921190.html