- 作者:马孟男
- 网易云昵称:coker1994
- 原创作品转载请注明出处
- 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
学习足迹
- 实验一:写一个“hello world”小程序
- 实验二:命令行菜单小程序
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验七:将menu设计为可重用的子系统
学习心得
经历了一个学期为期约十一周的视频学习,课程讲座,线下实验的学习,伴随着孟宁老师通俗易懂,方式新颖的教学,软件工程(C编码实践篇)的课程接近尾声,从一开始的陌生到最后的逐渐了解逐渐接受,我已经慢慢喜欢上这种学习方式,获益匪浅!
尤其是在代码层面的学习,孟老师教授我们把代码作为整个工程的一部分,从代码设计规范,模块化思想,子系统的接口可重用,线程安全等多个方面来编写代码。而且孟老师打破了传统软件工程书本教学的方式,而是理论与实践完美的结合起来,每个实验之间都相互关联,实验内容层层深入,实验难度逐步增加,为我们理解软件工程的思想起到了明显的作用。学习完这几周的课程,我对代码从另外一个角度有了一个全新的认识,真的受益颇多!
下面说一些在学习中的深刻体会:
1.代码风格规范——代码风格规范就像一个人的长相一样,通过看你的代码风格就能大致想象出你是一个什么样子的人,养成好的代码风格以及规范会使我们事半功倍。需要项目组统一格式,注意代码风格的原则:简明、易读、无二义性缩进、命名、注释等代码编排的风格规范。
2.设计规范——在设计规范上,要保证代码是高内聚,例如一个函数只做一件事,一个模块只做一类事的,实现功能尽量用库函数;还有要遵循“不和陌生人说话”的原则,以保证除了类提供的接口,别人无法访问类的其他内容。同时要合理使用数据结构、控制结构等来简化代码。
3.代码模块化——讲究高内聚低耦合,接口要规范,代码要注意通用性,注意以下原则,Purpose,Preconditions(assumptions),Protocols,Postconditions(visible effects),Quality Attributes。
4.代码可重用性——避免一些无用功,可以使以前自己或者前辈们写过的代码重用到现在要写的程序里面,在代码可重用性层次上面要非常注重模块化程序接口的设计,尽量多考虑到以后可能会用到的一些接口。
5.线程安全——在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。同时了解了函数的可重入性与线程安全之间的关系,可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);不可重入的函数一定不是线程安全的。
学习总结
总的来说,高级软件工程这门课收获是非常多的,不同于其他传统老师上课讲学生下面听的课程,这门自己动手,互相学习的课程使我认识到软件工程对我们今后的开发,面试找工作都有着重大的影响,在一个团队中一个好的设计,好的代码质量将给团队带来巨大的效益。代码风格良好也为程序带来了良好的可读性,同时也便于软件后期的维护和升级。现在自己在编程的时候经常会自动的考虑代码规范性问题,以及要不要模块化,要不要对接口加以改进,这是学习这门课最大的收获。
每一次课每一次实验都有一种新的体验,每一次课都有思想的前进,思维的提升,相比于两成时间写代码,其余时间维护测试,思维的提升更重要。
我觉得我最大的收获就是在线上实验过程中代码编写能力和质量都有了质的飞跃,而不是在数量上的提升。
最后,再次感谢孟宁老师对我们的教学指导。