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

来源:互联网 发布:内容推荐算法的实现 编辑:程序博客网 时间:2024/05/22 00:20

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

通过网易云课堂学习了《软件工程(C编码实践篇)》课程后,我学到了很多的东西。孟老师从一个简单的C语言菜单小程序,从最开始的搭建环境讲起,从零入门,一步步的深入,将知识点讲解的很透彻。
1.我对软件工程的理解及学习心得
我认为软件工程是用工程化的思想去写软件,它需要系统化工程化的方法,它是一个需要不断完善的工程。尤其在大型项目中,我们要考虑的不仅仅是代码可以正常运行,还需要考虑如何和其他参与项目的人员进行更好的沟通,如何让后期维护的人员能够更容易理解我们的代码,这可以大大减少项目的维护费用。基于上述的种种要求,也就有了代码风格规范的要求,模块化设计的思想,接口规范和通用原则,callback函数的使用,子系统可重用的设计的引出等等。通过这些优化,提高了代码的可读性和可重用性,降低了后期维护的成本。

2.实验报告和代码库
实验报告一 + Lab1
实验报告二 + Lab2
实验报告三 + Lab3
实验报告四 + Lab4
实验报告五 + Lab5
实验报告七 + Lab7
(1)实验一:编写一个”hello world”程序
首先是接触Linux命令,在第一次实验时要求用实验楼编写一个Hello World程序。通过此次实验,学习了基本linux操作命令和vi编辑器的使用,为进一步学习打下基础。
(2)实验二:命令行菜单小程序V1.0
第二次实验主要是强调代码风格规范。要遵守代码风格规范,像代码的缩进,行宽,大括号的对齐方式,变量的定义原则以及命名规范等。通过此次实验,使我明白了在写代码时不仅要使代码可以运行,还要写的符合规范。这样在项目开发中别人才可以比较容易读自己写的代码,也方便后期的代码维护。
(3)实验三:内部模块化的命令行菜单小程序V2.0
通过视频学习,我了解了模块化的基本思想。学习了在代码设计中的一些常见方法:KISS,用设计给出代码的框架,不要和陌生人说话原则,合理利用控制结构和数据结构,一定要有错误处理。也明白了模块化的主要作用是包容变化。
(4)实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
学习接口规范,了解内聚和耦合(讲究高内聚低耦合),通用原则。本次实验比实验三好在编写了更通用的链表模块,通过学习我了解了更多的代码编写规范,数据结构知识,指针和链表的应用。
(5)实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
此次实验是通过给linktable增加一个callback函数使其可以调用上层函数。通过传一个函数指针,在需要该函数的时候通过该函数指针指向该函数的入口,然后调用该函数实现相应的功能。本次实验学习到了:利用callback函数参数使Linktable的查询接口更加通用和注意接口的信息隐藏。
(6)实验六:函数的可重入性
本次实验主要讲解了可重入函数的概念。首先线程的概念。函数调用和返回都是借助堆栈,每一个线程拥有自己独立的函数调用堆栈,除函数调用堆栈外一个进程内的所以线程共享进程的资源。函数的可重入性是指两个或多个线程同时进入一个函数执行。当函数中存在全局变量时此函数是不可重用的,可以通过加锁使不可重用的函数变成可重入的函数。多个线程同时运行一个代码模块是线程安全的。线程安全问题所带来的问题一般比较诡异。线程安全的代码一定是可重入的,可重入的函数不一定是线程安全的。
(7)实验七:将menu设计为可重用的子系统
此次实验是将之前的menu程序作为一个子系统,别的程序可以通过接口调用该系统,从而实现代码的复用。本次实验使我学会写Makefile工程文件,学会了使用getopt函数。
(8)代码背后的设计思想
本次实验是对以上学习的总结,它从不同的质量视角,例如产品视角、用户的视角等 ,将menu开源希望有人使用它。 总结了设计方法论和几个重要的设计指导原则, 模块化、接口设计、信息隐藏、 增量开发、抽象和一般化。

3.总结:
(1)代码要规范,这样不仅自己看着方便,也利于后续开发和使用;
(2)我们要保证设计规范,要保证代码是高内聚,低耦合,例如一个函数只做一件事,一个模块只做一类事的,实现功能尽量用库函数;遵循“不和陌生人说话”的原则,以保证除了类提供的接口,别人无法访问类的其他内容。同时要合理使用数据结构、控制结构等来简化代码。
(3)我们要讲究高内聚低耦合,接口要规范,代码要注意通用性。
(4)在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。
(5)当我们设计子系统时,要设计出可重用的接口。

最大的收获:
通过线上课程的学习,了解了代码的规范化写法,今后写代码时会有意识的去朝着规范的方向去努力。同时也学到了一些重要的编程思想。在以后的编程中尽量去运用他们,尤其是模块化思想和接口的使用。

最大的遗憾:
学习本课程最大的遗憾是时间有点短,很多知识还没有学习透彻。其次是编程经验很少,需要在今后将这些知识灵活应用到编程中去。

0 0