简枢 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
软件工程(C编码实践篇)是一个非常不错的学习软件工程思想方法的实践性课程,通过一个小小的C语言项目的不断演化,体现了许多工程化的思想和方法,从而让我们更加深刻的理解软件工程理论的内涵。通过跟随模仿孟宁老师的代码实现,从无设计代码,模块化设计的代码,到可复用的代码和回调函数等接口设计,提高了我们工程化代码的编写能力,让我们能够严格遵守代码风格规范来编写代码。总之,这门线上课程重视实践,可以使我们对软件工程有一个直观感性的认识。个人感觉学了这门课之后受益匪浅。必须点赞!!!
实验报告目录:
第一周 课程实验环境准备
实验一:写一个hello world小程序
https://www.shiyanlou.com/courses/reports/1244096
第二周 代码风格规范
实验二:命令行菜单小程序V1.0
https://www.shiyanlou.com/courses/reports/1244609
第三周 基本的模块化设计
实验三:内部模块化的命令行菜单小程序V2.0
https://www.shiyanlou.com/courses/reports/1245499
第四周 可重用模块的接口设计
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
https://www.shiyanlou.com/courses/reports/1246324
第五周可重用模块的接口设计(callback函数)
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
https://www.shiyanlou.com/courses/reports/1246928
第六周函数的可重入性(reentrant)及线程安全
实验六:函数的可重入性(reentrant)及线程安全
https://www.shiyanlou.com/courses/reports/1247537
第七周 子系统的可重用设计
实验七:将menu设计为可重用的子系统
https://www.shiyanlou.com/courses/reports/1248091
总结部分:
学习《软件工程(C编码实践篇)》课程中最大的收获:
熟悉了Linux环境下的C语言编程开发,了解了Vim的基本设置。熟悉了git命令行的使用;熟悉了函数的复用、程序循环等思想;体会到模块化的重要性和精髓,及包容变化的能力:将变化和不变的部分分离。 同时我也了解到KISS原则、设计与代码的一致性、错误处理,用数据结构和控制结构来简化代码等一系列重要原则。学习了链表的很多基本操作代码,同时对在头文件中声明函数、定义常量的一些基本规则、技巧有所了解,进一步加强了代码的编写规范,对程序之间的接口规范化有了初步了解。了解了callback回掉函数机制,使用此函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。了解了函数的可重入性与线程安全之间的关系:
1、可重入的函数不一定是线程安全的;
2、可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);
3、不可重入的函数一定不是线程安全的;
1、可重入的函数不一定是线程安全的;
2、可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);
3、不可重入的函数一定不是线程安全的;
pthread_rwlock_t基本用法
操作 | 相关函数说明 |
---|---|
初始化读写锁 | pthread_rwlock_init |
读取读写锁中的锁 | pthread_rwlock_rdlock |
写入读写锁中的锁 | pthread_rwlock_wrlock |
解除锁定读写锁 | pthread_rwlock_unlock |
销毁读写锁 | pthread_rwlock_destroy |
学习了支持带参数的复杂命令,并尝试使用GNU make来构建和管理自己的工程。
最后分享一下老师上课引用的经典名言警句,与君共勉:
夫事未有不生于微而成于著,圣人之虑远故能谨其微而治之,众人之识近故必待其著而后救;治其微则用力寡而功多,救其著则竭力而不能及也。
——资治通鉴
学习完《软件工程(C编码实践篇)》课程后最大的遗憾:
课程非常精致,但结合之前相关的软件开发经验,发现现在太多程序员都不能真正理解软件工程的精髓,希望以后能有更多程序员来学习孟老师的课程,够好好体会一下软件工程的魅力所在!