高级软件工程-读书笔记之思想篇
2015-11-13 18:47
218 查看
虽说本科的时候学过软件工程这门课程,却因为缺少项目编程实践,所以对其理解得不是很透彻。但是在研一的继续学习却有了更为深刻的理解和体会,究其原因除了一而再的受教,更多的是理论与实践的结合。那么,高级软件工程这门课究竟给我带来了什么样的心得呢?
软件工程是一门需要大量实践时间的学科,如果我们只是上课听一听,跟着老师,课本敲一敲代码而已,课后完全没有自己的练习,那无疑是学不好软件的。在这两个多月的学习中,我不仅在课堂上学到了理论知识,更重要的是每周的实验实践以及助教的负责检查和指导,让我不断地进步。
一般有过面向对象编程的人来说,最头疼的估计就是设计了。一个好的项目,设计至少要占到50%甚至更多,那么问题来了,什么样的设计才是好的设计,以及如何才能做到?这就需要软件工程思想来指导。
软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。
软件的质量因素有很多,比如正确性、性能、可靠性、容错性、易用性、灵活性、可扩展性、可理解性、可维护性等。
软件工程的主要环节有人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等。
常见的软件工程模型有线性模型、渐增式模型、螺旋模型、快速原型模型、形式化描述模型等。
软件工程多年的发展已经积累了相当多的方法,但这些方法不是严密的理论,我们应该学会选择合适的方法和产生新的方法,“复用”和“分而治之”是两个行之有效的策略,也是在实验中代码编写的关键思想。
复用就是指“利用现成的东西“,文人称“拿来主义”。复用不是人类懒惰的表现而是智慧的表现,正是因为我们总是在继承前人的成果,不断加以利用、改进和创新才会进步。把复用的思想用于软件开发,就能避免重复造轮子。复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生成率。
分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。把这个思想应用于软件开发时,我们要考虑复杂问题分解后的每个问题能否用程序实现?所有的程序最终能否集成为一个软件系统并有效地解决原始的复杂问题?
在现实情况中,由于条件的千差万别和技术的日新月异,没有哪一种软件标准能长盛不衰,所以我们要与时俱进,敢于创新,不能过分依赖和套用一些示例。
软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增加新手,可能会延误项目。因为新手会产生很多新的错误,使项目混乱;老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。
对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大。
正所谓,不想当将军的士兵不是好士兵。作为一名合格的程序猿,不仅仅只是码代码来实现系统需求,更应该去培养软件工程的思想。在编写代码的时候,多以软件工程化的思想去推敲考究,看是否能将代码写得更漂亮,更优秀。闲的时候可以设想一下,如果自己是软件架构师或项目经理,该如何设计整个软件开发周期,预测在开发过程中可能遇到的问题及相应的解决方案。只有时刻准备着那个职位,才有机会获得那个职位,机会是留给有准备的人的,不是吗?
附录:实验内容以及实验报告和代码
实验一:写一个“Hello World”小程序
实验一报告
实验一代码
实验二:命令行菜单小程序V1.0
实验二报告
实验二代码
实验三:内部模块化的命令行菜单小程序V2.0
实验三报告
实验三代码
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
实验四报告
实验四代码
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
实验五报告
实验五代码
实验六:函数的可重入性及线程安全
实验六测验
实验七:将menu设计为可重用的子系统
实验七报告
实验七代码
潘凯特
原创作品转载请注明出处
《软件工程(C编码实践篇)》 MOOC课程http://mooc.study.163.com/course/USTC-1000002006
软件工程是一门需要大量实践时间的学科,如果我们只是上课听一听,跟着老师,课本敲一敲代码而已,课后完全没有自己的练习,那无疑是学不好软件的。在这两个多月的学习中,我不仅在课堂上学到了理论知识,更重要的是每周的实验实践以及助教的负责检查和指导,让我不断地进步。
一般有过面向对象编程的人来说,最头疼的估计就是设计了。一个好的项目,设计至少要占到50%甚至更多,那么问题来了,什么样的设计才是好的设计,以及如何才能做到?这就需要软件工程思想来指导。
软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。
软件的质量因素有很多,比如正确性、性能、可靠性、容错性、易用性、灵活性、可扩展性、可理解性、可维护性等。
软件工程的主要环节有人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等。
常见的软件工程模型有线性模型、渐增式模型、螺旋模型、快速原型模型、形式化描述模型等。
软件工程多年的发展已经积累了相当多的方法,但这些方法不是严密的理论,我们应该学会选择合适的方法和产生新的方法,“复用”和“分而治之”是两个行之有效的策略,也是在实验中代码编写的关键思想。
复用就是指“利用现成的东西“,文人称“拿来主义”。复用不是人类懒惰的表现而是智慧的表现,正是因为我们总是在继承前人的成果,不断加以利用、改进和创新才会进步。把复用的思想用于软件开发,就能避免重复造轮子。复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生成率。
分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。把这个思想应用于软件开发时,我们要考虑复杂问题分解后的每个问题能否用程序实现?所有的程序最终能否集成为一个软件系统并有效地解决原始的复杂问题?
在现实情况中,由于条件的千差万别和技术的日新月异,没有哪一种软件标准能长盛不衰,所以我们要与时俱进,敢于创新,不能过分依赖和套用一些示例。
软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增加新手,可能会延误项目。因为新手会产生很多新的错误,使项目混乱;老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。
对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大。
正所谓,不想当将军的士兵不是好士兵。作为一名合格的程序猿,不仅仅只是码代码来实现系统需求,更应该去培养软件工程的思想。在编写代码的时候,多以软件工程化的思想去推敲考究,看是否能将代码写得更漂亮,更优秀。闲的时候可以设想一下,如果自己是软件架构师或项目经理,该如何设计整个软件开发周期,预测在开发过程中可能遇到的问题及相应的解决方案。只有时刻准备着那个职位,才有机会获得那个职位,机会是留给有准备的人的,不是吗?
附录:实验内容以及实验报告和代码
实验一:写一个“Hello World”小程序
实验一报告
实验一代码
实验二:命令行菜单小程序V1.0
实验二报告
实验二代码
实验三:内部模块化的命令行菜单小程序V2.0
实验三报告
实验三代码
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
实验四报告
实验四代码
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
实验五报告
实验五代码
实验六:函数的可重入性及线程安全
实验六测验
实验七:将menu设计为可重用的子系统
实验七报告
实验七代码
潘凯特
原创作品转载请注明出处
《软件工程(C编码实践篇)》 MOOC课程http://mooc.study.163.com/course/USTC-1000002006
相关文章推荐
- 1026. Table Tennis (30)
- 浅谈C++容器(四)
- 1026. Table Tennis (30)
- Alitum Designer 如何查找没有 封装 的 元件
- Android四大组件之BroadcastReceiver
- 几个对字符串进行操作的函数
- 毕业以后
- Poj1833 20151113
- android-PullToRefresh集成使用心得
- 设计模式--原型模式
- 浅谈C++容器( 三)
- Darwin Streaming Server程序结构分析
- 自己关于Android 通过WebService进行网络编程的总结
- 树状接口Sql分页
- 音响发烧友可以听出电源是水电还是火电
- elasticsearch2.0源码在开发环境eclipse中启动的问题及解决方案
- 基本排序算法(全)
- IOS启动页设置适应ios8/9
- Maven项目转化为Web项目
- 通过Libvirt控制KVM虚拟机资源的方法