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

张瑜   
《软件工程(C编码实践篇)》MOOC课程
http://mooc.study.163.com/course/USTC-1000002006

软件工程的线上课程是围绕着一个menu程序展开的,在逐步实施该项目的过程中,老师顺带着讲了软件工程的一些关键的概念和其他相关的知识。整个课程围绕了7个实验展开 ,一开始讲解linux简单命令行以及vim的使用,以及用它编写了一个helloworld程序。随后用死循环写了menu程序的第一个版本,基本明白了命令行的原理。接下来的几次试验,对之前的命令行作了改进,包括用链表作为存储的数据结构、业务层和数据层储层的分离、引入callback机制、menu接口的实现等等。最后我们得到了一个相对完善的命令行menu程序。

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

实验报告链接

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

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

实验报告链接

总结:初步接触了模块化设计思想,理解了代码风格的重要性,学会了将命令封装成函数供使用者调用。

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

实验报告链接

总结:初步实现了业务逻辑与数据结构的分离,加深了对模块化思想的理解。而且这次自己做死创造难度,采用了AVL树做数据结构,static函数声明,函数指针做参数实现call -back;以及实现了在Windows IDE下编程,共享到Linux虚拟机编译运行,最后从自己的Vmware11的Ubuntu虚拟机向实验楼git代码。从而进一步提高了自身的水平。

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

实验报告链接

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

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

实验报告链接

总结:本次实验通过Debug调试的使用增强了代码调试的能力,利用函数指针参数化上下文,以最小化信息隐藏的标准,设计了更加 通用好用 的API接口。

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

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

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

实验报告链接

总结:本次实验难点在于Liunx系统函数getopt的理解和使用。getopt本身参数众多,难以理解,极易用错。做为最后一次实验,综合了前面所学知识,完成目标需要全面设计和仔细分析调试。

第八周:代码背后的设计思想;本次没有实验,老师主要总结了前面的课程,论述了软件工程的一些理论知识。

总结:本次课程主要讲述了 不同的质量视角,各种设计方法论,和几个重要的设计指导原则;为进一步学习后续课程打下良好的基础。

1.排版:
程序快要采取缩进风格编写,缩进的空格数一般为4位;敲黑板啊!老师说过好几次!所以放在第一条。
相对独立的语句块,变量说明后要加空行;
程序块的分界符如(“{”和“}”)应各自独占一行,并处于同一列,同时引用它们的语句左对齐;
不要把多个短语句写在同一行,即一行只写一个语句;

2.注释:
注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。
文件头部应进行注释,主是必须列出版权说明,版本号,生成日期,作者,内容,功能,修改等,这一点我现在还没有做到,每次感觉写的代码太短就不想写,其实就是懒。
C语言中使用一组(/* … */)作为注释界定符。
注释内容尽量用英语方式表述。
注释应该出现在要说明的内容之前,而不应该出现在其后。
除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式

3.命名规范:
符号常量的命名用大写字母表示;
如果符号常量由多个单词构成,两个不同的单词之间可以用下划线连接。如:
define MAX_LEN 50

变量命名的基本原则:
可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清楚其含义。
不要使用人名、地名和汉语拼音。
如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。
多个单词组成的变量名,除第一个单词外的其他单词首字母应该大写。

4.其它一些小技巧和要求:
函数一般情况下应该少于100行,对于菜鸟们,刷什么微博,快滚去码代码,
函数定义一定要包含返回类型,没有返回类型加void

规则还有很多,刚才说的只是一小部分,此处先安利一篇老师推荐的博客
http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html,和一本名为《高质量C++/C编程指南高质量C++/C编程指南》的书,

通过一学期的学习,使得自己对软件工程有一个初步了解和认识,找到了进一步提高能力的方向。回想起一学期的历程,最大的收获是:抽象能力的提高和模块化思想的实践。非常期待软件工程系列课程的 后续2门课程。最大的遗憾是课程时间比较短,不足以深入学习多线程编程方面的内容。这方面网络上视频稀缺,而书籍比较晦涩难懂,自学难度较大,期待老师以后有时间能制作多线程和并行编程方面的课程。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值