轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
轻源码 门户 电脑主程序开源 查看主题

关于学习软件工程(C编码实践)课程的感想

发布者: hackerme | 发布时间: 2018-3-6 02:00| 查看数: 3289| 评论数: 0|帖子模式

姓名:杨昊         学号:SA17225444             原创作品转载请注明出处

软件工程(C编码实践篇)》MOOC课程

一.对于软件工程的理解及学习心得

          软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确认它可以投入运行使用的过程。在这个过程中的每一阶段,都包含有相应的文档编制工作。

          软件开发要融入工程化的思想,要有高度的设计能力,关注更多的软件运行属性和设计质量属性,同样的系统,不同的软件人员会做出完全不同的软件,正规,高效的开发团队要比游击队开发团队不只高出几十倍。软件开发,不仅仅关注功能,性能,更应该去研究可维护性,可扩展性等质量属性,不仅仅只关注代码,而更要上升为设计,复用等。
还有更高层次的设计开发,软件重构,模块化,系统构架,搭建统一软件平台,度量软件质量等.软件开发人员,要作的事情太多了,软件实在是一个浩大的脑力工程,甚至会让人觉得这是一个投入/产出比最低的行业,因为要学习的知识实在太多了,每时每刻都要处于不断的学习和更新当中。

          本次学习软件工程,我开始树立了一个正确的软件体系的知识框架,了解到了一些关键的开发理念,相信这对于今后我的职业道路都是相当的有帮助的,感谢孟老师细致认真的授课及辅导,让我度过了一段很愉快的学习经历。


二.实验报告链接

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

         理解:了解linux系统下vim编辑器的使用,在vim编辑器下编写C语言代码。和老师说的一样,一开始用特不习惯,然后越用越觉得还不错。

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

  理解:代码编写时要注意规范包括缩进、命名方式、注释等,因为在后期维护或者阅读时方便理解。

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

  理解:模块化的思想正式为了实现 高内聚、低耦合 的思想。提高代码的质量。

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

     理解:设计一个单独可重用的链表数据结构,并将这个数据结构用在 命令行菜单小程序中。实现了对能够单独完成某项功能代码块的重用。

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

      理解:隐藏单独完成某项功能代码块的某些信息,增加该模块的通用型。用callback函数实现的多态浅析以及信息隐藏。类似于遥控器一样,用户只需要了解按哪个按键对应的机器的就会实现什么样的功能,而内容的具体实现以及机制,用户没有必要知道。C中的多态性可以用callback实现,即函数回调。

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

         理解:通过暴漏接口的方法实现了对可以单独完成某些功能的子系统的重用。最后学会了编写makefile文件,编写可接受带复杂参数的函数是命令行菜单更加通用和多功能。


三.总结在本次课程中最大的收获和心得

      软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。这门课学完之后收获不小,我本科学的不是计算机相关专业所以一直对软 件的开发流程不是很了解,通过这8周的学习了解了软件开发的流程,更深的理解了代码层次的软件工程,下面就是我对代码层次的软件工程的部分总结。

      孟老师从一个简单的C语言菜单小程序,从最开始的搭建环境讲起,从零入门,一步步的深入,将知识点讲解的很透彻。 接下来又讲了平时我们不太注重的代码风格规范的问题。良好的编码规范可以促进团队的合作,减少不必要的阅读障碍。当然,也就避免了程序员之间的矛盾。 不仅如此,良好的代码规范还可以降低维护成本,在一些大的项目上,有利于寻找bug点和代码审查工作的顺利高效的推进。对于一个程序员自身来讲,更有助于自身的发展。

      其次对于软件工程的学习心得,我的感觉就是要转变思想方式。软件工程要求我们有一种更加抽象的思想去理解和实践,不能拘泥于把功能实现就好的程度,而是把我们的实现更加抽象起来从另一个角度来思考如何更加有效地实现功能。比如考虑代码的模块化,接口的可重用设计,以及系统的可重用设计。在编码中,对于一个很小的软件来说,软件的代码都在可以掌控和计算的范围之内。而对于一个稍有规模的软件来说。就很有必要来通过模块化来分割系统组件模块。通过使用伪代码或者统一建模语言的工具来事先规划好自己的代码结构。从整体把握系统的功能实现流程。模块化,顾名思义,就是将大的软件系统分割到不同的模块来分别实现。在某种程度上可以减少系统的复杂性和重用性。与此同时,各个模块的相互之间的联系,就产生了接口的概念。在自己的工程中把一些重复执行的逻辑应当尽可能的划分为一个功能模块,对外只提供接口,调用时并不需要考虑具体的实现,这正是面向对象编程的一个原则。

       在接口的课程中,第一次接触了CallBack函数。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

      在函数的可重入性和线程安全的课程中,我们将关注于代码的安全性方面的问题。同样的代码在不同的场合下执行的结果有可能会不同。所以在以后的编程中会更加注重自己的代码质量。在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。同时了解了函数的可重入性与线程安全之间的关系,可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);不可重入的函数一定不是线程安全的。

    最后一个实验中,在linux下对代码的编译可以编写Makefile文件,然后直接用make命令编译会省事不少。getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容。

      软件设计的主要原则:模块化,接口,信息隐藏,增量开发,抽象,一般化,这需要在今后的学习工作中慢慢来体会。模块化的思想是降低模块间的耦合模块内的内聚,可重用模块接口的设计使得代码块更加通用。软件工程的核心不是在于如何去实现需求的功能而是在于何如高效的实现。这就好比瓦匠可以盖几层小楼,但是无法去盖一栋高层大厦。而软件工程就是告诉我们如何从只能够从盖几层小楼的“瓦匠”转变为能够盖高楼大厦的工程师。另外,在一次次实验过程中,自己对linux基本操作越来越熟练,也学到了很多新的命令,为以后深入学习Linux打下了良好的基础。第一次了解并使用了代码库的git功能,自己查资料了解了代码库的其他相关用法,也是今后做其他项目的一个基础。

      感谢孟老师的辛勤付出,为我们提供了一个这么好的学习平台,不仅仅只是一门软件工程的课程,还拓展了一些知识,提高了我的计算机素养,我今后会继续努力提高自己的能力。

     感谢学长的帮助与指导,让我们在8周的学习中有了更多交流的机会,学到了更多的东西。因为你们的付出,让这门课更加充实。

         

最新评论

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

客服QQ点击咨询

微信公众号

APP客户端

Copyright © 2016-2019 http://www.qingyuanma.com/ 鲁ICP备17014494号

快速回复 返回顶部 返回列表