张少伟 + 《软件工程(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

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

  1. 云课堂软件工程(C编码实践篇)学习之我见

    梁作宇 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 写在前言 ...

  2. 《软件工程(C编码实践篇)》课后感

    Fibonacci(与最后申请证书的姓名务必一致) + 原创作品 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1 ...

  3. 《软件工程(C编码实践篇)-孟宁》学习心得汇报

    作者:郑航 原创作品转载请注明出处 <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006" 一 ...

  4. 高级软件工程《软件工程(C编码实践篇)》课程学习心得及内容总结

    李伯威+原创作品转载请注明出处+<软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 一.心得体会 首先 ...

  5. 软件工程(C编码实践篇)学习总结【实验楼系列shiyanlou.com】

    对软件工程的理解及学习软件工程(C编码实践篇)的心得 有些事情没有亲身去体验去经历,永远不知道书上总结的一些思想方法是多么的实用,软件工程是将软件按照工程化方法去开发软件,不是当时完成客户需求就可以了 ...

  6. 软件工程(C编码实践篇)课程总结

    软件工程(C编码实践篇)课程总结 真实姓名:夏雪松(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.stud ...

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

    <软件工程>学习心得与感悟             还清楚地记得入学面试时院长问我的问题,"为什么要报考软件学院"?我坚定地回答,"我要来科大学习专业.规范的 ...

  8. 又见恩师 - 记软件工程大师周伯生教授

    又见恩师 记软件工程大师周伯生教授 初某先生面,一生难忘怀 初识周老师是在1984年暑假过后的一个下午.那时我在北航上学,先生刚从美国马里兰大学回国.记得那一天,他坐在我们几位同学中间,给我们讲解国外 ...

  9. 《程序员养成记》第5集 学习编程的乐趣

    写程序也许就是别无选择的选择 #include <stdio.h>int main(int argc, char *argv[]) {printf("Hello World!!\ ...

最新文章

  1. jquery插件-表单验证插件-提示信息中文化与定制提示信息
  2. linux 内存管理 Transparent HugePages 透明大页 简介
  3. mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
  4. SqlServer-COMPUTE BY
  5. php select user 验证,php 用户验证的简单示例
  6. 原码、反码、补码,以及负数的位操作
  7. Linux mysql.plugin_Linux下MySQL安装
  8. 关于BEA-000402和BEA-000438(没有进程来读取写入管道的数据)
  9. 基于JAVA+Servlet+JSP+MYSQL的问卷调查管理系统
  10. excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
  11. bootstrap 点击按钮刷新_Thyemlef动态刷新页面方法
  12. LiquidCrystal-I2C
  13. 永中集成Office程序代码失窃记
  14. 利用intellij idea工具如何反编译.jar
  15. python篇 006-- pycharm vsc 编写python(对比浅析混合使用) pycharm篇
  16. Direct3D 的进化史
  17. 编程入门先要学什么?打怪升级走起来!
  18. php一键领取名片赞源码,一键领取名片和圈圈赞
  19. K210——PWM控制舵机
  20. 文法二义性与语言二义性

热门文章

  1. 飞桨手势识别带你玩转神庙逃亡
  2. mybatis-plus 参数不生效
  3. 左子树中最右节点≠左子树中最右叶节点
  4. 解决 VMware 中鼠标灵敏度过高,难以控制的问题
  5. 如何关闭ThinkPad电脑的触摸板
  6. 2022北京国际青少年眼健康产业展览会,北京联诚展览有限公司
  7. 利用photoshop制作图片壁纸
  8. 视频回放 | 如何成为一名优秀的地学和生态学领域的国际期刊审稿人?
  9. Kafka消息队列详解
  10. wps中VBA宏与js宏的区别