利器而善事——记《软件工程(C编码实践篇)》学习感悟

来源:互联网 发布:淘宝与天猫有什么区别 编辑:程序博客网 时间:2024/05/22 06:38

张少伟 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

    SA17225499  张少伟

感悟

一年前的这个时候,我正在为考研做着最后的冲刺,那时候我买了一本《软件工程》的书,没有来得及看。一年后的这个时候,我完成了高级软件工程课程的学习,那本书仍然静静的躺在书架,我没有选择去看,两个余月的课程让我体会到——软件工程课程乃至整个学科的学习永远都不仅仅在书本上。

软件工程,顾名思义,是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它将程序员的工作从编写代码的局部抽离出来,从宏观的角度去看待软件,应用计算机科学、数学、逻辑学及管理科学等原理来研究软件生命周期中各个阶段,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。学习软件工程之后我才明白,正是由于软件工程的交叉性与综合性,在软件设计中,编写代码只是一部分,充分的前期准备,精准的需求分析,科学的概要设计以、良好的客户沟通以及有效的软件测试才是一个软件质量真正的决定因素,才是降低软件开发周期的有效手段,而这些正是高素质的软件人才与其他人的区别。

当然,良好的软件工程素养决定了软件质量,而优秀的代码风格却决定了代码质量——如何在保证可读性、可维护性以及健壮性的同时,兼顾代码的执行效率是每个合格程序员的基本功,而本门课程——《软件工程(C编码实践篇)》正是这样一门锻炼我们基本功的课程。古人有云:工欲善其事必先利其器,在工作生活中,夯实基础往往要比学习技巧更为重要。

在这门课程中,我们学习了基于可读性原则的基本代码规范,学习了从一个hello world小程序开始,最后实现了一个内部模块化的可重用的命令行小程序。在这个过程中,对代码规范的要求一直是贯穿始终的,这也是我作为一名转专业的学生,收获最大的方面,感谢老师一直以来的坚持。当然,Linux系统的操作方法、shell指令的用法、内部模块化、可重用链表模块的实现以及callback机制等等,这些对于我来说都是陌生而富有意义的。

总而言之,本次课程所带给我的收获是不言而喻的,它不仅让我学习到了软件开发的基本技能,还让我看到了,程序员作为软件设计的主体,应该更为宏观、更为科学、更为明智,这也是优秀的程序人员与代码编写员的区别所在。

正所谓利器而善事,感恩学校,老师。


实验成果展示

本课程的实验共6次,如下:

  • 实验一:学习之路——Say Hello to the World
    本实验作为课程的入门实验,最主要的任务是搭建编程环境,同时还对基本的shell指令进行了简单的学习,本次实验的目的是为以后的实验打下坚实的基础。

  • 实验二: 学习之路——命令行菜单小程序V1.0
    本次实验的目的是写一个简单的命令行菜单,通过读取用户输入来判断并执行对应的操作。使用了字符数组cmd来存储用户输入,然后通过对cmd字符串的比对来确定所需执行的操作。在决定实现何种功能时,由于自身编程能力局限,仅实现了上述较为简单的8项,其中time、calculation、help以及quit使用基本的C语言函数实现,notepad、game、mac以及explore则过Linux的system()函数,通过新建线程调用shell执行对应操作来实现。

  • 实验三: 学习之路——内部模块化的命令行菜单 V1.1
    要实现代码的内部模块化,最重要的是做好“区分”工作,在将操作函数化的前提下,实现数据与操作的分离,在本次实验中应该针对本命令行菜单所涉及的各种功能,逐一实现函数化,而后实现内部模块化。

  • 实验四:学习之路——用可重用的链表模块来实现命令行菜单小程序V2.5
    本次实验的目的是将命令小程序使用可重用的链表模块来实现,可采用“文件柜”这种链表与数据相对独立的方式进行代码改写,改写过程中尽可能的保持原主函数不变,体现重用的意义。

  • 实验五:学习之路——用callback增强链表模块来实现命令行菜单小程序V2.8
    本次实验的目的是在前些实验的基础上使用callback增强链表模块,实验任务主要有以下3点:
    1.找出视频中quit指令无法退出的原因,并修改
    2.使用callback增强链表模块
    3.隐藏结构体定义

  • 实验七:学习之路——可重用的命令行小程序v3.0
    本次实验的目的是将命令行小程序实现为可重用的子系统,增加两个menu 的接口,使得在任何程序中调用这两个接口都可以实现命令行小程序的调用,同时尝试实现带参数的复杂命令指令的编写以及使用Makefile工程文件替代输入,实现程序编译和编译文件清理。

  • 代码地址https://github.com/zhanghughsw/zswlab


写在最后

最后作为这门课程的结束,谈谈本次课程的收获与遗憾,先苦后甜,先从遗憾说起来:
1.受限于自身的编程能力和理解能力,学习的过程中有很多自己的想法,例如在命令行功能设计上面,很多想法都未得到实现
2.由于编程知识的匮乏,对于实验中的一些方法理解的不是很透彻,这就导致了实验过程中会出现一些低级错误
3.关于代码模块的统筹规划能力不足,还是无法很好的跳脱于代码的细节去理解模块之间的关系

收获

1.良好的代码书写规范
2.一定的代码阅读能力
3.一定的代码模块统筹规划能力
4.一定的代码编写能力
5.Linux基本的操作能力
6.在软件工程领域深造的莫大信心

完。
2017.11.13

阅读全文
0 0