您的位置:首页 > 编程语言 > C语言/C++

云课堂软件工程(C编码实践篇)学习之我见

2016-11-19 14:44 288 查看
梁作宇 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

写在前言

很荣幸选择了孟宁老师在中国科学技术大学苏州研究院开设的“高级软件工程”这门课。软件工程作为一门具有主导地位的专业课,孟宁老师用一种全新的授课方式——网易云课堂线上教学,以另一种思维模式,巩固与延伸了我们在线下对课本知识的理解,提高与锻炼了我们实践与应用能力。在这短短的八周学习时间里,获益颇丰。

软件工程之我见

根据IEEE,在软件工程术语汇编中的定义为,软件工程是:

1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;

        2.在1中所述方法的研究。

软件工程对于IT软件行业来说是最基础最根本的学科,一款成功的软件开发周期要从分为三个阶段:

1.定义阶段:可行性研究、初步项目计划、需求分析;

2.开发阶段:概要设计、详细设计、编码与实现、测试;

3.运行和维护阶段:发布、运行与维护。

那么针对于软件工程(C编码实践篇)这门课程,基于代码层面的软件工程又该怎么理解呢?

在线上的六次代码实验和一次线上小测的过程中,我们将一个menu菜单程序从简单的hello world式的小程序,逐步发展与完善,比如规范代码风格、使代码模块化、增加代码可读性、使用链表的操作、设计成可重用的子系统等等。这个过程,将一个简单、朴实无华的小程序,变身为高大上,具有一个严谨框架规范的、符合软件工程要求的程序。

七次线上课程的实验,使程序更趋于完美和严谨,这就是软件工程这门课的初衷,也是软件工程这门学科存在的意义。

C编码实践篇学习之心得

线上开设实验课,对于本人来说是一种全新的体验。刚开始接触网易云课堂和实验楼的我,显得有些力不从心,遇到了一些小麻烦。不过都只是一些平台上的操作问题,在实验一次后,这些“不起眼”的小问题都能迎刃而解。线下孟宁老师对软件工程这门课进行讲解,线上通过代码层面来让我换一个角度和思维去理解软件工程。网易云课堂的软件工程C编码实践篇这门课程,它还让我们熟悉了Linux环境的一些操作和Git的一些操作。对我而言,收获颇丰。

每一次的实验都是有紧密关联的,层层递进,正体现了一个代码的优化与完善。这正是软件工程的意义所在。同时,值得注意的是,从第五次实验开始,到第七次实验,代码的难度陡然增加,本人花费了较长的时间去完成,有的时候我觉得这些时间是毫无意义的,但是老师说,这种找错纠错的过程,本身就是提高。举个例子吧,Makefile文件的编写,我就一直出错,后来查明真相,是空格和Tab键的原因。还有callback的含义和使用,在询问同学、查阅资料后,花了两天的时间,才完成任务。与其说是浪费时间,不如说这些时间是真真正正地让我学到了知识,学到了本事!

线上课堂和实验,这种全新的授课方式,让人耳目一新,一来可以节省线下课堂的时间,二来巩固与延伸了线下授课内容和知识。作为已经快要完成这门课程的学生来说,我是极力支持这种教学模式的,并希望能将其推广。

最后说一句,作为一个学软件的工科生,实践永远是第一位。线上课程多敲敲代码,找找BUG,永远是学习软件开发的不二法门!

实验目录与感 

友情提示:实验链接加大醒目!

1、课程简介:

识人与识别代码工程质量的类比

2、熟悉Linux实验环境:

  工欲善其事必先利其器

  实验一:写一个hello world小程序

http://www.shiyanlou.com/courses/reports/1244367

这次是第一次在课堂上和同学们一起使用,并且互评,觉得这种学习方式有利于同学们共同进步,本实验比较简单,主要是让学者熟悉实验楼的用法,熟悉并掌握

Linux的基本操作,编写简单的hello
world小程序。

3、代码风格规范:

  课程实验项目要求

  简约而不简单

  实验二:命令行菜单小程序V1.0

https://www.shiyanlou.com/courses/reports/1244972

实验二要求实现命令菜单小程序,本实验老师要求重视实验代码规范,并且以后的实验代码都要规范,主要的代码规范包括:缩进4个空格、所有的“{“和”}”要独占

一行,上下之间成对的“{}”要对其等等,养成良好的代码习惯,不仅有助于我们自己看代码,也有助于其他程序员阅读代码,好的代码习惯将对我们受用一生。

4、基本的模块化设计

  Separation of Concerns

  实验三:内部模块化的命令行菜单小程序V2.0

https://www.shiyanlou.com/courses/reports/1245399

通过此次学习,加深了对程序模块化重要性的认识,在以后的学习工作中,注意把代码的业务逻辑和数据存储使用不同的源文件实现。此次实验也加强了我的编码

能力与动手能力。

5、可重用模块的接口设计

  天王盖地虎

  实验四:用可重用的链表模块来实现命令行菜单小程序V2.5

https://www.shiyanlou.com/courses/reports/1246275

本次实验中用到了#ifndef以及#endif,这是一个新的知识点,我开始了解并掌握他们的用法,这是一个进步和提高。

    每次的实验内容都是层层递进,对我们模块化编程与规范化编程都有很大的帮助,改善了我们之前的代码风格和习惯,受益匪浅。

6、可重用模块的接口设计(callback函数)

  卧底

  实验五:用callback增强链表模块来实现命令行菜单小程序V2.8

https://www.shiyanlou.com/courses/reports/1247037

本次实验还是有一定难度的,自己做的时候遇到很多问题,在同学的帮助下才艰难完成。这次实验我学会了callback的使用,对回调函数有了更深刻的认识。同

时我也进行了代码的解压和拷贝,前几次尝试时都操作错误,这说明我在这方面的不熟练,希望在课下时间能多多练习。高软实验的难度逐渐加大,我也越来越力不

从心,可见我的水平还是不够的,希望能及时查缺补漏,赶上其他同学的进程和水平。

7、函数的可重入性(reentrant)及线程安全浅析

  一家人早上抢厕所

  实验六(测验):函数的可重入性(reentrant)及线程安全

8、子系统的可重用设计

够用就好

  实验七:将menu设计为可重用的子系统

http://www.shiyanlou.com/courses/reports/1248078

这是实验楼最后一次实验,也是这个系列难度最高的一次实验。做的时候比较谨慎,不过错误也很多,在实验五的linktable.c和linktable.h的基础上,了解了如何

使用getopt函数获取命令行参数,以支持带参数的复杂命令。 同时我还学会了利用Makefile文件进行编译与运行,使用户可以使用make和make clean来编译程序和清

理自动生成的文件。本次实验使我收获很多,同时认识到了自己的不足之处,希望在以后的学习和工作中能够不断提高自己
980c
的编码能力。


总结与感谢

网易云课堂授课方式的确很新颖,值得推广。感谢孟宁老师这段时间的授课与教学,还有三位助教学长、同学的帮助与指导。

我不仅完成了软件工程这门课的学习,还充分认识到了自己的不足之处,通过线上实验与学习,强化与巩固了我的实践代码能力,纠错找错能力,这是最难能可贵的。

遗憾是有的,实验过程的效率不高,让我浪费了许多很宝贵的时间。不过这同样也是一笔珍贵的财富,让我充分理解了程序的内涵与概念,强化了所学的知识水平。还有,我对Linux操作、Git操作尚有不足之处,这也是一大遗憾,希望能在以后的学习工作中,加强重视,完善自我!

最后,再一次感谢孟宁老师!由衷致谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息