软件工程(C语言实践篇)学习心得

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


对软件工程的理解

    一门学科,比如土木工程,机械工程等,一旦被提高到工程的高度,就意味这不仅仅只是一门科目的学习,需要多学科交错,软件工程是以有关的自然科学和技术科学为理论基础,结合生产实践中的技术经验,研究和解决在设计,开发,测试,维护软件中的全部理论和实际问题。软件工程不仅仅是简单的写代码,写代码仅仅是一个中间过程,前期和后期都要大量的工作,这些工作都是为了使写代码更加方便和有效。

实验报告

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

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

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

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

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

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

1. 线上学习 

     通过对线上课程的学习,我首先大致了解了什么是软件工程,以及程序编程的一些思想和套路。像孟老师说的一样,程序由数据结构和算法组成,软件工程也应该有他的组成方式。实践出真知,孟老师利用C语言和Linux环境循序渐进地讲述了一个简单的Linux命令小程序的设计过程,使我们同学对软件工程产生了更直观的认识。

1.1课程一

      通过第一节课程的学习,我了解了Linux的一些接触命令,学会了使用gcc编译程序,因为大多数服务器操作系统都是Unix类操作系统,所以如果想成为一个专业的程序员,就必须掌握Unix类的操作系统。配套的实验一比较简单,写一个hello world。除了线上使用C语言提交实验外,线下老师又要求我们用Go语言重新写一遍实验,Go语言在语法和性能上与C语言有很大不同。

1.2课程二

    第二节开始编写一个开源的内置命令行小程序,这次实验逻辑比较简单,但是我更加熟悉了一些代码规范,比如代码的缩进以及括号的对齐。

1.3课程三

    第三节开始了模块化的编程,印象最深的两个原则是KISS原则和不要和陌生人说话原则,即一个函数只能实现一个功能,一个对象对其他对象应该有尽可能少的了解。另外还有一个二八原则,这一点在工程化编程中是个很普遍的现象,参与工程实践后的我很有感触。实验三将小程序的业务处理和数据处理分开,从而体会到了函数封装模块化对于可重用的重要性,以及代码设计规范的一些方法,初步了解了业务逻辑和数据存储分离的思想方法。

1.4课程四

    模块的好处就是包容变化。第四次实验将一个程序模块化,分别为接口、功能函数以及主函数,这将有利于以后代码的维护。我学习到了接口的五个要素和接口的分类、接口设计与模块之间的耦合程度的关系,更加深入的理解了接口的概念,理解程序模块化的思想。复习了链表的使用,以及深入的认识到了数据结构在编程中的重要作用。另外,Go语言和C语言在指针上有很大差别,比如Go中变量名不等于数组开始指针,而且Go语言没有头文件的格式,所以结构体也必须写到同文件夹下面的子文件里。

1.5课程五

     第五节课利用callback函数在菜单中查询列表,是的接口更加通用。一个代码模块的用户是开发者,而不是最终的使用者。本次试验通过使用回调函数将程序中的链表实现兼容性更好,而且做到了信息隐藏,将接口放在用户不易接触到的地方,是程序功能性更强。另外,在Go语言中不存在无类型指针,需要用interface来代替。

1.6课程六

    第六节课主要讲述了函数的可重用性及线程安全,可重入的函数不一定是线程安全的;但是不可重入的函数一定不是线程安全的。每个线程都有独立的调用堆栈,除此之外进程的所有资源都是线程所共享的。如果线程同时访问一个函数并改变了全局变量,则会发生错误,这样的函数就是不可重入函数。不可重入函数可以通过加入互斥锁的方式变为可重入函数。

1.7课程七

    通过本次实验学会了使用make命令编译程序,通过为menu子系统设计接口,支持带参数的命令,使得程序更具有可重用性。

2.线下学习

    线下老师结合一篇关于Google软件工程实践的文章向同学们布置了详细地任务,让我们自愿认领与研究。谷歌作为全球最成功的网络公司之一,对软件代码的开发、存储与维护都有着成熟的流程与体系。这篇文章大概讲述了谷歌软件开发、项目管理、人员管理等方式。谷歌采用了Blaze的分布式构建系统。而在代码审查方面,对主源代码存储库的所有更改必须至少由另一位工程师审查。听了各位同学的ppt讲解之后,我逐渐明白了作为一个大公司对代码管理与审查的复杂性,认识到自己的学习还停留在最基本的知识体系当中,如果想要得到真正的实践还是需要在工作中逐渐积累。

3.收获与遗憾 

    作为一名转专业的同学,学习过这门课程之后,我终于明白了软件工程具体是做什么的,都有哪些流程,也懂得了作为专业的软件开发人员所应该具备的基本素质和技能。学会了Go语言的语法和使用,对比了Go语言和C语言开发的各自特点。遗憾是没有机会参与具体的工程实践中,没有得到与他人合作的机会,在做课上作业后没有认真批改并与他人的成果作比较。

你可能感兴趣的:(软件工程(C语言实践篇)学习心得)