USTC高级软件工程课程学习心得

  • USTC高级软件工程课程学习心得

    • 对软件工程的理解
    • 课程学习的收获
    • 实验报告及目录
    • 总结体会

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

1 对软件工程的理解

  个人觉得,软件工程就是用工程化的思想去写代码,使得代码更加高效,这个高效不是指性能好,而是指提高开发效率,降低开发团队的成本。以前的编程的重心往往在算法的复杂度,较少考虑代码结构、通用性、可复用性、可读性等,其实,如果想写出高质量的代码,软件工程思想必不可少。

2 课程学习的收获

  这学期的高级软件课程分为线上和线下,线上课程循循善诱,线下课程围绕《Software Engineering at Google》展开,通过学习Google程序员的软件工程思想并学以致用,而非学习过时的传统教材,是一种大胆的创新。课后实验需要自学Go语言并实现线上功能,对线上课程的学习起到了很好的巩固作用。

  ”我们写的不仅仅是代码!我们实现一个C语言小项目,通过其演化来呈现无设计代码、模块化设计的代码、可复用的代码和回调函数等接口设计,以及可重入函数、线程安全等较深入的设计问题“。通过学习C编码实践篇,使我认识到代码层面的软件工程可以分为4个方面:代码风格、模块化、可重用性、线程安全

  1. 代码风格

    这一章详细讲了缩进、命名、注释等代码编排的风格规范,彻底摒弃了以往凭感觉写代码的方式,按照标准规格来写代码,不仅方便他人阅读,也有利于自己养成良好的代码书写习惯。

  2. 模块化

    模块化的学习让我认识到如果提高代码的效率,模块之间尽量做到高内聚、低耦合。模块化主要有以下几个规则:

    KISS(keep it simple & stupid):一个函数或一个方法,只做一件事。扩展开来,在设计上,一个系统、一个子系统、一个模块、一个类等也只做一件事。

    设计与实现保持一致:从设计到实现的过程中加入伪代码要好于直接将设计翻译成代码。

    不要和陌生人说话原则(Law of Demeter):一个对象应当对其他对象有尽可能少的了解。

    合理利用Control Structures、DataStructures来简化代码:采用合适的控制结构和数据结构能大大简化代码。

    一定要有错误处理:Debug版本中所有的参数都要验证是否正确;Release版本中从外部(用户或别的模块)传递进来的参数要验证正确性。

  3. 可重用性

    不要重复造轮子,注意可重用性可以避免一些无用功,复用已有的代码,在代码可重用性层次上面要非常注重模块化程序接口的设计,尽量多考虑到以后可能会用到的一些接口。

    常见接口设计规范有:参数化上下文,生死相依原则,移除前置条件,简化后置条件等,另外还需编写开发者指南,供用户阅读使用。这里要考虑一个接口通用的问题,并不是越通用越好,因为过于通用需要考虑很多情况,导致模块臃肿、效率低下,因此应该not too specific, not too general。

  4. 线程安全

    线程安全相当重要,错误的数据只会带来灾难。如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

    函数的可重入性与线程安全之间的关系:可重入的函数不一定是线程安全的,同时,可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的),但不可重入的函数一定不是线程安全的。

3 实验报告及目录

序号 实验主题 实验内容 报告链接
实验1 熟悉Linux实验环境 写一个hello world小程序 (了解Linux下的一些基本的操作,实验报告采用markdown进行书写) https://www.shiyanlou.com/courses/reports/1270860
实验2 代码风格规范 命令行菜单小程序V1.0 (代码风格规范) https://www.shiyanlou.com/courses/reports/1272145
实验3 基本的模块化设计 内部模块化的命令行菜单小程序V2.0 (KISS、不要和陌生人说话原则等) https://www.shiyanlou.com/courses/reports/1273305
实验4 可重用模块的接口设计 用可重用的链表模块来实现命令行菜单小程序V2.5 https://www.shiyanlou.com/courses/reports/1275052
实验5 可重用模块的接口设计(callback函数) 用callback增强链表模块来实现命令行菜单小程序V2.8 https://www.shiyanlou.com/courses/reports/1276114
实验6 函数的可重入性(reentrant)及线程安全浅析 线程相关知识学习,函数可重入性、线程安全及两者之间的关系,线程安全问题的处理 线上测试
实验7 子系统的可重用设计 将menu设计为可重用的子系 https://www.shiyanlou.com/courses/reports/1277992

4 总结体会

  软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件的一门科学,代码的设计不仅是为了使程序可运行,可实现需要的功能,在代码的规范、设计的规范、模块化思想、线程的安全性、子系统的可重用性上都有所要求。

  孟老师说:”写代码要小步快跑不断迭代,罗马不是一天建成的“,软件工程是一门实践性很强的学科,大量的实践才能有所感悟,写出高质量的代码,而通过软件工程这门课程的学习,可以使我们避免走很多前人走过的弯路。

  孟老师课程中提到:”夫事未有不生于微而成于著,圣人之虑远,故能谨其微而治之,众人之识近,故必待其著而后救之;治其微则用力寡而功多,救其著则竭力而不能及也“,这句话我感触很深,同样的,学习软件工程也需要我们站在一个更高的高度去看待代码,从细微处提高代码质量。

