写在前面:
这份笔记就是一个导读作用,所以只有第一章。同学们应该简单看看后,买一本《构建之法》。在大一一入学就接触这些,是很有帮助的。
第一章:概论
1.1软件=程序+软件工程
之间的关系
软件=程序+软件工程
程序=算法+数据结构
个人结论:算法和数据结构固然重要,但是你一直执着于竞赛,你是没办法做出软件的。对于大部分人,竞赛还是参与为主。
软件工程的核心部分:构建管理、源代码管理、软件设计、软件测试、项目管理
由此推论
软件企业 = 软件+商业模式
程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个企业的成败。
软件开发的不同阶段
- 玩具阶段
- 业余爱好者阶段
- 成熟阶段
- 成熟的产业阶段
软件工程是什么?
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程
软件与人类制造出来的其他产品相比,有许多共性——他们都是解决某种需求的——所以说需求这件事,还是很重要的
软件开发的难点:
- 复杂性
- 不可见性(你没办法看到机器内部怎么跑的,你只能通过日志之类的。。。)
- 易变性(如何正确修改软件)
- 服从性(服从硬件,服从用户需求)
- 非连续性
软件工程和计算机科学的关系
计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与时间相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会社会的需求息息相关。
孰优孰劣?
在任何科学领域中,都有偏理论的子领域和偏应用的子领域,当偏应用的领域得到长足发展之后,就会更多地被大家熟知,甚至成为一门独立的学科,这并不说明相对应的两方面有高低或优劣之分。
计算机理论的进展会帮助软件工程(例如对程序正确性的分析);软件工程的进展(更好的工具,更多的应用领域)会帮助计算机科学家更有效地进行实验和探索。
软件工程的“工程”二字意味着它和许多工程领域的学科,以及管理学有很大关系
工程师的宗旨:我构建,故我在
软件工程的目标——创造“足够好”的软件
- 用户满意度
- 可靠性
- 软件流程的质量
- 可维护性