软件工程(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的基本命令ls、cd,vi的基本操作,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 Structures、Data 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方式查询链表,进一步改进Linktable的Callback方式的接口
用callback函数实现的多态浅析和理解怎么进行信息隐藏。
6.函数的可重入性(reentrant)及线程安全浅析
小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。
7.子系统的可重用设计
【实验七:将menu设计为可重用的子系统 】https://www.shiyanlou.com/courses/reports/1248050
小结:把menu作为一个子系统的可重用接口设计
编写Makefile工程文件,并且浅析支持带参数的复杂命令的方法
8.代码背后的设计思想
小结:学习从不同的质量视角,例如产品视角、用户的视角等,将menu开源希望有人使用它。 总结了设计方法论和几个重要的设计指导原则, 模块化、接口设计、信息隐藏、 增量开发、抽象和一般化。
总结
最大的收获:
最大的收获莫过于“工程”两字,通过本次课程的学习,从实践出发,明白了软件工程的思想。对于以后在团队中进行编程有了思维模式的转变,为写出更加优质的代码打下了基础。更是初步了解了VIM这款编辑器中的战斗机,有了初步的linux下编程经验,顺便对linux系统做了一些了解。了解了github这个分布式工程管理工具,对以后的开发环境有了一定基础。第一次使用网络课堂,这给我打开了一扇窗,原来自学这么容易,知识离我这么的近!
最大的遗憾:
没有借此机会更加深入了解linux系统,对其构架不了解。
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇) 学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- 软件工程(C编码实践篇)学习总结
- leetcode-17. Letter Combinations of a Phone Number
- 软件工程C编码实践课程总结
- 沃通的证书受到质疑,StartCom CA 受处罚
- C/C++初学者项目开发实践1
- 软件工程(C编码实践篇)学习总结
- 分布式系统--2个层次/2个境界
- 2016ACM/ICPC亚洲区青岛站 ABC题题解
- C/C++初学者项目开发实践2
- 动态更新menu
- 从小白到入门(java web篇)
- 树状数组(poj2352)
- 沟通管理论文
- Android 对getWidth和getMeasuredWidth 的理解