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

来源:互联网 发布:郑州师范学院网络教学 编辑:程序博客网 时间:2024/06/01 07:36


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

 

对软件工程的理解及学习软件工程(C编码实践篇)的心得:

  代码层面对软件工程的理解:软件工程的C编码实践和我们平时的C语言编码相比,重在工程两字。在软件工程中,我们的需求已经不是几百行代码可以搞定了,编写的代码量也不是一个人的能力能够胜任了。所以,在思想的上层建筑上,我们需要一次革命。当几个人合作写代码的时候,为了增加代码的可读性,就必须有严格的代码规范要求,不能再像以前一样肆意妄为了。为了增加代码的重用率,减少重复的工作量,就要形成模块化的思想——高内聚,低耦合,充分遵行KISS原则——一份代码只做一件事来设计代码结构。在自己负责的模块完成后,应该遵守开闭原则”——对扩展开发,对修改封闭进行封装,形成一系列与其他模块交流的接口,可以让其他开发者更高效地理解和使用这个模块。Callback函数是典型的底层模块调用上层模块的例子,多使用类似的构造,可以进一步降低代码模块之间的耦合度,使各模块的关注点更加分离。将一个个基础功能模块搭建在一起,就形成了子系统,再将各个子系统作为基础模块层层封装,最后形成一个完整的符合客户需求的工程。以上是我经过11周学习对软件工程代码层次上的粗浅理解。——感谢孟老师

       课程学习心得:

以前知道JAVA是面向对象语言,封装,继承,多态是其核心特征。而C语言只是一个面向过程的语言,并不呈现这些特点。上了孟老师的课后,豁然开朗:语言只是工具,并没有严格的界限,只要有思想,面向过程的低端语言也能表现出符合高级语言的特性。在本次课程中,孟老师用大家最熟悉的C语言入手,手把手教我们从最初的面向对象程序开始,一步步将代码进行模块化,封装,优化,最后用Callback函数呈现了多态的特性。这一系列由浅入深的过程,带我们走了一遍面向对象语言产生与发展的过程。让人有一种“C语言如酒,品之,愈久弥香的感觉。

软件工程是程序员的政治课,有非常多的理论和概念,但是孟老师的课避开了传统冗杂的理论说明,直逼主题,通过一系列的实践,让我们亲自动手写一个小工程,抓住工程产生的源头,有一种水到渠成的流畅感。虽然结课后我们说不出很多专业的名词和复杂的理论解释,但是工程思想却深入民心。在学习的过程中,还get到了一些linux编程的经验,知道了github这种先进的分布式工程管理系统,虽然没有深入,但是开阔了眼界。

 

课程报告与代码

1.熟悉linux实验环境 

【实验一:写一个hello world小程序 https://www.shiyanlou.com/courses/reports/1243952

小结:在linux环境下,编写hello world小程序。了解linux系统的目录结构,学会使用linux的基本命令lscdvi的基本操作,gcc编译程序等。第一次接触github,花费了很多时间去学习和理解这个分布式管理系统。

 

2.代码风格规范

【实验二:命令行菜单小程序V1.0 https://www.shiyanlou.com/courses/reports/1244692

小结:学习缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。

 

3.基本的模块化设计

【实验三:内部模块化的命令行菜单小程序V2.0 https://www.shiyanlou.com/courses/reports/1245638

小结:

模块化的思想和命令行菜单的实现范例

基本模块化的写法

代码设计中的一些常见方法:

KISS(keep  it simple & stupid)

using  design to frame the code(matching design with implementation)

including pseuducode

不要和陌生人说话原则

合理利用Control StructuresData Structures来简化代码

一定要有错误处理

运用模块化思想,代码的业务逻辑和数据存储之间的分离。在实验二的基础上将系统抽象为两个层级:菜单业务逻辑和菜单数据存储。 

 

4.重用模块的接口设计

【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5 https://www.shiyanlou.com/courses/reports/1246022

小结:通用Linktable模块的接口设计将通用的Linktable模块集成到我们的menu程序中

了解接口规范,理解了什么是内聚和耦合,明白了接口设计的通用原则

 

 

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

【实验五:用callback增强链表模块来实现命令行菜单小程序V2.8 https://www.shiyanlou.com/courses/reports/1247001

小结:给Linktable增加Callback方式的接口

menu中用Callback方式查询链表进一步改进LinktableCallback方式的接口

callback函数实现的多态浅析和理解怎么进行信息隐藏

 

 

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

小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。

 

7.子系统的可重用设计

【实验七:将menu设计为可重用的子系统  https://www.shiyanlou.com/courses/reports/1248050

小结:menu作为一个子系统的可重用接口设计

编写Makefile工程文件,并且浅析支持带参数的复杂命令的方法

 

8.代码背后的设计思想

小结:学习从不同的质量视角,例如产品视角、用户的视角等,将menu开源希望有人使用它。 总结了设计方法论和几个重要的设计指导原则, 模块化、接口设计、信息隐藏、 增量开发、抽象和一般化。

 

总结

最大的收获:

    最大的收获莫过于“工程”两字,通过本次课程的学习,从实践出发,明白了软件工程的思想。对于以后在团队中进行编程有了思维模式的转变,为写出更加优质的代码打下了基础。更是初步了解了VIM这款编辑器中的战斗机,有了初步的linux下编程经验,顺便对linux系统做了一些了解。了解了github这个分布式工程管理工具,对以后的开发环境有了一定基础。第一次使用网络课堂,这给我打开了一扇窗,原来自学这么容易,知识离我这么的近!

最大的遗憾

没有借此机会更加深入了解linux系统,对其构架不了解。


0 0