梁昱森 高级软件工程 学习总结

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

  • 用自己的话简要总结您对软件工程的理解及学习软件工程(C编码实践篇)的心得;

  • 将您之前的所有实验报告作业做成目录列表(链接),可以修改完善实验报告,更正理解有误或不准确的地方,可以在目录中给每篇实验报告加个简要引言,总之,您的这篇学习总结能为其他学习者提供一个参考索引;

  • 根据本课程所学知识阐述您对在代码层面的软件工程的理解,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 ”,博客内容的具体要求如下:

    • 题目自拟,内容围绕您对在代码层面的软件工程的理解及学习软件工程(C编码实践篇)的心得进行;
    • 将您之前的所有实验报告作业做成目录列表链接放在博客中;
    • 总结部分:您在学习《软件工程(C编码实践篇)》课程中最大的收获?学习完《软件工程(C编码实践篇)》课程后您最大的遗憾是什么?

一、您对在代码层面的软件工程的理解及学习软件工程(C编码实践篇)的心得

  在学习了本门课程之后,我认为软件工程是一门研究如何规范化地去开发和维护软件的课程。主要是以过去的软件开发经验作为指导,探索如何高质量、低成本地进行软件开发,使得在开发过程中,不同人员之间的责任更加明确,在后期维护中,更容易对软件进行重用和维护。
  本门课程理论和实践相结合,在讲解理论的同时设计了同步的实验课程,使我们能够马上将枯燥的理论应用到具体的实践过程中,加深对理论的理解和记忆。实验循序渐进,教我们如何把一个菜单小程序逐渐改写为可重用的菜单子系统,全面覆盖了在这之中可能存在的问题。
  通过这门课程的学习和实验的完成,我更深刻的理解了软件开发的规范。以前可能更多的只是为了实现软件的功能而编程,而现在我会从代码的规范性、代码功能模块的划分、系统模块的封装、线程安全以及可重用性等多方面进行考虑,学习这门课程为我今后的职业生涯打下了坚实的基础。

二、将您之前的所有实验报告作业做成目录列表链接放在博客中

实验一:写一个hello world小程序

  实验一的内容比较简单,是在实验楼的Linux环境中实现一个hello world程序。主要是让我们熟悉Linux的变成环境和基本命令。除此之外,还让我们熟悉了git的操作。实验一从零开始,为我们之后的实验打下基础。

实验二:命令行菜单小程序V1.0

  实验二通过一个命令行菜单小程序的编写,让我们将从课上学到的代码书写规范,应用到实际的编程中,加深对规范的印象。其中规范主要包括缩进、命名和注释等具体要求。

实验三:内部模块化的命令行菜单小程序V2.0

  实验三主要强调的是代码的业务逻辑和数据存储模块的分离,把整个系统分成两个部分,一是菜单业务逻辑,二是菜单数据存储。这个实验主要是让我们体会了代码设计中内部模块化这个概念,可以使得整个程序的结构体系更加清晰,加快了其他程序员对代码的理解过程,便于代码的后期维护。

实验四:用可重用的链表模块来实现命令行菜单小程序V2.5

  实验四主要强调的是链表模块的可重用。比如说我们在程序中设计了一个链表,或是在别的地方已经开发了一个链表,那么我们就可以把这个链表模块提取出来,即可以在这个程序中使用,也可以在别的程序中使用。避免了重复造轮子的过程。

实验五:用callback增强链表模块来实现命令行菜单小程序V2.8

  实验五的学习重点主要是callback函数,它是一种实现模块通用性的机制,主要功能是实现模块之间的解耦。callback将函数名作为函数参数放在链表的接口中,这样子针对不同的程序,就可以用同一个链表模块而实现不同的功能。

实验六:函数的可重入性(reentrant)及线程安全

  实验六没有配套的实验,主要强调的并发编程。可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。
  线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
  可重入的函数不一定是线程安全的,可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的)读写锁可以有效解决这里的线程安全问题。

实验七:将menu设计为可重用的子系统

  实验七主要目的就是将之前设计的菜单小程序变成一个菜单子系统,其他系统可以调用这个子系统,完成菜单功能。除此之外,还介绍了Makefile,用于减少执行程序时繁琐的指令输入功能;以及getopt()函数获取命令中的复杂参数。

三、您在学习《软件工程(C编码实践篇)》课程中最大的收获?学习完《软件工程(C编码实践篇)》课程后您最大的遗憾是什么

3.1 最大的收获

  在之前写代码的过程中,我很少关注代码的可读性以及分模块等方面,因此过了一段时间后再读这份代码,或者在其他程序中需要调用这份代码的时候,总是会忘记这份代码的含义,或是在调用时遇到各种各样的问题。经过本门课程的学习后,我收获了许多软件工程相关的知识,除了有线上实验中学到的代码规范、内部模块化、可重用,callback、线程安全等,还包括线下学到的代码版本控制、软件生命周期、软件测试和接口设计等方面的内容。
  线上的内容比较具体,是代码编写过程中如何用软件工程的观点去做开发。而线下的内容比较宏观,是整个项目过程中应该需要注意的事情。线上线下相结合的方式让我对软件工程有了更深的认识,对我今后的职业生涯提高很大。虽然课程结束了,但这只是起点,我要在之后的工作过程中,进一步学习软件工程的相关知识。

3.2 最大的遗憾

  学习本门课程之后,最大的遗憾在于自己开发经验还不够丰富,课程中涉及到的一些概念不足以理解透彻。在这之后的工作中,我要反复咀嚼本门课程内容,温故而知新,更深入地理解软件开发过程。

梁昱森 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值