陆伟丹 + 原创作品转载请注明出处 + 《软件工程(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. VS工程添加资源文件

    1. 添加资源文件: 2. 资源文件内写相应代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006 ...

  2. 阿里云docker镜像加速

    echo "DOCKER_OPTS=\"--registry-mirror=https://yeyieqis.mirror.aliyuncs.com\"" | ...

  3. PRML读书笔记——3 Linear Models for Regression

    Linear Basis Function Models 线性模型的一个关键属性是它是参数的一个线性函数,形式如下: w是参数,x可以是原始的数据,也可以是关于原始数据的一个函数值,这个函数就叫bas ...

  4. 批处理——服务器的web文件备份

    首先建立三个文本文件,稍后会变成.bat结尾的批处理文件. 第一个文件:copyfile.bat[复制需要备份的文件到tmp文件下,等待压缩时使用] xcopy "D:\Webhost\*. ...

  5. android stduio 引入 .so

  6. win10 启动文件夹

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  7. VS 与JIRA Bamboo的连接

    atlassian-vs-connector 可以百度下地址 一些配置     效果:        

  8. 下拉菜单demo---参考阿里云首页顶部下拉菜单

    前言: 最近开始学习html+css,准备仿照各大网站写一些demo. 正文: 分析阶段: 如下图: 链接来自于: 阿里云:https://www.aliyun.com/ 实现过程: (一)用css3 ...

  9. java 观察者模式

    /** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); ...

  10. 数据分析 - 开放街道地图(OpenStreetMap)

    数据分析 - 开放街道地图(OpenStreetMap) Reinhard使用OpenStreetMap的开放地图数据作为本次数据分析的数据源,使用Python进行数据清洗,使用MongoDB进行数据 ...