陆伟丹 + 原创作品转载请注明出处 + 《软件工程(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.代码风格规范

【实验二:命令行菜单小程序V1.0 实验报告 代码库

小结:学习缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。

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编码实践篇)总结的更多相关文章

  1. 软件工程(C编码实践篇)学习心得

    孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...

  2. 软件工程(C编码实践篇)课程总结

    课程内容来自网易云课堂中科大孟宁老师的软件工程(C编码实践篇)课程. 课程页面 我觉得本门课程的设置非常科学,每一周课程都是基于上一周课程的进一步抽象,使得学习者能够循序渐进,逐渐加深对软件工程的理解 ...

  3. 软件工程(C编码实践篇)学习总结

    吴磊 SA17225400 学习完了孟老师的软件工程(C编码实践篇),跟着老师一步步的完成了代码的编写,收获真的很大. 在学习这门课之前,我还不会用Linux,也没接触过Git.如今我已成能够在Lin ...

  4. Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)

    Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...

  5. Linux内核分析第三周学习总结

    Linux内核源码简介 arch/ 该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录. 和32位PC相关的代码存放在x86目录下. 每种平台至少包含3个子目录:kernel(存放支持体系 ...

  6. Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动

    姓名:江军 ID:fuchen1994 实验日期:2016.3.13 实验指导 使用实验楼的虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...

  7. cprogram作业

    刘金福 SA17225205 第三次作业 url:http://blog.csdn.net/liu896749150/article/details/78176433 学号:SA17225404 姓名 ...

  8. 20135302魏静静——linux课程第三周实验及总结

    linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...

  9. 软件工程线上课程(C语言实践篇)学习心得总结

    林牧 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 软件工程的理 ...

随机推荐

  1. docker 组件(c/s)

    Docker 组件 1. docker client : docker的客户端 2. docker server : docker daemon的主要组成部分,接受用户通过docker client发 ...

  2. git安装及命令使用和github网站

    最近参与别人的github项目时,学习了git的使用,首先需要在https://github.com/网站上注册账号和邮箱,然后fork一个开源项目,然后下载目前Windows下最新版本的git,下载 ...

  3. 002-添加网站ico图标

    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" me ...

  4. 在SublimeText上搭建ReactJS开发环境(转载)

    本文转载自: http://blog.csdn.net/yczz/article/details/50469388

  5. 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)

    在很多前端框架中todos都是一个小的参考例子,在react中当然也是不例外的,先来看看最终的效果先... 这个就是官方的例子,我们先来分析下他是由那及格组建组合成的... 再来分析下他是的数据最终是 ...

  6. New Concept English 1-10

    Lesson 10 The loss of Titanic The great ship, Titanic, sailed for New York from Southampton on April ...

  7. CEGUI0.8.4引入到自己工程中

    首先要确定你的CEGUI已经完全编译好,若未进行这一步请参照http://www.cnblogs.com/wenguang1996/p/5027522.html 打开VS2012新建C++工程,然后添 ...

  8. ThinkPHP的异步搜索

    因为公司的后台框架采用了Ajax异步处理,控制器的方法,有时候会被多个连接所重复调用,虽然这个很符合OOP开发思想,但是为了维护这个框架,付出的汗水也是很大的. 说下正题了: 我在后台的搜索框调用了优 ...

  9. hdu2068RPG的错排

    Problem Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R ...

  10. 2015/10 中外合璧再现辉煌—CCFC2015技术峰会

    笔者有幸参加了CCFC技术峰会,现在发布照片几张.大家看一下. 2015年10月14日,CCFC 2015电子数据取证技术峰会于四川成都举办,有200余名一线取证技术人员及国内外各行业专家参会.此次峰 ...