一、背景
今天刚考完高级软件工程这门课,故在此写篇文章以对该课程的内容做一个总结。
二、实用工具方面
首先,我觉得孟宁老师的这门课和传统的软件工程课程的最大区别在于前者十分注重课程实践,并且课程中介绍了很多软件开发人员所必须掌握的工具和技能,比如git、vim、vscode、正则表达式,这也正是我当初选择选这门课的最主要的原因。
2.1 GIt
课程通过五大实际使用场景来介绍了git的基本使用,而不是像很多教程一下仅仅是简单的命令堆砌,在我看来,这种方式更加容易让人理解。
以下是我认为比较常用的Git命令:
git init
git clone
git status
git add
git commit
git push
git pull
git log
git reflog
git reset
git merge
当然,除此之外,还有其他我们在日常学习工作中会用到的git命令,例如git stash等,不过先掌握上述命令就够了,其他的可以等需要用到的时候再进行学习。
2.2 Vim
Vim是一个高度可配置的文本编辑器,被设计用于终端界面。它是开发人员和系统管理员中广受欢迎的文本编辑器,因为它高效灵活。Vim提供了广泛的文本编辑功能,包括语法高亮、搜索和替换、宏和插件等。不过还有一个陡峭的学习曲线,但一旦掌握,可以大大提高编辑文本的生产力和效率。
这里就不对Vim的一些基本操作进行概述了,毕竟自己这方面掌握的也不是很好,有需要的小伙伴还是自行百度吧。
自己目前对Vim的掌握还处于比较初级的阶段,希望在今后的使用中可以更加熟练。
2.3 VSCode
VSCode,全称为Visual Studio Code,是一个由微软开发的免费开源的跨平台代码编辑器。它支持多种编程语言和框架,包括JavaScript、TypeScript、Python、Java、C++等,同时支持调试、Git版本控制、智能代码补全、语法高亮、代码片段等功能。VSCode还支持丰富的插件生态系统,用户可以根据自己的需求安装各种插件来扩展编辑器的功能。VSCode的界面简洁、易于使用,同时具有高度的可定制性,可以根据用户的喜好进行个性化设置。
VSCode支持Windows、macOS和Linux等多个操作系统,是一个非常受欢迎的代码编辑器。
下面是VSCode常用的一些快捷键:
打开文件夹( Ctrl/⌘+O)
关闭文件夹工作区( Ctrl/⌘+K F)
新建文件(Ctrl/⌘+N)
关闭文件(Ctrl/⌘+W)
编辑文件和保存文件(Ctrl/⌘+S)
文件内搜索(Ctrl/⌘+F)
关闭所有文件(Ctrl/⌘+K W)
关闭已保存的文件(Ctrl/⌘+K U)
Ctrl+/用于单行代码注释和取消注释,Alt+Shift+A用于代码块注释和取消注释。
Ctrl/⌘+Shift+E 文件资源管理器
Ctrl+Shift+G 源代码管理
Ctrl/⌘+Shift+F 跨文件搜索
Ctrl/⌘+Shift+D 启动和调试
Ctrl/⌘+Shift+P查找并运行所有命令
Ctrl/⌘+Shift+M查看错误和警告
Ctrl/⌘+Shift+X 管理扩展插件
Ctrl+`切换集成终端
如果能熟练掌握以上快捷键还是挺不错的,可以“解放鼠标”了。
当然,除此之外,课程中还介绍了VSCode底层的一些东西,了解了解也是不错的。
2.4 正则表达式
正则表达式是一种用于匹配字符串的表达式,它可以用来检索、替换、验证字符串。正则表达式由一些特殊字符和普通字符组成,这些字符描述了要匹配的文本模式。常见的正则表达式元字符包括:
.:匹配任意单个字符。
*:匹配前面的字符零次或多次。
+:匹配前面的字符一次或多次。
?:匹配前面的字符零次或一次。
^:匹配字符串的开头。
$:匹配字符串的结尾。
[]:匹配括号内的任意一个字符。
():标记一个子表达式的开始和结束位置。
|:匹配两个或多个表达式中的任意一个。
例如,正则表达式/a.*b/可以匹配以字母"a"开始,以字母"b"结束,并且中间有零个或多个任意字符的字符串。正则表达式在编程语言中得到广泛的应用,如在JavaScript、Python、Java等语言中,都提供了正则表达式的支持。
自己之前对于正则表达式的学习很不系统,只是知道最基本的几个规则。通过本次课程,也算是系统性地学习了下这项十分重要的技能。
三、理论知识方面
当然,除此之外,该课程也介绍了很多理论知识,下面知识我认为比较重要的几个方面。
3.1从需求分析到软件设计
从需求分析到软件设计是软件开发过程中的一个重要环节,它包括以下几个步骤:
- 需求分析:在这一阶段,开发团队与客户进行沟通,了解客户的需求和期望,收集并分析需求,确定软件的功能和性能要求。需求分析阶段的输出是需求规格说明书。
- 概要设计:在这一阶段,开发团队根据需求规格说明书,设计软件的整体架构和模块划分,确定软件的主要组成部分和它们之间的关系。概要设计阶段的输出是概要设计文档。
- 详细设计:在这一阶段,开发团队对每个模块进行详细设计,包括模块的数据结构、算法、接口、输入输出等。详细设计阶段的输出是详细设计文档。
- 编码和测试:在这一阶段,开发团队根据详细设计文档编写代码,并进行单元测试、集成测试和系统测试,确保软件的质量和可靠性。
- 部署和维护:在这一阶段,开发团队将软件部署到目标环境中,并进行运行和维护,包括故障排除、性能优化、安全管理等。
在软件开发过程中,需求分析和软件设计是非常重要的环节,它们直接影响软件的质量、可靠性和用户体验。因此,开发团队应该重视需求分析和软件设计,采用合适的方法和工具,确保软件开发过程的顺利进行。
3.2 设计模式
设计模式是一种解决特定问题的经验性的、可重用的方案。它们是在软件开发中经过多年实践和总结得出的一些最佳实践,可以提高软件的可维护性、可扩展性和可重用性。常见的设计模式包括:
- 创建型模式:用于创建对象的模式,包括单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式等。
- 结构型模式:用于描述如何将类或对象组合成更大的结构,包括适配器模式、桥接模式、装饰器模式、外观模式、享元模式和代理模式等。
- 行为型模式:用于描述对象之间的通信方式和协作方式,包括观察者模式、模板方法模式、命令模式、职责链模式、迭代器模式、中介者模式、备忘录模式、状态模式、策略模式和访问者模式等。
设计模式不是一种具体的技术,而是一种思想,它提供了一种通用的解决方案,可以帮助开发人员更好地组织和管理代码,提高软件的质量和可维护性。在使用设计模式时,需要根据具体的需求和场景选择合适的模式,并结合实际情况进行适当的调整和优化。
3.3 软件危机和软件过程
大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,因此软件开发需求和软件的规模都急剧增长。高级语言开始出现、操作系统迅猛发展、大量数据处理导致数据库管理系统的诞生等,导致软件开发的基础环境发生了重大变化,从与计算机硬件基础环境直接打交道,变为在一个更高抽象层级之上编写软件。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件开发效率,软件危机开始爆发。
由此开始,人们一直寻找解决软件危机的方法,诞生了包括结构化程序设计、专家系统、面向对象的分析和设计方法等,当人们意识到大型软件中打造抽象软件的复杂概念结构的根本困难是缺乏有效的管理,而非技术本身时,于是针对软件开发活动及软件本身的管理,对软件生命周期建模, 形成了众多有效管理软件开发过程的理论和方法,经过研究和实践逐渐演 化成如今的CMM/CMMI、敏捷方法、DevOps等软件过程模型。
非常感谢孟宁老师所带来的《高级软件工程》这门课,让我受益匪浅,让我知道软件工程这门课不仅仅只有那些无聊的理论知识,还有很多在实践上的运用。同时,在期末备考期间,孟宁老师也会一一解答同学们的疑惑,并在课程微信群里和同学们互动,并引发同学们的思考,这在我看来是非常不错的教学模式,最后,再次感谢孟宁老师对我在软件工程这门专业课上的帮助。
参考书籍:《代码中的软件工程》
课程主页:https://gitee.com/mengning997/se
学号:494