软件工程(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 软件工程的理 ...
随机推荐
- VS工程添加资源文件
1. 添加资源文件: 2. 资源文件内写相应代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006 ...
- 阿里云docker镜像加速
echo "DOCKER_OPTS=\"--registry-mirror=https://yeyieqis.mirror.aliyuncs.com\"" | ...
- PRML读书笔记——3 Linear Models for Regression
Linear Basis Function Models 线性模型的一个关键属性是它是参数的一个线性函数,形式如下: w是参数,x可以是原始的数据,也可以是关于原始数据的一个函数值,这个函数就叫bas ...
- 批处理——服务器的web文件备份
首先建立三个文本文件,稍后会变成.bat结尾的批处理文件. 第一个文件:copyfile.bat[复制需要备份的文件到tmp文件下,等待压缩时使用] xcopy "D:\Webhost\*. ...
- android stduio 引入 .so
- win10 启动文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
- VS 与JIRA Bamboo的连接
atlassian-vs-connector 可以百度下地址 一些配置 效果:
- 下拉菜单demo---参考阿里云首页顶部下拉菜单
前言: 最近开始学习html+css,准备仿照各大网站写一些demo. 正文: 分析阶段: 如下图: 链接来自于: 阿里云:https://www.aliyun.com/ 实现过程: (一)用css3 ...
- java 观察者模式
/** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); ...
- 数据分析 - 开放街道地图(OpenStreetMap)
数据分析 - 开放街道地图(OpenStreetMap) Reinhard使用OpenStreetMap的开放地图数据作为本次数据分析的数据源,使用Python进行数据清洗,使用MongoDB进行数据 ...