高级软件工程学习总结

     课程内容来自网易云课堂中科大孟宁老师的软件工程(C编码实践篇)课程。

    课程页面

     对于本专业出身的学生来说,这门课程的内容相对来说比较基础,但正是这样,才能弥补之前学习的不足。通过这次课程的学习,填补了自己对基础知识的理解和应用,很好的夯实了专业基础,比如对于代码格式内容的学习,自己之前一直都按着自己的习惯编写代码,导致代码格式比较混乱,不宜阅读和后期排查错误,这次的学习算是比较系统的纠正了自己之前的编写习惯,棒棒哒!另外要说的是,孟老师的课程给了我们很大的自我发挥的空间,通过实打实的操作进一步加深了对软件工程概念的理解,课程分享的内容也是更大限度了拓展了对工具的认知,学生的自主性和积极性能最大限度的被激发,选择自己感兴趣的话题进行深层次的研究,对以后工作中的额使用提供了很大的帮助。再次感谢老师!

      1. 第一周:熟悉Linux实验环境;要求 实验一:写一个hello world小程序。

实验报告链接+git代码库链接

     总结:没有写过hello world的程序员不是好的码农!作为入门级别的小程序,hello world绝对是最经典的没有之一!实验一的内容即在linux环境下用C语言输出hello world,满满的熟悉感扑面而来,同时加入了新的元素,linux下的操作命令和windows完全不同,但正是其开源及直接明了的命令行编写风格,让大批程序员甘愿入坑,这次实验正是给我们铺好了走向的linux的道路,借助最基本的实验帮助我们了解linux下的一些基本操作命令,同时要求代码上传至github,以方便代码管理,这里不得不感慨下老师的课程安排,真的很合理,因为之前并没有接触过git,对实验上使用的命令如git add /git commit -m /git pull只是知其然而不知其所以然,一知半解。幸好有老师安排的课堂展示阶段,有些同学将git命令系统的知识进行了详细系统的讲解,听了之后顿时豁然开朗,学习效率大大提升。

      2. 第二周:代码风格规范;要求 实验二:命令行菜单小程序V1.0。

实验报告链接+git代码库链接

     总结:实验二主要介绍了代码模块化的思想,同时引入了代码风格的在代码阅读和重用中的重要作用,这些内容在日常的代码编写过程中很容易被忽视,但细节往往才是检验代码质量的重要标准,要写出高质量的代码这些要素必不可少。

     3. 第三周:基本的模块化设计;要求 实验三:内部模块化的命令行菜单小程序V2.0。

实验报告链接+git代码库链接

     总结:作为对实验二内容的扩展,实验三在模块化的基础上再次进行了封装,实现了业务逻辑和数据结构的分离,同时对部分编码原则例如开-闭原则(对扩展开放,对修改关系)、KISS(keep it simple&stupid)、不要和陌生人说话等进行了学习。层层递进,逐层深入,自己的水平也在进一步的学习中得到了质的提升。

     4. 第四周:可重用模块的接口设计;要求 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5。


           实验报告链接+git代码库链接


     总结:本次对于数据结构,我参考了Linux内核源代码中双向链表的实现,移植其功能接口集成到menu菜单程序中。而在Linux内核链表的设计中,为了达到最高运行效率,使用了宏定义和内联函数完成所有功能的设计实现,所有代码集成在其设计的接口头文件中。Linux内核源代码博大精深,其通用的设计思想和高效的实现方式,值得C/C++程序员认真阅读,即使不去做内核相关的工作,阅读精彩的代码对程序员自我修养的提高也是大有裨益的。

     5. 第五周:可重用模块的接口设计(callback函数);要求 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8。

实验报告链接+git代码库链接  

     总结:这次实验主要是在给定的代码上进行改错,找出代码中的错误,以及不合理的地方进行优化,主要内容包括利用callback函数参数使Linktable的查询接口更加通用,注意接口的信息隐藏,解决bug。难度适中,实用性比较强,通过这次实验增强了代码调试的能力,利用指针对上下文进行参数化,做到信息隐藏,使API接口更加通用。


     6. 第六周:函数的可重入性(reentrant)及线程安全浅析;本次没有实验,老师主要介绍了多线程编程和线程安全方面的知识。


     总结:多线程编程和并行编程是未来技术的发展趋势,尽管这方面的内容博大精深,但却是一个优秀的软件工程师核心竞争力的体现。关于这方面知识的进一步学习,我推荐2套最新更新出版的经典书籍:《Linux/UNIX系统编程手册》和《UNIX环境高级编程(第3版)》。我认为如果掌握好这2套书的内容,将会在技术竞争力上有绝对优势。


     7. 第七周:子系统的可重用设计;要求 实验七:将menu设计为可重用的子系统。

实验报告链接+ git代码库链接点击打开链接

     总结:这次的实验是对前面实验内容的系统综合,需要在完成全面设计的基础上进行仔细的分析调试,另外由于getopt函数本身的复杂性,在调试过程中遇到了很多这样或那样的问题,通过阅读同学分享的报告,以及和同学交流,最后成功解决,虽然过程曲折,但解决问题的瞬间还是觉得一切都是值得的!


     通过这一学期的学习,对软件工程的理解不再仅仅局限于书本上的简单描述,而是在实际的应用中进行理解应用,很大程度的提高了学习效率,找到了进一步提高能力的方向。回想起一学期的历程,最大的收获是:抽象能力的提高和模块化思想的实践。研究生生涯即将结束,能在踏入社会之间进行这么系统的回炉重造,是非常幸运的事,多谢孟宁老师的课程,另外,希望老师将来能够制作更多的精品课程,给更多的同学带来帮助。

     真实姓名:魏成成 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006#/info

猜你喜欢

转载自blog.csdn.net/u010996775/article/details/73412259