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

来源:互联网 发布:python exe反编译工具 编辑:程序博客网 时间:2024/06/01 20:45

杨子江 原创作品转载请注明出处 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006


一、对软件工程的理解及学习心得
我是一名非计算机专业的学生,想通过学习网课来提升自己的编程能力,有幸在网易云课堂选到孟宁老师的《软件工程(C语言编码实践篇)》课程,从中收获了很多。
首先谈谈我对软件工程的粗浅理解,如果只是自己写几行代码、编一编小程序,可能并不需要涉及到软件工程的方法。但如果开发系统规模很庞大的情况,需要在程序设计中体现很清晰的思路,少走弯路避免一些容易出现的错误,那么保持良好的代码风格和编程习惯,确定正确的开发思路就显得十分必要了。
通过学习孟宁老师软件工程线上课程和线下实验就可以理论和实践相结合,相得益彰的更好的学习和体会到软件工程的魅力。通过对孟宁老师的软件工程(C编码实践篇) 学习,在代码层面上对软件工程有了深刻体会:

  1. 代码风格规范——代码风格规范就像一个人的长相一样,通过看你的代码风格就能大致想象出你是一个什么样子的人,养成好的代码风格以及规范会使我们事半功倍。需要项目组统一格式,注意代码风格的原则:简明、易读、无二义性缩进、命名、注释等代码编排的风格规范。
  2. 设计规范——在设计规范上,要保证代码是高内聚,例如一个函数只做一件事,一个模块只做一类事的,实现功能尽量用库函数;还有要遵循“不和陌生人说话”的原则,以保证除了类提供的接口,别人无法访问类的其他内容。同时要合理使用数据结构、控制结构等来简化代码。
  3. 代码模块化——讲究高内聚低耦合,接口要规范,代码要注意通用性,注意以下原则,Purpose,Preconditions(assumptions),Protocols,Postconditions(visible effects),Quality Attributes。
  4. 代码可重用性——避免一些无用功,可以使以前自己或者前辈们写过的代码重用到现在要写的程序里面,在代码可重用性层次上面要非常注重模块化程序接口的设计,尽量多考虑到以后可能会用到的一些接口。
  5. 线程安全——在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。同时了解了函数的可重入性与线程安全之间的关系,可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);不可重入的函数一定不是线程安全的。

二.、课程过程及实验报告

  1. 实验一:写一个hello world小程序
    熟悉Linux实验环境(工欲善其事必先利其器),通过这次实验会让你深刻的了解Linux下的一些基本的操作,在Linux环境下做开发可以让你彻底掌控你的开发设计。实验报告采用markdown进行书写,可以将自己的思路进行总结,也是对将来的软件工程文档的书写打下良好的基础。
  2. 实验二:命令行菜单小程序V1.0
    代码风格规范(简约而不简单),从hello world开始不断迭代调试使代码长的越来越像一个命令行的菜单小程序,并且通过这次实验学习了代码风格规范。“写代码要小步快跑不断迭代,罗马不是一天建成的”。
  3. 实验三:内部模块化的命令行菜单小程序V2.0
    基本的模块化设计(Separation of Concerns),使实验二的代码模块化,并且学习代码设计中的一些常见方法,KISS、不要和陌生人说话原则等。
  4. 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
    可重用模块的接口设计(天王盖地虎),代码是一个不断迭代调试的过程-可重用的链表模块来实现命令行菜单小程序,通过本次实验会使你更加的了解到程序模块化设计的方便之处,在后期会更加方便的维护自己的代码等。
  5. 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
    可重用模块的接口设计(callback函数),用callback函数实现的多态浅析并注意信息隐藏。
  6. 函数的可重入性(reentrant)及线程安全浅析
    什么是函数的可重入性,什么是线程安全,以及学习函数的可重入性与线程安全之间的关系。
  7. 实验七:将menu设计为可重用的子系统
    子系统的可重用设计(够用就好),把我们上几次做的命令行菜单通过老师讲的一些有用的方法做成一个可重用的子系统。

三、课程总结
总的来说,学习这门课程给我很大的收获。在学习的过程中,和同时做作业的同学讨论相关问题,也能够看到其他同学好的实验报告,学习到很多良好的编程思路。通过一系列的动手实验,让我对软件工程的方法有了更加深入的理解和认识。最大的收获在于,现在自己编程的时候也会考虑代码风格是否良好,设计能否模块化,还有哪些可以加以改进的地方等问题。遗憾就是自己刚刚接触软件工程,虽然十周的时间已经足够长,但有很多问题还需要自己在今后的实践中仔细体会方能领悟。总之,希望自己今后更加努力,非常感谢孟宁老师的教学指导。

原创粉丝点击