软件工程(C编码实践篇)学习心得

姓名:高旭,

课程来源:http://mooc.study.163.com/learn/USTC-1000002006

课程名称:网易云课堂中国科学技术大学孟宁老师的软件工程(C编码实践篇)课程。

1.课程简介

C编码实践篇强化实践能力训练,从学生较为熟悉的编程训练入手,以范例演示基本编码规范、 No Design时的代码、经过基本Modularity (also called separation of concerns)设计的代码、writing code to make it reusable on future projects以及一些特殊的接口设计如callback函数和函数的可重入性(reentrant)及线程安全等较深入的设计问题;这是课程的第一部分C编码实践篇,重实践,形成对软件工程直观感性的认识。课程的第二部分OO分析与设计篇将OO分析与设计过程细化为可操作的步骤,包括用例建模、领域建模、对象交互建模和设计类图,由易到难逐渐涉入设计模式、软件体系结构等较深入的话题。课程的第三部分过程与管理篇才开始对软件生命周期、软件项目任务切分工作量评估、项目计划、项目管理、进度跟踪等涉及软件工程项目全局性的概念方法做一梳理。


特色:强化实践能力训练,从实践中理解软件工程的思想方法。

受众:有意向夯实工程化软件代码的工程师和初学者

预备知识:熟悉基本的C语言编程,理解基本的数据结构(比如链表)。

2.课程脉络

第一周

  • 课程简介

    • 识人与识别代码工程质量的类比

  • 课程实验环境准备

    • 工欲善其事必先利其器

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

    • 实验报告
    • 心得:hello world程序本身很容易,但是linux下工作方式和windows下完全不同,会给不熟悉linux的人带来不少困惑。首先vi没有Windows下的IDE智能化,不能实时纠正语法错误,编译时会产生不少语法错误,需要细心调试。其次,linux的诸多命令和参数,需要较长时间的练习和操作才能熟练掌握。最后,初学者往往不熟悉git,需要一定时间研究版本控制系统。这三点是liunx初学者需要克服的困难。

第二周

  • 代码风格规范

    • 课程实验项目要求

    • 简约而不简单

    • 实验二:命令行菜单小程序V1.0
    • 实验报告
    • 心得:本次实验还是耗费了自己一些时间,说明自己的编程基础还有待加强。其中在执行代码时也报了一些错误,后来花了点时间也都成功解决了,说明c语言的代码规范还需加深学习。总体来说,本次实验还是有所收获的。

第三周

  • 基本的模块化设计

    • Separation of Concerns

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

      1.规范的代码格式很重要,看起来清晰且易于阅读。

      2.把一些需要重复使用的代码模块化,不仅可以避免重复编写代码,而且可以使代码逻辑更加清晰易懂。

      3.本次实验对已有的程序逻辑进行了深层次的抽象,使代码更加清晰易读,可维护性更强。

第四周

  • 可重用模块的接口设计

    • 天王盖地虎

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

    • 实验报告
    • 心得:本次实验的目的是编写可重用的链表模块,这次的实验感觉总体难度较之前有所提高。因为代码分为三个文件,各个文件相互关联,所以刚开始的代码编写遇到很多困难,但之后都逐步解决了。通过本次实验,自己的C语言编程能力又有所提高了。

第五周

  • 可重用模块的接口设计(callback函数)

    • 卧底

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

      1.通过在方法中加入“卧底”可以有效的提高程序的效率和可读性。

      2.在头文件中对于信息的隐藏,使得文件更加通用。例如本实验的LinkTable可以根据使用者的需要在自己的文件中任意定义。

      3.CALLBACK函数,即回调函数,就是一个通过函数指针调用的函数。本次实验的重点就在于使用callback函数。

第六周

  • 函数的可重入性(reentrant)及线程安全浅析

    • 一家人早上抢厕所

    • 测验:函数的可重入性(reentrant)及线程安全
    • 心得:知道什么是函数的可重入性,什么是线程安全,以及学习函数的可重入性与线程安全之间的关系。

第七周

  • 子系统的可重用设计

    • 够用就好

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

    • 实验报告
    • 心得:

      1.学会了使用Makefile文件来简化多个文件的编译命令。但是要注意使用Makefile时,$开头的字符串之间要使用tab符号分开,不能使用空格。

      2.学习了menu程序的可重用性。

      3.编写代码时一定要认真,不要因为粗心导致的错误而检查修改好多次。

第八周

  • 代码背后的设计思想

    • 万变不离其宗
    • 心得:本次课程老师主要讲述了几种不同的质量视角,一些设计方法论,几个重要的设计指导原则以及信息隐藏的意义;为进一步学习后续课程打下了良好的基础。


软件工程(C编码实践篇)考试

3.课程总结

 最大的收获:经历了一个学期的视频学习,以及线上实验,线下实验的实践,伴随着孟宁老师通俗易懂,方式新颖的教学方式,软件工程(C编码实践篇)的课程接近尾声。从一开始的陌生到最后的逐渐了解逐渐深入,我已经慢慢喜欢上了这种学习方式,正所谓受益匪浅!

尤其是在代码层面的学习,孟老师教授我们把代码作为整个工程的一部分,从代码设计规范,模块化思想,子系统的接口可重用,线程安全等多个方面来编写代码。不仅如此,孟老师还打破了传统软件工程书本式的教学模式,转而采用理论与实践相结合的创新模式。课程中的每个实验之间都相互关联,实验内容层层递进,实验难度逐步增加,为我们理解软件工程的思想起到了关键性的作用。学习完这几周的课程后,我对程序的理解从另外一个角度有了全新的认识,真的是收获颇多!


最大的遗憾:课程时间比较短,不足以深入学习多线程编程方面的内容。关于这方面的知识网络上的视频也稀缺,而书籍又比较晦涩难懂,自学难度较大,期待孟老师以后有空能制作多线程和并行编程方面的课程。

最后附上孟宁老师课程中送给我们的一句话与大家共勉:“夫事未有不生于微而成于著,圣人之虑远,故能谨其微而治之,众人之识近,故必待其著而后救之;治其微则用力寡而功多,救其著则竭力而不能及也。”

真实姓名:高旭(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)

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









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值