程序=数据结构+算法。
但是软件行业赖以生存的“软件”,程序员用来安身立命的“程序”到底是什么?
对需求从一个简单的程序,扩展到一个满足各种功能的应用程序,再扩展到一个能保证服务质量的软件服务。
程序,源程序,就是一行行的代码。
一个复杂的软件不但要有合理的软件架构,软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系,编译参数,链接参数等等,这些都是软件构建的过程。
专业名词:源代码管理、配置管理、质量保证、软件测试、需求分析、程序理解、软件维护或服务运营、软件的生命周期、软件项目的管理、用户体验、国际化和本地化。
以上和软件开发活动相关的内容,是软件工程的核心部分,所以,一个推论是:软件=程序+软件工程。
一个拓展的推论是:软件企业=软件+商业模式。
程序(算法,数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式影响了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
软件工程是什么?
软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试、和软件维护。
软件可以分为:系统软件、应用程序、恶意软件。
软件开发具有复杂性、不可见性、易变性、服从性、非连续性。
在软件工程发展的短短几十年中,人们整理了许多原则和规律:
“没有银弹”:不会有任何单一软件工程上的突破。能够让陈虚谷开发的生产力得到一个数量级(10倍)的提升。
霍夫斯塔特定律:实际时间总是比预期要长,即便你考虑到了霍夫斯塔特定律。
人月公式:Person*Month=2.4*KLoC1.05
软件工程,就是和“Bug”打交道,Bug的多少可以直接衡量一个软件的开发效率,用户满意度,可靠性和可维护性。
可是,是Bug还是功能?不同的人有不同的答案。我们需要做到的三点是:
1.研发出符合用户需求的软件。
2.通过一定的软件流程,在预计的时间内发布“足够好”的软件。
3.能证明所开发的软件是可以维护和继承发展的。