软件工程(C编码实践篇)课程总结
课程内容来自网易云课堂中科大孟宁老师的软件工程(C编码实践篇)课程。
我觉得本门课程的设置非常科学,每一周课程都是基于上一周课程的进一步抽象,使得学习者能够循序渐进,逐渐加深对软件工程的理解。
1. 第一周:熟悉Linux实验环境;要求 实验一:写一个hello world小程序。
总结:hello world本身很容易,但是linux下工作方式和windows下完全不同,会给不熟悉linux的人带来不少问题。首先vi没有Windows下的IDE智能化,不能实时纠正语法错误,编译是会产生不少语法错误,需要细心调试。其次,linux的诸多命令和参数,需要更长时间练习操作才能熟练掌握。最后,初学者往往不熟悉git,需要一定时间研究版本控制系统。这3点是liunx初学者需要克服的困难。
2. 第二周:代码风格规范;要求 实验二:命令行菜单小程序V1.0。
总结:初步接触了模块化设计思想,理解了代码风格的重要性,学会了将命令封装成函数供使用者调用。
3. 第三周:基本的模块化设计;要求 实验三:内部模块化的命令行菜单小程序V2.0。
总结:初步实现了业务逻辑与数据结构的分离,加深了对模块化思想的理解。而且这次自己做死创造难度,采用了AVL树做数据结构,static函数声明,函数指针做参数实现call -back;以及实现了在Windows IDE下编程,共享到Linux虚拟机编译运行,最后从自己的Vmware11的Ubuntu虚拟机向实验楼git代码。从而进一步提高了自身的水平。
4. 第四周:可重用模块的接口设计;要求 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5。
总结:本次对于数据结构,我参考了Linux内核源代码中双向链表的实现,移植其功能接口集成到menu菜单程序中。而在Linux内核链表的设计中,为了达到最高运行效率,使用了宏定义和内联函数完成所有功能的设计实现,所有代码集成在其设计的接口头文件中。Linux内核源代码博大精深,其通用的设计思想和高效的实现方式,值得C/C++程序员认真阅读,即使不去做内核相关的工作,阅读精彩的代码对程序员自我修养的提高也是大有裨益的。
5. 第五周:可重用模块的接口设计(callback函数);要求 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8。
总结:本次实验通过Debug调试的使用增强了代码调试的能力,利用函数指针参数化上下文,以最小化信息隐藏的标准,设计了更加 通用好用 的API接口。
6. 第六周:函数的可重入性(reentrant)及线程安全浅析;本次没有实验,老师主要介绍了多线程编程和线程安全方面的知识。
总结:多线程编程和并行编程是未来技术的发展趋势,尽管这方面的内容博大精深,但却是一个优秀的软件工程师核心竞争力的体现。关于这方面知识的进一步学习,我推荐2套最新更新出版的经典书籍:《Linux/UNIX系统编程手册》和《UNIX环境高级编程(第3版)》。我认为如果掌握好这2套书的内容,将会在技术竞争力上有绝对优势。
7. 第七周:子系统的可重用设计;要求 实验七:将menu设计为可重用的子系统。
总结:本次实验难点在于Liunx系统函数getopt的理解和使用。getopt本身参数众多,难以理解,极易用错。做为最后一次实验,综合了前面所学知识,完成目标需要全面设计和仔细分析调试。
8. 第八周:代码背后的设计思想;本次没有实验,老师主要总结了前面的课程,论述了软件工程的一些理论知识。
总结:本次课程主要讲述了 不同的质量视角,各种设计方法论,和几个重要的设计指导原则;为进一步学习后续课程打下良好的基础。
通过一学期的学习,使得自己对软件工程有一个初步了解和认识,找到了进一步提高能力的方向。回想起一学期的历程,最大的收获是:抽象能力的提高和模块化思想的实践。非常期待软件工程系列课程的 后续2门课程。最大的遗憾是课程时间比较短,不足以深入学习多线程编程方面的内容。这方面网络上视频稀缺,而书籍比较晦涩难懂,自学难度较大,期待老师以后有时间能制作多线程和并行编程方面的课程。
真实姓名:薛镇(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
软件工程(C编码实践篇)课程总结的更多相关文章
- 软件工程(C编码实践篇)学习心得
孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...
- 软件工程(C编码实践篇)总结
陆伟丹 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 对软件工程 ...
- 软件工程(C编码实践篇)学习总结
吴磊 SA17225400 学习完了孟老师的软件工程(C编码实践篇),跟着老师一步步的完成了代码的编写,收获真的很大. 在学习这门课之前,我还不会用Linux,也没接触过Git.如今我已成能够在Lin ...
- 20135302魏静静——linux课程第三周实验及总结
linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...
- 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 姓名 ...
- 软件工程线上课程(C语言实践篇)学习心得总结
林牧 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 软件工程的理 ...
随机推荐
- 【UWP】在不同类库使用ResourceDictionaries
通常我们在类库中定义资源的时候可以在Theme/Generic.xaml中定义,当类库加载的时候,会自动加载Generic.xaml文件中的资源,通常用在控件库中,但如果控件多了之后,所有的Style ...
- Oracle命名规范
1.编写目的 使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读.理解和继承. 2.适用范围 本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工作. 3.对象 ...
- MVP 2015社区大讲堂之:在ASP.NET应用中执行后台任务
昨天下午,在微软的MVP 2015社区大讲堂上给大家分享了一个题目:在ASP.NET应用中执行后台任务.这是一点都不高大上,并且还有点土气的技术分享.不过我相信很多人都遇到过这样的问题. 虽然是一个很 ...
- MVC之前的那点事儿系列
MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园 ...
- jquery内容选择器(匹配包含指定选择器的元素)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java程序,JDK的安装、环境的配置
打开文件包,找到jdk-8u111-windows-x64 (64位) 双击打开安装界面 路径自行更改;(不可使用中文字段)新建一个文件夹放后面这个安装包 二.设置环境变量 右键我的电脑-属性-高 ...
- Linux练习
1.创建目录/perm ,在/perm目录下创建文件newfile ,授予/perm目录所有用户都有rwx权限: #创建perm目录 [root@CentOS62 ~]# mkdir perm [ro ...
- nodejs中全局变量
1.global 类似于客户端javascript运行环境中的window module1.js: module.exports={}; //耻辱的使用了全局变量 global.varA = &quo ...
- MySQL之MySQL常用的函数方法
MySQL常用函数 本篇主要总结了一些在使用MySQL数据库中常用的函数,本篇大部分都是以实例作为讲解,如果有什么建议或者意见欢迎前来打扰. limit Select * from table ord ...
- requirejs:让人迷惑的路径解析
接触过requirejs的童鞋可能都知道,无论是通过define来定义模块,还是通过require来加载模块,模块依赖声明都是很重要的一步.而其中涉及到的模块路径解析,对于新手来说,有的时候会让人觉得 ...