//2018-10-4    代码大全读书笔记(1)

1.软件构造

       a.软件开发过程中的不同活动:

         定义问题、

         需求分析、

         规划构造、

         软件架构(或高层设计)、

         详细设计、

         编程与调试、

         单元调试、

         集成测试、

         集成、

         系统测试、

         保障测试

       b.在不太正规的项目中,你考虑创建软件的问题时所想到的那些主要活动,很可能就是你研究者们称之为“构造”的活动。

       c.构造活动主要关注与编程与调试,但也包含详细设计、单元测试、集成测试以及其他一些活动。

注:具名变量就是使用const修饰的变量。

/* 非构造活动:

              管理、

              需求分析、

              软件架构设计、

              用户界面设计、

              系统测试、

              维护;

*/

2.软件构造重要性的原因

       a.构造活动是软甲开发的主要组成部分(构造活动在整个软件开发活动总时间中所站得比例一般在30%到80%之间);

       b.构造活动是软件开发中的核心活动(系统测试属于构造活动的后序工作);

       c.把主要精力集中于构造活动,可以大大提高程序员的生产率;

       d.构造活动的产物-源代码—往往是对软件的唯一精准描述;

       e.构造活动是唯一一项确保会完成的工作;

3.要点:

       a.软件构造是软件开发的核心活动;构建活动是 每个项目中唯一一个必不可少的工作;

       b.软件构造的主要活动包括:详细设计、编程、调试、集成、开发者测试(包括单元测试和集成测试);

       c.构造活动被称作“编码“和”编程“;

       d.构造活动的质量对软件的质量有着实质性的影响;

4.软件开发的理解(隐喻的使用)

       a.隐喻的重要性:

        重要的研发成果常常产自类比。通过把你不太理解的东西和一些你较为理解、且十分类似的东西作比较,你可以对这些不太理解的东西产生更为深刻的理解。这种使用隐喻的方法叫做“建模“。

       b.如何使用隐喻

        与其说一个软件隐喻像是一张路线,还不如说它是一盏探照灯。它不会告诉你在哪里去寻找答案,而仅是告诉你该如何去寻找答案。隐喻的作用更像启示,而不是算法。

/*

       注:算法是一套定义明确的命令,使你能完成某个特定的任务。算法是可预测的、确定性的、不易变化的;启发式方法。

       注:算法和启发式方法的区别?

              算法直接告诉给你解决问题的指导,而启发式方法则告诉你该如何发现这些指导信息,或者至少到哪里去寻找他们。

*/

5.常见的软件隐喻

       a.软件中的书法:书写代码

       对于个人规模的工作乃至小型的项目来说,这种写信的隐喻已经足够了,然而对于其他场合而言,这个隐喻还远远不够—它没有完整、充实地刻画软件开发工作。

       b.软件的耕作法:培植系统

        相对于前面呆板的写作所作的隐喻,一些软件开发人员则认为应当将创建软件想象成类似播种和耕作的情形。(软件耕作这一隐喻的弱点在于它暗示了人们将无法对开发软件的过程和方式进行直接的控制。)

       c.软件的杜蛎养殖观点:系统生长

        杜蛎制造珍珠的过程,逐渐地填增微量的碳酸钙。这里并不是说要你学会如何从水流中夹带的沉积物中提炼出代码来,而是说你需要学会如何一次为软件增加一个小部分。仅仅需要构造一个足够强壮的骨架,支撑其未来将要开发的真实系统。对于你标志出的每一项基本功能,可能仅需要调用虚假的类。这个最基本的起点,就像杜蛎开始孕育珍珠的那颗细小的沙粒。

/*

       作为一个隐喻而言,增量式开发的优势在于未作过度的承诺。比起耕作那个隐喻来,对它作不恰当地引申要更困难一些。杜蛎孕育珍珠的图景也很好地刻画了增量式开发(或说生长)的情形。

*/

       d.软件构造:建造软件

        与“写作”软件或者“培育”软件而言,“建造”软件的图景就更加有用了。它和软件生长的概念是相通的,且提供了更详细的指引。建造软件这一说法暗示了软件开发中存在着诸多阶段,如计划、准备及执行等,根据所建筑软件的不同,这些阶段的种类和程度可能会发生变化。

6.要点

       a.隐喻是启示不是算法,因此他们往往有一点随意;

       b.隐喻把软件开发过程与其他你熟悉的活动联系在一起,帮助你更好地理解;

       c.有些隐喻比其他一些隐喻更贴切;

       d.通过把软件的构造过程比作是房屋的建设过程,我们可以发现,仔细的准备是必要的,而大型项目和小型项目之间也是有差异的;

       e.通过把软件开发中的实践比作是智能工具箱中的工具,我们发现,每位程序员都有许多工具,但并不存在任何一个能适用于所有工作的工具,因地制宜地选择正确工具是成为能有效编程的程序员的关键;

       f.不同的隐喻彼此并不排斥,应当使用对你最有益的某种隐喻组合。

10-04 20:24