您的位置:首页 > 其它

软件工程(C编码实践篇)学习总结

2017-11-09 19:31 302 查看

原创作品转载请注明出处

班级:嵌入式一班,学号:SA17225041,姓名:储博,网易云昵称:黑喜

MOOC课程:http://mooc.study.163.com/course/USTC-1000002006

一、学习心得

  我本科学习的是自动化专业,所学课程中涉及到一些C语言的编程,但是并没有树立起专业、良好的编程习惯和工程化的思想。因为深知自己的不足之处,于是选择了孟宁老师的高级软件工程的课程,来帮助自己迈进软件工程的大门。从孟宁老师所讲授的软件工程(C编码实践篇)中,我不仅精进了C语言编程,对基本的数据结构有了更深的理解。更重要的是,通过线上课程与课后作业将书本中软件工程的知识与实际的工程编程结合了起来。至此书本上所讲述的知识不再只是简单的文字,而是赋予了更加实用、更加高效的实际意义。作为中国科学技术大学软件学院的授课老师,孟宁老师本着认真、负责、专业、专注的态度,保持着对热门技术的持续关注,对我们进行了基础与拔高并进的知识传授,开阔了一名本科非软件工程学生的眼界与知识面。课程中,孟宁老师演示了如何从一个简单的“Hello
World!”小程序,结合github、Coding等代码托管平台,将模块化、函数的可重用性、Callback、线程安全、Makefile工程文件等优秀的编程思想贯穿其中,一步步将其实现成一个可重用的菜单子系统,由浅入深,循序渐进。

  在理论知识传授上,每周老师都会更新一个特定主题的课程,从代码风格规范到代码背后的软件工程相关的设计思想,结合作业要求的内容,围绕着我们所做的实践来进行理论讲解,我觉得教学效果要好于单纯的文本教学。对于一名跨专业的学生,这部分的理论知识虽然基础但需要好好消化并在作业中加以实践。

课程讲解中我的收获有以下几个部分:

  代码风格规范,对于一个初接触编程的学生来说,其重要性不亚于建筑的地基。程序员写出的代码如同程序员的第二张脸,代码风格很容易就体现出程序员的专业素养。代码风格的原则:简明、易读、无二义性。这就要求代码不仅要能让计算机正确地识别,更多的是要让程序员同行易于阅读。好的编码习惯比如代码缩进4个空格、明确行宽、勤用英文注释、多条语句和多个变量定义不在同一行,在团队协作和交流中有重要作用。

  模块化思想中的”开-闭”原则(对扩展是开放的,对修改是封闭的)。将业务逻辑层和数据存储层分开,并将系统模块放在不同的源文件有助于提高信息的隐藏。了解了代码设计中的一些常见方法:KISS(keep it simple & stupid)、usingdesign
to frame the code(matching design with implementation)、including pseuducode、不要和陌生人说话原则。以及要合理利用ControlStructures、Data Structures来简化代码,一定要有错误处理。

  了解了接口的五个要素:

  Purpose:如函数名表明了接口的目的

  Preconditions:如接口函数调用前的准备条件

  Protocols:如参数和返回值的类型、指针所指的数据格式

  Postconditions:如返回值、printf函数接口的效果是在屏幕显示

  Qualityattributes如接口函数的执行时间限制

  接口的两个隐含属性:前置条件和质量属性

  明确了可重入函数和不可重入函数,以及与线程安全的关系

  Makefile工程文件也是代码,要考虑其可维护性,make从Makefile的第一个目标all开始执行,大大方便了复杂编译命令的输入,提高了效率。同时注意Makefile文件的编写规范,它不支持4个空格来代替Tab键。

  而线上实验部分则是将线上课程中传达的软件工程思想应用到实际编程之中,每次实践之后写一篇总结性的博客来巩固所得的知识。在这一部分的学习,我更多的是学习到如何将软件工程思想贯彻在代码之中,同时也熟悉了Linux系统的基本命令。每一节课程之后都对应一个实验,最终目的是应用课程中学习的知识实现一个“可重用的菜单子系统”。每次的试验都有不一样的心得体会:

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78006497

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab1

  主要是实践和巩固了git的指令。

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78074408

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab2

  明确了代码风格的要求,判断条件尽量使用表达式,这样易读性较高。

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78187767

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab3

  应用模块化的编程思想提高了menu程序的重用性,对代码设计中的一些常见方法做了了解。

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78314296

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab4

  体会到接口在提高代码开发效率中扮演的重要性,并使用接口提高了menu程序的重用性。

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78314311

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab5

  深刻理解回调函数的定义与作用,回调函数是把函数的指针作为参数传递给另一个函数,回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。回调函数的使用提高了代码的重用性,实现了更松的耦合。同时将一些内部结构接口隐藏,简化了用户接口,更保证了使用安全,减少误操作。

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

  实验报告:http://blog.csdn.net/weixin_39691621/article/details/78418627

  实验代码:https://coding.net/u/vic24826/p/gaoruan/git/tree/master/lab7

Makefile方法能够简化编译程序时繁琐的指令输入,提高效率。在Makefile文件中必须以Tab键规范格式,不可以用四个空格键。gets()方法有缓冲区溢出的问题,为了防止缓冲区溢出攻击的危险,使用fgets()方法更好。Shell可以将命令解析成argc和argv传递给执行程序,可以使用getopt函数获取命令行参数来实现多参数的命令。

二、实验报告与实验代码索引

  Coding:https://coding.net/u/vic24826/p/gaoruan/git

  CSDN:http://blog.csdn.net/weixin_39691621

三、总结

  软件工程(C编码实践篇)课程这门课程,内容虽然基础无比。但是作为一门软件工程专业的入门课,这就是它最难能可贵的地方。这门课将我领进软件工程专业的大门,使我受益良多。孟宁老师匠心独运线上课程的安排以及线上实验的设置,将软件工程思想和C编码实战相结合,理论联系实际,一步步教授我们软件工程的思想并引导我们运用软件工程设计思想通过不断迭代,最终实现了一个功能强大的“可重用的菜单子系统”。这种教学设计方式大大利于我们更好地掌握软件工程的思想。课程内容包含基础的软件设计体系和设计思想,使得我对软件工程有了基础夯实的认识和理解。

最大收获

  毫无疑问,本门课程给我带来最大的收获就是对软件工程更深入更深刻的认识与理解。软件工程并不是简单的代码工程,背后还有更多深层次的思想,颠覆了我固有的对软件工程的理解。并且通过实验尝试了将软件工程的思想运用到C编码实战之中,培养起了较为良好的代码风格习惯。还有就是将本科学习的一些基本的数据结构知识做了一个整理与回顾,了解了一些线程安全与可重入性的基础知识,温故知新。

小小遗憾

  与课程中的所得相比,也有一点小小的遗憾。通过本次课程没有能接触到很多面向对象编程的一些设计思想与设计技巧,不过毕竟课程名是C编码实践篇XD。

建议

 希望之后孟宁老师在C编码实践篇课程教学之余,能够抽出时间推出一门C++(Java)编码实践篇课程更多地惠及求知若饥的学子们。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: