软件=程序+软件工程
软件企业=软件+商业模式
工程师的宗旨是:我构建,故我在
程序在这里指的是源程序,就是一行行的代码,它们是建立在数据结构上的一些算法。程序对数据进行操作,工程师把它们构建为机器能懂的可执行代码。构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。
软件工程:和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容,是软件工程的核心部分。是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。广义上的软件工程也包括用户体验、用户界面设计等等。是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程的工程二字意味着它与许多工程领域的学科,以及管理学科有很大关系,创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;或者是在实践中使用一个或多个上述实体;或者是实现这些实体的过程。
软件开发过程有以下五点的难题:
1.复杂性: 软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增加,这些关系的数量往往以几何级数的速度增长。
2.不可见性:软件工程师能直接看见源代码 ,但源代码不是软件本身,工程师看不到自己的源代码是如何具体地在用户的机器上被执行的。
3.易变性 :软件看上去很容易修改,修改软件比修改硬件容易多了。但其实正确的修改软件是一件很困难的事情。
4.服从性:软件不能独自存在,它要运行在硬件上面,要服从系统中其他组成部分的要求,服从用户的要求、行业系统的要求。
5.非连续性:许多软件系统没有增加输入就能看到相应输出增加的特性,有时输入上很小的变化,会引起输出上极大的变化。
软件的行为和用户所期望的不一样就叫Bug。而我一直认为的是程序的错误,缺陷。
Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。
用户满意度:用户在使用时发现了软件的很多问题,影响了用户使用软件的效率
可靠性:某个软甲经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登不上去(就好像我们学校的EOL)
软件流程的质量:软件团队的BUG
可维护性:修复了一个问题,不能另一个问题又出来,这样反反复复,浪费时间和资金。
通过本书的学习,要做到以下三点:
1.研发出符合用户需求的软件
2.通过一定的软件流程,在预计时间内发布“足够好”的软件(通过全队的努力,在一个长期阶段内逐步完成)
3.能证明所开发的软件是可以维护和继续发展的。
我们学习从写简单的代码一步步到写复杂的代码,正如书上所说,我用C语言实现了二叉树的遍历算法,但这个程序有什么实际用处呢?读到后面我知道了程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。我们现在分了计科和软工的方向,书中提到了计算机科学和软件工程的不同侧重点,计算机理论的进展会帮助软件工程(例如对程序的正确性分析);软件工程的进展会帮助计算机科学家更有效地进行实验和探索。书中说到工程师的宗旨是:我构建,故我在。虽然现在的我还不能称为工程师,但我一定会以这条宗旨为目标而前进。现在我们首先要做的是发现用户的需求是什么,才能根据用户的需求去开发后续的工作。本书在无聊的概念之中插入了无数的例子,能让我有更好的理解,这样很好,不然只是通过概念无法得到深入的理解。