软件工程(C编码实践篇)学习总结
原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 ”
一、软件工程的理解及学习软件工程(C编码实践篇)的心得
作为一个跨专业的学生,虽然以前没有接触过这类知识,但是从孟宁老师所讲授的高级软件工程(C编码实践篇)课程中学到了很多新知识,这门课程涉及到的知识很广泛,通过课程与实验相结合的方式给学生提供了很多锻炼的机会,这种方式大大的提高了我们的动手能力,同时扩展了我们获得知识的渠道。孟宁老师作为中国科学技术大学的老师非常平易近人,上课认真,思路清晰,举例通俗易懂。在这门课中,他带着我们学习怎样从写一个简单基础的“Hello World!”小程序,不断的结合github代码托管平台、模块化、可重用链表模块、Callback、线程安全、Makefile工程文件等高级软件工程的思想,最终实现了一个可重用的菜单子系统,使得我们动手实践的能力得到提升。
在课程学习期间,通过观看老师的课程视频,学习理论知识,进而很好的完成线上实验,收获颇多。线上实验主要是利用实验楼这一平台进行实际操作,后期我又在自己的电脑上安装了虚拟机,所以有几个实验是在虚拟机环境下做的。未学习这门课之前,我总是简单的认为在一个软件的开发中,程序员只要根据要求把代码写好就可以了,学了高级软件工程后才知道要按照工程化方法去开发软件,不只是简单的完成客户需求,还需要后期维护,这其中就涉及到对代码风格规范的要求,接口规范和通用原则,callback函数的使用,子系统可重用的设计的引出等等,这些都是我之前没有接触过的知识,在完整地学习了孟宁老师的课程后,完成线上代码练习,掌握了在linux系统下进行软件开发的具体过程,熟悉了linux环境,以及linux下的一下常用命令,最终实现了一个通用的命令行的菜单子系统。从hello world开始不断迭代调试代码,学到了在做实际项目中并不鼓励从头开始写代码,而是找已有类似项目做逆向工程和再工程。从最开始连实验环境都不会搭建到模块化设计的代码,到可复用的代码和回调函数等接口设计,在老师的一路带领下,顺利地完成了高级软件工程课程的学习,让我对软件工程有了一个清晰的认识。学习过程中的一些细节可以让我感受到老师的用心,尽力把每一节课都讲得生动形象,注重和学生的互动。
二、线上实验总结
熟悉Linux实验环境
实验一:写一个hello world小程序
实验一报告
实验一代码
小结:通过本次实验掌握了实验环境的搭建,学习了linux下的各种命令和vim的基础指令,加深自己对C语言编码的实践能力,同时对git指令进行复习和巩固以及Git版本库的使用。
代码风格规范
实验二:命令行菜单小程序
实验二报告
实验二代码
小结:通过本次实验学习了缩进、命名、注释等代码编排的风格规范,代码风格的原则:简明、易读、无二义性,规范的代码编写目的是提高程序的可读性,养成良好的编码习惯,可以为自己和他人带来很多便利。
基本的模块化设计
实验三:内部模块化的命令行菜单小程序
实验三报告
实验三代码
小结:本次实验在在实验二代码规范化的基础上将系统抽象为两个层级:菜单业务逻辑和菜单数据存储。开始介绍模块化思想,并且突出了链表的重要性,设置接口,使程序更加清晰,增强可读性,代码的业务逻辑和数据存储之间的分离。
重用模块的接口设计
实验四:用可重用的链表模块来实现命令行菜单小程序
实验四报告
实验四代码
小结:本次实验在对前一次的模块化代码进行进一步完善,使功能更加完成,并且可重用,学习了接口规范,了解内聚和耦合(讲究高内聚低耦合),通用原则。
可重用模块的接口设计(callback函数)
实验五:用callback增强链表模块来实现命令行菜单小程序
实验五报告
实验五代码
小结:本次实验沿用了之前的模块化思想和基本的代码内容,并且新增了一些脚本指令,通过这次学习,加深了对链表的认识,也更熟悉了开发环境的代码操作,应用callback函数的方法来增加模块通用性,实现信息隐藏。
实验六:函数的可重入性(reentrant)及线程安全浅析[实验六测试]
小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。
子系统的可重用设计
实验七:将menu设计为可重用的子系统
实验七报告
实验七代码
小结:本次实验,为menu子系统设计了接口,用户范例代码实现原来的功能,学会写Makefile工程文件,使用 make和make clean编译程序和清理自动生成的文件,使menu子系统支持带参数的 命令,学习了支持带参数的 复杂命令的方法,首次使用了fgets、getops等函数。
三、总结
学习了孟宁老师的高级软件工程(C编码实践篇)课程,我的收获非常多,这是理论与实践结合的非常好的一门课程。纵观整个线上课程的安排以及线上实验的设置,孟宁老师用心良苦,在老师的引领下,我们运用软件工程的设计思想通过不断迭代实现了一个“可重用的菜单子系统”,其中软件工程思想和C编码实战相结合,理论联系实际,有利于我们更好的掌握软件工程的思想。这门课程具有完整的体系和完备的设计思想,使得我对软件工程有了更深入的认识和理解。我们在软件工程开发过程中,要注重代码规范、设计规范、模块化、线程安全、子系统要可重用等,只有这样才能写出易读而又高效安全的代码。对于之前并没有接触过软件工程这方面内容的初学者,受益匪浅。
收获
本门课程使得我对软件工程有了更深入的认识和理解,将软件工程的思想运用到C编码实战之中。最大收获就是,代码规范很重要。此外,对之前比较模糊的线程安全和可重用函数有了清晰的认识。通过亲自动手实验,我对软件工程有了更深的认识,进一步理解了软件工程的思想方法,懂得了如何才能更好的设计出一个符合工程化的思想方法的软件。要想写出好的软件,需要考虑很多方面,如模块化,可重入,线程安全,注意高内聚、低耦合等。由此可见,设计出一个好的软件系统需要考虑很多,要不断优化,持续改进。
遗憾
遗憾的是没能写更多的代码,没有在学习之余学习一些软件工程方面其他相关的知识,没能把软件工程课上学习到的知识运用在更多的项目中。希望自己在以后的学习生活之余,多学习新知识,并能够熟悉掌握一个软件开发的流程。