软件工程(C编码实践篇)总结
陆伟丹 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
对软件工程的理解及学习软件工程(C编码实践篇)的心得:
我理解的软件工程,就是要用工程化的思想去写软件。即“软件的工程”,这和现实中的建筑工程等等的相类似,需要系统化工程化的方法,是一个在不断搭建的工程。和我们平时写小的Demo不同,当我们面对一个大的项目的时候,我们要考虑的不只是让代码跑起来,还需要考虑如何和其他参与项目的人员进行更好的沟通,如何让后期维护的人员能够更容易理解我们的代码。基于上述的种种要求,也就有了代码风格规范的要求,模块化设计的思想,接口规范和通用原则,callback函数的使用,子系统可重用的设计的引出等等。通过这些处理,提高了代码的可读性和可重用性,降低了后期维护的成本。
学习了孟宁老师的的软件工程课程,我收获颇多。孟宁老师讲课由浅入深,注重实践和知识的结合。随着命令行工具的迭代,讲授的知识也一步一步深入下去。从一开始的几行的menu.c,到最后命令行工具的迭代完成,真的就像是做完了一个工程一样,给人一种成就感。
课程报告与代码
1.熟悉linux实验环境
【实验一:写一个hello world小程序 实验报告 代码库 】
小结:在linux环境下,编写helloworld小程序。本次实验主要是让学生了解实验楼的环境,github的使用,linux的基本命令ls、cd,vi的基本操作,gcc编译程序等。
2.代码风格规范
小结:学习缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。
3.基本的模块化设计
【实验三:内部模块化的命令行菜单小程序V2.0 实验报告代码库 】
小结:模块化思想,代码的业务逻辑和数据存储之间的分离。在实验二的基础上将系统抽象为两个层级:菜单业务逻辑和菜单数据存储。
4.重用模块的接口设计
【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5 实验报告 代码库 】
小结:学习接口规范,了解内聚和耦合(讲究高内聚低耦合),通用原则。
5.可重用模块的接口设计(callback函数) 【实验五:用callback增强链表模块来实现命令行菜单小程序V2.8 实验报告 代码库 】
小结:应用callback函数的方法来增加模块通用性,实现信息隐藏。
6.函数的可重入性(reentrant)及线程安全浅析
小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。
7.子系统的可重用设计
【实验七:将menu设计为可重用的子系统 实验报告 代码库 】
小结:学会写Makefile工程文件,学会了使用getopt函数。
8.代码背后的设计思想
小结:学习从不同的质量视角,例如产品视角、用户的视角等 ,将menu开源希望有人使用它。 总结了设计方法论和几个重要的设计指导原则, 模块化、接口设计、信息隐藏、 增量开发、抽象和一般化。
代码层面的软件工程的理解
通过学习本课程,我了解到,代码一定要写的规范、易于阅读。代码风格就如同人的外貌,而封装接口就是衣装搭配,代码的可重用性代表工作能力,可重入函数和线程安全体现了这个人驾驭复杂局面的能力。2000行代码复杂度是初级程序员的第一个瓶颈,包容变化是模块化的主要作用。
代码设计规范
- KISS(Keep it simple and stupid)
- Using design to frame the code (用设计框代码,设计与实现保持一致)
- 不要和陌生人说话
- 一定要有错误处理 (功能实现/错误处理:2/8)
- 用数据结构来简化代码
高内聚低耦合的架构设计目标
函数的可重入性
学习《软件工程(C编码实践篇)》课程中最大的收获:
通过自己动手写一个小的Demo,让我对软件工程有了一个全新的认识,理解了一些软件工程的思想方法。让我能够站在一个软件开发人员的角度来看待一个项目。软件能不能跑起来当然重要,但这并不是唯一的要考虑的问题,还要考虑一个软件是否符合工程化的思想,是否做到了模块化、可重入、线程安全等等标准。
学习完《软件工程(C编码实践篇)》课程后最大的遗憾:
关于课程本身并没有什么遗憾,遗憾的是在这之前自己没有做过什么完整的项目,通过这次课程算是体验了一下工程的魅力。
软件工程(C编码实践篇)总结的更多相关文章
- 软件工程(C编码实践篇)学习心得
孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...
- 软件工程(C编码实践篇)课程总结
课程内容来自网易云课堂中科大孟宁老师的软件工程(C编码实践篇)课程. 课程页面 我觉得本门课程的设置非常科学,每一周课程都是基于上一周课程的进一步抽象,使得学习者能够循序渐进,逐渐加深对软件工程的理解 ...
- 软件工程(C编码实践篇)学习总结
吴磊 SA17225400 学习完了孟老师的软件工程(C编码实践篇),跟着老师一步步的完成了代码的编写,收获真的很大. 在学习这门课之前,我还不会用Linux,也没接触过Git.如今我已成能够在Lin ...
- Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)
Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...
- Linux内核分析第三周学习总结
Linux内核源码简介 arch/ 该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录. 和32位PC相关的代码存放在x86目录下. 每种平台至少包含3个子目录:kernel(存放支持体系 ...
- Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动
姓名:江军 ID:fuchen1994 实验日期:2016.3.13 实验指导 使用实验楼的虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...
- cprogram作业
刘金福 SA17225205 第三次作业 url:http://blog.csdn.net/liu896749150/article/details/78176433 学号:SA17225404 姓名 ...
- 20135302魏静静——linux课程第三周实验及总结
linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...
- 软件工程线上课程(C语言实践篇)学习心得总结
林牧 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 软件工程的理 ...
随机推荐
- Django 中url补充以及模板继承
Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...
- Repeater控件用法
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx. ...
- iOS - UIButton折行文字显示设置
首先在控制器中创建一个button - (void)viewDidLoad { [super viewDidLoad]; UIButton * button = [[UIButton alloc] i ...
- Ubantu16.04一键部署Cacti监控服务器
Ubantu16.04一键部署Cacti监控服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入高级运维工程师之路:598432640 一.查看系统环境(关于该系统的安装 ...
- Ajax UI方面的处理方式
一种方式: 从远程直接获取HTML加载到本地 第二种方式从远程获取JSON,到本地使用JS处理数据. var html = "<table cellspacing=\"0\& ...
- Excel标题与索引的对应关系
/// <summary> /// 返回对应标题的索引 /// </summary> /// <param name="columnTitle"> ...
- 使用百度地图api接口获取公交地图路线和车站
需要在页面文件中引用百度的js @*<script type="text/javascript" src="http://api.map.baidu.com/api ...
- android.widget.Toast
widget 小部件 toast 烤面包 Toast.makeText(当前活动, 信息, 时间长短) 例:Toast.makeText(FirstActivity.this, "You c ...
- uexQQ插件学习心得
uexQQ插件学习心得 uexQQ插件的作用:通过qq可以分享图文,音乐,应用到相应的qq空间.支持手机客户端分享和手机webQQ分享.下面我们就来看一看他的一些方法. 我们先说一下分享的步骤,这个步 ...
- 二十二、Java基础--------GUI入门
在java学习过程中GUI是一个比较特殊的知识体系(笔者对安卓不是很了解),似乎在为安卓的学习做着准备,本文将将展示一个综合案例. 创建一个类似于记事本的程序,包含打开与保存功能. package G ...