软件工程(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 软件工程的理 ...
随机推荐
- SEO技巧汇集
每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌.哦,不是我的老妈,但你明白我的意思.这意味着网页设计师和SEO新手中大部分人都能迅速上手,没有任何困难 ...
- 理清那么多个OO(面向对象)
OOA - Object-Oriented Analysis(面向对象分析) OOT - Object-Oriented Testing (面向对象测试) OOP - Object-Oriented ...
- .NET使用ZXing.NET生成中间带图片的二维码
很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...
- jquery内容选择器(匹配内容为空的元素)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【转】数据库无关的GO语言ORM - hood
项目地址:https://github.com/eaigner/hood 这是一个极具美感的ORM库. 特性 链式的api 事务支持 迁移和名字空间生成 模型变量 模型时间 数据库方言接口 没有含糊的 ...
- EasyUI+MVC-搭建后台框架
一.EasyUI简介: jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面. 官方网站:h ...
- RSA加密解密(python版)
RSA的算法涉及三个参数,n.e.d. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质: ...
- 2015暑假多校联合---Problem Killer(暴力)
原题链接 Problem Description You are a "Problem Killer", you want to solve many problems. Now ...
- php取默认值以及类的继承
(1)对于php的默认值的使用和C++有点类似,都是在函数的输入中填写默认值,以下是php方法中对于默认值的应用: <?phpfunction makecoffee($types = array ...
- js控制页面显示和表单提交
早期的web页面在显示方面一般在后台进行控制,虽然对后台开发来讲是比较容易做到的,但是涉及到一个问题,那就是数据库压力. 因为要控制显示,所以会比较频繁的从数据库中来回调用. 现在的js功能越来越强, ...