【高级软件工程课程总结】

来源:互联网 发布:海贼王衣服淘宝 编辑:程序博客网 时间:2024/06/06 06:51

作者:戴江雄

学号:SA17225051

原创作品转载请注明出处

软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

github地址:https://github.com/JerryLittleBear/experiment.git


1. 课程心得&总结

        在学习高级软件工程课程期间,在孟老师以及两位助教老师的带领下,我们在线上、线下、两个方面学到了两个主要方面的知识:

1.1 线上课堂

        在线上课堂,我们用C语言实现了一个menu小项目。做这个小项目过程中,我们从易到难,先从熟悉linux命令行、github的使用做起,从最基本的一个menu.c文件,慢慢的完善我们的代码,最终实现了一个层次相对分明、有一定模块化程度、能为其他代码提供可重用接口的menu系统。

        看着之前写的那些博客(实验报告),感触颇多,想逐次的概括一下每一篇报告中我做的事:

        首先,我从一个没有接触过linux的小白,第一次接触linux和命令行工具,打开了另一扇世界的大门;接着,在通过代码风格规范的学习,改掉了以前一些不良的编码习惯,提高了代码的可阅读性,现在想想之前的代码,没有基本的风格规范,写完了真是连自己都不想读啊,哈哈。在第三次实验中,我们在主函数menu.c中使用了链表来存放各个命令(包括实现命令的函数,命令名称,命令注释等),并设计了一个接口(另一个.c文件)实现对链表的操作,通过头文件插入到menu.c中,初步实现了模块化。

        接下来算是比较高级的部分,在第4次实验中,我们把链表及其操作(链表数据结构,以及创建链表、增删节点等)放在了linktable.c中,而menu.c中存放实现各项命令的函数,这样让程序进一步模块化,不但如此,还能提高代码的可重用性,因为linktable.c不是专门为menu.c设计的,只要以linktable.h为借口,可以为任何程序使用。

        在第五次实验中,我大开眼界,学到了callback的函数调用机制,可以把遍历链表的函数也放到linktable.c中(之前由于对节点的查找条件必须与menu.c匹配,即输入的字符串与链表中存储的命令字符串相同,无法把searchlinktable函数放在linktable.c中)。我们把查找条件用searchcondition函数放在menu.c中,把遍历链表函数放在linktable.c中,再在遍历链表函数中,回调上层menu.c中的searchcondition函数,用其返回值判断是否返回节点,这样就实现了底层模块调用上层模块,而不仅仅是上层调用底层。其次,我们把linktable结构体也放在linktable.c中,实现了信息的隐藏,增加了程序的安全性。最后,我们还修改了quit()函数的bug,是由于链表遍历过程中不是遍历到尾节点就结束,而是到NULL才结束的,这也帮助我们回顾了链表的相关知识。

        第六次是一个小测试,是对之前回顾的知识的一次小总结,在复习过程中算是有所收获。

        第七次实验,我们最终把menu程序做成一个比较工程化的小项目,首先我们为menu.c设计了接口,让其他程序员可通过menu.h来调用我们的menu程序,还写了范例代码text.c供他人参考学习,其次,我们还用了makefile来实现自动化编译,这是在linux系统下编程所必备的知识,当我们的软件系统越来越庞大复杂,makefile越能体现他的作用和必要性。最后,我们还模仿linux的命令行的那种带参数的命令的模式,通过getopt()函数的应用,来获取我们在输入命令的过程中,命令后带的各种参数,比如-a这样的,可以让一个命令有更加灵活多变的功能及其使用方式。至此,我们的menu程序算是做成了一个比较完整的,带有软件工程意义的程序了。

1.2 线下实验

        在线下课堂的学习中,孟老师用vue.js这个现在十分流行的前端框架为例子进行讲解,鼓励我们自主学习以及同学之间的讨论交流,不但让我们学到了许多前端开发的知识、javascript语言的使用、vue框架的使用等,我们还学会了如何在真实项目中,在解决问题时与同伴、上级沟通交流的许多方法。

        Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js

        在完成线下实验的过程中,我们完成了:用数据劫持的方法实现数据的双向绑定;全面了解vue技术栈,实现一个列表页面和一个表单页面,提交表单进入列表页面,数据存储到mongodb数据库等等的实验,还对软件设计模式中的“观察者模式”有了许多的理解,代码量得到了提升,动手能力也有所增强。


2. 感悟&收获&遗憾

2.1 感悟

        最开始关注孟老师的软件工程课是在今年4、5月份期间,那时候虽然已经确定被录取,但没来过学校,对学校的老师也没有任何的了解。偶然的机会,我在网易云课堂发现了孟老师这门课,怀着向往的心情就加入了这门课,原定在开学之前完成全部的课程,但是由于种种原因没能实现,非常遗憾。开学以后,有缘选到了孟老师的高级软件工程,于是在再次加入线上课堂的同时,能够有更多的时间在孟老师的课堂上学习。在课程总结的线上课程部分,我从实验1到实验7,花了较多了篇幅去写,也算是对我开学前的小愿望的一个交代。

2.2 收获

        话不多说,小结一下本课程的学习收获:

        首先对软件工程这个大概念有了更深的理解,有若干重要的设计原则我们遵守:

1) 模块化思想(关注点分离)

2) 注重接口的设计

3) 信息隐藏

4) 通用性

5) 抽象性

6) 渐增性开发(重构)

        其次,对软件设计模式有了相应概念,认识到其在软件开发过程中能带来的优势和弊端。

        再次,通过线上线下课程的实践,代码量有所提高,编码能力也有所提高。

        最后,得益于孟老师鼓励交流讨论的教学风格的影响,在沟通交流能力方面也有所提高,能够更好的表达自己的想法给小伙伴,这也是今后学习工作中必不可少的技能。

2.3 遗憾

        在学习本课程的过程中,通过线下课程的学习,对观察者模式有了一定程度的认识,但是很遗憾没有更多的时间对软件设计模式有跟多的理解,这是遗憾之一。

        其次,也可以说是遗憾,亦可以看成对本课程的一点小小建议:在线上课程实验5的完成过程中,我们进行了一次debug的操作:找出quit()函数不能执行的原因。但是只有这一次debug的要求,有点遗憾,我认为孟老师可以多设计一些类似的课程要求,因为debug是程序员的必备技能,找出bug的过程中也是艰辛而快乐的。


3. 附录

        之前的实验报告链接:

lab1:http://blog.csdn.net/a251844314/article/details/77996018

lab2:http://blog.csdn.net/a251844314/article/details/78073192

lab3:http://blog.csdn.net/a251844314/article/details/78150026

lab4:http://blog.csdn.net/a251844314/article/details/78248336

lab5:http://blog.csdn.net/a251844314/article/details/78298638

lab7:http://blog.csdn.net/a251844314/article/details/78439978

原创粉丝点击