《构建之法》 第一章 读书笔记

概论

  • 程序=算法+数据结构
  • 软件=程序+软件工程
  • 软件企业=软件+商业模式

软件开发的三个阶段

  1. 玩具阶段。影响只限于自己,比如写程序练习数据结构、算法,参加程序算法比赛。
  2. 爱好者阶段。开始吸引一些社会上的注意,比如写个人网站。
  3. 探索阶段。钻研新技术,应用新技术在软件行业创新。
  4. 成熟阶段。发布的成熟软件系统影响一个公司,一个行业。

软件工程是什么

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括软件需求分析软件设计软件构建软件维护软件测试这几个领域,和计算机科学、管理学、系统工程等多个学科都有关系。

软件开发面临的难题

  • 复杂性。大型软件代码庞杂,各模块之间显性或隐性的依赖关系复杂且越来越复杂,但理解和运用这些复杂性的人没有太大变化。
  • 不可见性。软件工程师看不到自己的代码是如何具体的在用户的机器上被执行的。
  • 易变性。软件看上去很容易修改,但正确的修改软件是一件很困难的事。
  • 服从性。软件服从系统中其他组成部分的要求,还要服从用户的要求、行业系统的要求。
  • 非连续性。软件输入上很小的变化有时会引起输出上极大的变化。

软件工程与计算机科学

工程是创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;或者是在实践中使用一个或多个上述实体;或者是实现这些实体的过程。

计算机科学 软件工程
发现和研究长期的、客观的真理 短期的实际结果
理想化的 对各种因素的折中
确定性、完美性、通用性 对不确定性和风险的管理,足够好,具体的应用
各个学科独立深入研究,做出成果 关注和应用各个学科的相关知识,解决问题
理论的统一 百花齐放的实践方法
强调原创性 最好的、成熟的实践方法
形式化、追求简明的公式 在实践中建立起来的灵感和直觉
正确性 可靠性

几种项目

  • Build To Learn。开发软件、构建系统的目的是作进一步实验,试图发现客观规律或探求某方法的优劣。
  • Build To Show。为了突出展示某个技术的应用。
  • Build To Serve。为了服务一定范围的用户构建的工具等。
  • Build To Win。以在市场上赢得用户为目的而构建的软件。

软件工程的知识结构

生命周期

  • 软件需求
  • 软件设计
  • 软件构建
  • 软件测试
  • 软件维护

专门领域

  • 软件配置管理
  • 软件工程管理
  • 软件工程过程
  • 软件工程模型和方法
  • 软件质量

理论基础

  • 计算基础
  • 数学基础
  • 工程基础

软件工程的目的

  • 研发出符合用户需求的软件。
  • 通过一定的软件流程,在预计的时间内发布足够好的软件。
  • 开发可维护和继续发展的软件。

感想

软件工程告诉我们以怎样的流程和规范开发生么样的软件。在做生成四则运算的课后习题时就有很深的体会。算式很容易就能生成,但是如果仔细考虑用户的需求,那就有很多地方需要注意,比如:

  • 形如“3 +(5)”这样的算式虽然是合法的,但是有意义吗?
  • 要生成小数的话,如何生成适合小孩子算的小数?最开始我想到的是rand()/(double)rand(),但这样的小数处理过后有太多的“0”出现,后来我用的是rand()/(double)(rand()/50),生成过后处理成一位或者两位小数,以不至于让运算过于繁琐。其实还有一种思路是分别生成整数部分和小数部分,再把他们“结合”起来,这种方法显然是可行的,但由于上述算式已经起到了可以令人满意的效果,所以程序里没有用,但实际上这种方法才是更直观、更容易控制的,也就是更容易维护和扩展的。
  • 除法运算是不是让结果过于复杂了?显然是的,不过由于我写的程序可以计算生成的算式的结果,所以需要的话其实可以把结果小数位数过多的算式舍去。
  • 小数和整数以什么样的比例出现?加减乘除这些算符以什么样的比例出现?这些最好都是可以供用户选择的选项。

我的程序详见我之前的一篇博客,这个程序其实还有三点令我不是很满意:

  1. 变量名命名不规范。还好这个不会影响用户的体验。
  2. 对于整数和小数的比例,四个运算符出现的比例没有提供给用户更改的方式。
  3. 为了让每个左括号都有对应的右括号,在生成到算式预定length时不可避免的出现一对括号只扩住一个数字的情况。其实可以在遇到这种情况时修改算式的length

程序能够完善的地方还有很多,甚至能说是无穷无尽的,比如逐渐支持更多的运算符等。这让我很深刻的理解到什么是“在预计的时间内发布足够好的软件”。

猜你喜欢

转载自www.cnblogs.com/thechosenone95/p/9841757.html