USTC高级软件工程课程学习心得相关推荐

  1. USTC高级软件工程课程学习总结和心得

    写在开始的一点感悟: 学习这门课之前,觉得这门课很高大上,很难理解.实际学习过后,反而觉得内容也不是特别难.它更像是学习一种规范的.高效的开发方式.把工程化的思想用到自己的编程创作之中,使开发更加高效 ...

  2. 采访前高级软件工程课程学员付浩同学,及Scrum总结阅读感想

    陈宇澄 我采访了第一届高级软件工程课程学员,现正在MSRA攻读MSRA-USTC联合培养博士生的07级师兄付浩同学.以下内容整理自采访笔录: 1.你们team当时做了什么项目?花了多少时间?你在tea ...

  3. 高级软件工程-课程总结

    高级软件工程课程内容总结 一.Git使用 Git常用命令 git init # 初始化一个本地版本库 git status # 查看当前工作区(workspace)的状态 git add [FILES ...

  4. 计算机网络课学习心得,计算机网络课程学习心得

    计算机网络课程学习心得 计算机网络课程学习心得 除笔试外,还采取机试综合大作业.小组课题设计等考试形式,客观地反映学生对所学知识的把握程度. 计算机络学习心得1:计算机络课程学习心得(4199字) 通 ...

  5. 大学计算机课的学后感,大学课程学习心得体会感想

    大学课程学习心得体会感想 通过每周一次的大学课程学习,我也接触到了更加丰富的英语学习资源,开阔了视野,掌握了利用个人展示这一强大的平台来锻炼我们的心得体会感想.下面是为大家收集整理的大学课程学习心得体 ...

  6. 计算机课程学习小结,计算机课程学习心得5篇___.docx

    计算机课程学习心得5篇___ 计算机技术的进展,促进了教学媒体的开发和利用,训练资源和资料能得到共享.在教学上应用计算机,能向同学供应更多的.更现代化的科学学问和技能训练,让同学对学习有更多的选择,使 ...

  7. 计算机网络讨论课感悟,计算机网络课程学习心得体会

    计算机网络课程学习心得体会 当我们积累了新的体会时,可以将其记录在心得体会中,这样能够给人努力向前的动力.那么好的心得体会是什么样的呢?下面是小编为大家收集的计算机网络课程学习心得体会,供大家参考借鉴 ...

  8. 学计算机这么课最大的收获是啥,计算机课程学习心得范文

    计算机网络系统是一个集计算机硬件设备.通信设施.软件系统及数据处理能力为一体的,能够实现资源共享的现代化综合服务系统,计算机网络系统的组成可分为三个部分,即硬件系统,软件系统及网络信息系统.下面是学习 ...

  9. 计算机网络与通信课程感想3000字,计算机网络与通信技术课程学习心得.doc

    计算机网络与通信技术课程学习心得 ?? 经过为其九周时间的学习,这门课终于得以顺利结课,在这里有很多的话想说,在学习这门课后感觉有更多的事情要去做,实质上远远没有结课,这只是一个开始.大学里我们现在所 ...

  10. linux课程总结范文,大学课程学习心得体会5篇.doc

    时间: TIME \@ "yyyy'年'M'月'd'日'" 2021年4月21日 学海无涯 页码:第 PAGE 1页共 NUMPAGES 1页 大学课程学习心得体会5篇 学习作为一 ...

最新文章

  1. Lesson3 Shader着色器
  2. 关于Linux下的umask
  3. IP、TCP、UDP数据包长度问题
  4. PCM复用设备的安装和使用注意事项
  5. 核心交换机相对于普通交换机的优势
  6. 小程序员的大梦想 与盖茨像哥们儿
  7. 64位linux安装mysql数据库吗_Linux下安装Mysql数据库
  8. vim使用系列之二——总结一下自己常用的VIM操作
  9. 完成一个Vue3项目的过程
  10. c语言qsort函数对结构体的一级排序,sort和qsort函数对结构体的二级排序
  11. Windows下Xampp搭建DVWA 常见的错误修改
  12. html的取消和选中,checkbox 选中和取消切换问题
  13. 计算机与测控技术专业就业方向,测控技术与仪器专业就业前景与方向(五篇)
  14. 设计图片转换html5,在HTML5中翻转图片
  15. WebRTC 拥塞控制 | Trendline 滤波器
  16. 【web自动化测试】
  17. 修复恢复可疑的SQLServer数据库
  18. 数据库中decimal
  19. 【TUXEDO】Linux下Tuxedo安装教程
  20. 李宏毅《机器学习》模型压缩-知识蒸馏

热门文章

  1. headfirst python完整高清思维导图
  2. springboot简单集成quartz定时任务框架,实现用户封号定时解封问题
  3. python抽签程序_【一点资讯】python打造一个抽奖程序 www.yidianzixun.com
  4. 五分钟学会安装电脑操作系统
  5. B站晚会大火的 140 万个理由!
  6. MSN在线代码|QQ在线客服代码|SKYPE 贸易通在线代码
  7. 【Qt编程】基于Qt的词典开发系列十--国际音标的显示
  8. BIOS报警声_文伟_新浪博客
  9. PDF文件阅读器可转word...
  10. Git for Windows 国内下载站,发布