高级软件工程总结 -- 管中窥豹——听孟宁老师庖丁解牛软件工程有感
- 印象最深刻的两次讲解
- 一个就是menu项目的深入讲解,孟老师从一个十分初级的menu项目为例,一步一步地往上面不断地拓展功能,尤其是最后那个把menu项目分成linkTable的通用接口,然后给SearchLinkTableNode增加一个callback形式的回调函数,这在C/C++代码中算是我第一次见识到这种写法了。其次为了降低两个模块之间的耦合度,为了把公共耦合降低为标记耦合,孟老师指出,同时为SearchLinkTableNode和回调函数condition都添加一个void* arg的参数,这样我们就可以在不改变通用代码结构的基础上达到了复用的作用,同时也能根据不同的参数来做出对应不同的搜索结果,这种模块化的思想值得我们在未来的软件工程的实践中去好好应用。
- 另外一次就是孟老师给我们讲解那个Vue的源码了,MVVM到底为什么比MVC更智能,因为在MVC架构中如果Model发生了变化那么需要手动的用controller去update,但是在Vue中如果DOM树对应的Model数据发生变化,那么View会自动更新。孟老师从Vue源码开始一步一步地深入分析,从Object.defineProperty重写get和set方法再到创建Watcher对象进行监听,最后深入浅出地分析了Model数据对象被修改后是怎么自动更新到页面的全过程,这也是我第一次的有老师来给我一点一点的讲解Vue的源码分析,让我体会到了MVVM以及观察者模式的精妙之处。我觉得对我未来进一步地去学习Vue有着非常巨大的帮助。
- 主要章节学习的主要内容
- 工欲善其事必先利其器
- 代码中的软件工程
- 以C语言代码为例来为我们讲解了一个menu项目,介绍了工程化编程的基本方法,涵盖代码的风格和规范、模块化、可复用、可重入函数与线程安全等
- 从需求分析到软件设计
- 从需求分析开始,以UML为工具完成用例建模、业务领域建模、对象交互建模,最终形成了设计方案
- 软件科学基础概论
- 探讨了软件的元素、结构、特性和描述方法,以及高质量软件的内涵等
- 软件危机和软件过程
- 回顾了软件危机的前因后果,并将之与PSP、TSP、CMM/CMMI、敏捷开发、DevOps等软件过程和生命周期管理衔接起来
- 更具体的学习知识点这里就不再具体罗列出来,但每一章都值得我们去认真的思考其中的道理
- 感想
- 最大的感想就是孟老师的软件工程课与其他非常抽象的软件工程课大不相同,很贴切公司里面的开发环境而不是停留在课本中,从具体的项目出发一步一步深入浅出带领我们去分析问题,去探讨到底怎么样才能去开发一款好的软件,那些设计模式规范要求都不是凭空产生的,从历史的角度去带我们分析问题,希望能在未来的学习和开发过程中能够牢记高级软件工程这门课给我带来的感悟和体会
- 参考资料
- 代码中的软件工程 https://gitee.com/mengning997/se
作者:208