构建之法-1章概论
第一章概论主要介绍软件工程涉及的知识点,名词等内容。
在读《构建之法》之前,我对软件的一些知识点和名词不是很了解,在我看了《构建之法》之后,就把我看到的认为重要的记录了下来,
一.软件=软件工程+程序
1. 程序就是指的源程序,就是一行行的代码。程序是建立在数据结构上些算法,还要对数据进行操作,这些数据可以是静态或者是动态的。
软件还需要把数据构建成机器能懂的可执行代码,构建不仅仅是cc和link命令,一个复杂的软件要有合理的软件架构,软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系,编译参数,链接参数,这些都是软件构建的过程。
- 源代码管理或者配置管理:我们需要修改源代码来实现不同的功能,例如有些程序需要配置不同的界面,运行在中文,英文或者其他语言的操作系统上,有些程序还有32位,64位,这些是源代码管理有时候也叫配置管理的问题。
- 软件团队的完成软件的过程:需求分析,设计(软件架构),实现(写数据结构和算法),测试到最后发布软件。
- 程序理解:新的成员需要尽快读懂已有的程序,了解程序的设计。
- 软件维护或服务运营:团队的新老成员一起工作,修复各种各样的问题。
- 这一系列的过程叫做软件的生命周期。
- 软件=软件工程+程序 扩展推论:软件企业=软件+商业模式
二:软件开发的不同阶段。(用航空产业作比较)
1.玩具阶段:例如制造纸飞机的过程。
2.业余爱好阶段:肯特。柯西,一位美国俄勒冈州的居民,用100多个气球和一把椅子飞上了天。
3.探索阶段:美国的莱特兄弟,制造出了飞机。
4.成熟的产业阶段:现在的航空行业。
我们现在的状态就处于第一阶段,在Java上编一些代码,实现其中的几个功能,运行出来没有错误,就算完成任务了,既没有目的,也不具有实用性,没有数据的保存,这些只能作为代码编程最基础的东西,虽然不可或缺,但是也应该在
实现第一阶段的基础上再多花一些时间去研究它,学会追根溯源,这样我们才会收获更多。
三:软件工程是什么?
1.软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上的过程。
2.软件工程包括以下领域:软件需求分析,软件设计,软件构建,软件测试和软件维护。
3.软件工程和下列的学科相关:计算机科学,计算机工程,管理学,数学,项目管理学,质量管理,软件人体工学,系统工程,工业设计和用户界面设计。
4.软件工具:工程师自行开发的工具,软件团队独有的工具也有公开的软件工具,例如编译工具,源代码管理工具,源代码编译工具。也有一些软件工具系统等等。
5.软件是可以运行在计算机及电子设备中的指令和数据的有序集合。
6.软件形式:系统软件:操作系统,设备驱动程序,工具软件。
应用软件:用户使用他们来完成工作,从管理核电厂到写文章,或者是通信,游戏,浏览网页,播放视频。
恶意软件:软件病毒等。
四:软件开发的难题。
1.复杂性:软件是人类创造的最复杂的系统类型,软件的各个模块之间有各种显性关系或者隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以及和技术的速度的增长。
2.不可见性:软件工程师能看见代码,但是源代码不是软件本身,工程师看不到自己的源代码如何具体的在用户的机器上被执行。
3.易变性:软件看上去很容易修改,修改软件比修改硬件容易得多,的那是正确的修改软件是一件很困难的事。
4.服从性:软件不能独立存在,他总是要运行在硬件上面,他要服从系统中其他组成部分的要求。
5.非连续性:人们比较容易理解连续的系统,但是许多软件系统却没有这样的特性。
这些特性前四个是佛瑞斯。布鲁克斯提过的,第五个特性是瓦茨拉夫。拉里奇提过的。
我们现在能体会到的软件编程中的难题只是其中的一小部分,比如易变性,代码很容易进行改变,但是要想使代码能够正确的按照我们需求的功能来实现他,就不是那抹容易了,还有不可见性,
我们能看到只是代码,而不是软件本身,我们只能通过代码来实现所需的功能,至于是怎么执行的,我们都接触不到。
随着以后的学习和编代码的积累,我们会面对更多的难题,从而会对这些性质能有更深的了解。
五.计算机科学和软件工程的不同侧重点。
计算机科学 |
软件工程 |
发现和研究长期,客观的真理 |
短期的实际结果(具体的软件会过时) |
理想化的 |
对各种因素的折衷 |
确定性,完美,通用性 |
对不确定性和风险的管理,足够好,具体的应用 |
各个学科独立深入研究,做出成果 |
关注和应用各个相关学科的知识,解决问题 |
理论的统一 |
百花齐发的实践方法 |
强调原创性 |
最好的,成熟的实践方法 |
形式化,追求简明的公式 |
在实践中建立起来的灵感和直觉 |
正确性 |
可靠性 |
看完这个后,我对计算机科学和软件工程之间有了一个更好的认识,计算机科学是偏向于理论,比较重视理论,耗时更长,研究更深入,追求完美,而软件工程则不需要长期的探究,比较注重实践,
而且生命周期不会太长,注重的是解决问题。
总结:通过《构建之法》的阅读,了解了很多以前不知道的名词和知识点,同时对软件工程有了一个更深的认识,了解了计算机网络和软件工程的区分,这本书很好,相信我以后可以收获更多。
建议:我们要学会对所学过的内容进行总结和对比,这样会有助于我们对内容的掌握。