学习总结:代码中的软件工程和高级软件工程

文章讲述了学习《高级软件工程》和《代码中的软件工程》后的体会,重点包括Git的版本控制技巧,如rebase和merge,vim编辑器的使用,正则表达式的匹配规则,以及软件工程中的模块化设计、KISS原则、需求分析方法和设计模式的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习《高级软件工程》课程内容和《代码中的软件工程》一书后,我对软件工程领域有了更深入的了解和体会。下面是我对学习内容的总结和心得体会。

学习内容回顾

工欲善其事,必先利其器

首先,工欲善其事,必先利其器。学习中强调了版本控制工具Git的使用,包括本地版本库和远程版本库的基本用法,团队项目中的分叉合并,Git Rebase以及Fork + Pull request等。

通过 rebase,可以将一个分支的修改应用到另一个分支上,实现两个分支的合并。相比于使用 Git merge命令, rebase 可以将多个commit历史合并为一个或者修改提交的顺序,避免了冗余的提交历史,使得项目的演进更加 清晰。

需要注意的是,由于 rebase 修改了提交历史,因此在共享分支的情况下,应谨慎使用 rebase。

git rebase -i [startpoint] [endpoint]

其次,学习了vim编辑器的使用。vim是一款强大的文本编辑器,在开发过程中起到了重要的作用。学习了vim的三种模式,包括命令模式、插入模式和底线命令模式,以及光标的移动、删除、复制粘贴、搜索替换等基本操作。

  • 命令模式(Command mode),用户刚刚启动vim,便进入了命令模式。此状态下敲击键盘动作会被vim 识别为命令,而非输入字符。
  • 输入模式(Insert mode),在命令模式下按下i就进入了输入模式,按ESC退出输入模式,切换到命令模 式。
  • 底线命令模式(Last line mode),在命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式 可以输入单个或多个字符的命令,可用的命令非常多。基本的命令有q(退出程序)、w(保存文件)等。按 ESC键可随时退出底线命令模式。

另外,正则表达式也是软件工程中常用的工具。学习了正则表达式的字符匹配、重复匹配、边界匹配、分组和捕获、贪婪匹配和懒惰匹配等基本概念和用法。正则表达式在文本处理和数据提取等方面非常有用,能够快速有效地完成各种匹配操作。

字符匹配

  • .:匹配除换行符外的任意字符。

  • \w:匹配任何字母、数字和下划线。等效于[a-zA-Z0-9_]

  • \d:匹配任何数字。等效于[0-9]

  • \s:匹配任何空白字符,包括空格、制表符、换行符等。

  • [...]:字符类,匹配方括号内的任意字符。例如,[aeiou]匹配任何一个元音字母。

重复匹配

  • *:匹配前面的元素零次或多次。例如,ab*匹配"a"、"ab"、"abb"等。

  • +:匹配前面的元素一次或多次。例如,ab+匹配"ab"、"abb"等,但不匹配"a"。

  • ?:匹配前面的元素零次或一次。例如,ab?匹配"a"和"ab",但不匹配"abb"。

  • {n}:精确匹配前面的元素出现n次。例如,a{3}匹配"aaa"。

  • {n,}:匹配前面的元素至少出现n次。例如,a{2,}匹配"aa"、"aaa"等。

  • {n,m}:匹配前面的元素至少出现n次,最多出现m次。例如,a{2,4}匹配"aa"、"aaa"和"aaaa"。

边界匹配

  • ^:匹配字符串的开头。例如,^abc匹配以"abc"开头的字符串。

  • $:匹配字符串的结尾。例如,xyz$匹配以"xyz"结尾的字符串。

  • \b:匹配单词的边界。例如,\btest\b匹配单词"test",但不匹配"atesting"。

分组和捕获

  • (...):分组匹配,可以用于组合多个元素。例如,(ab)+匹配"ab"、"abab"等。

  • (?:...):非捕获分组,类似于普通分组,但不会生成捕获结果。

掌握了这些技巧可以提高编辑效率,并且在命令行环境下进行配置,进一步提升了开发效率。

代码中的软件工程

在软件设计方面,学习了模块化软件设计的重要性,以及一些基本的软件设计方法。强调了代码风格的原则,包括简明、易读、无二义性等,以及编写高质量代码的基本方法。讲解了KISS原则、可重用软件设计、接口设计、微服务、RESTful API等概念和技术,这些都是提高软件质量和可维护性的重要手段。

KISS(Keep It Simple & Stupid)原则

  • 一行代码只做一件事
  • 一个块代码只做一件事
  • 一个函数只做一件事
  • 一个软件模块只做一件事

从需求分析到软件设计

在需求分析和软件设计过程中,学习了需求的类型、高质量需求的特点,以及需求分析和用例建模的基本方法。了解了用例的概念、用例的信息流特征、用例建模的步骤和技巧,以及面向对象分析的基本概念和建模方法。这些内容对于从需求分析到软件设计的过程起到了指导作用,帮助开发人员更好地理解和满足用户需求。

需求分析的两类基本方法

  • 原型化方法:可以很好地整理出用户接口方式(UI,User Interface),比如界面布局和交互操作 过程。 建模的方法 (Modeling)
  • 建模的方法:可以快速给出有关事件发生顺序或活动同步约束的问题,能够在逻辑上形成模型来 整顿繁杂的需求细节。

敏捷统一过程的四个关键步骤

  • 第一,确定需求;
  • 第二,通过用例的方式来满足这些需求
  • 第三,分配这些用例到各增量阶段;
  • 第四,具体完成各增量阶段所计划的任务。

软件科学基础概论

此外,学习了软件科学中的一些特殊机制,如回调函数和多态。对抽象思维和逻辑思维进行了比较,并认识到软件的复杂性是其本质属性。介绍了常用的设计模式及其背后的设计原则,设计模式能够提供解决常见问题的经验模型,提高代码的可重用性和灵活性。

一小部分常用的设计模式

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。这对于需要在整个应用程序中共享相同资源的情况非常有用。

  • 工厂模式(Factory Pattern):用于创建对象的模式。它提供一个公共接口来创建不同类型的对象,而无需直接实例化具体类。

  • 观察者模式(Observer Pattern):定义对象之间的一对多依赖关系,当一个对象状态发生变化时,它的所有依赖对象都会收到通知并自动更新。

  • 职责链模式(Chain of Responsibility Pattern):用于将请求的发送者和接收者解耦,并允许多个对象都有机会处理请求。它将这些对象连接成一个链,并沿着链传递请求,直到有一个对象能够处理它为止。

软件危机和软件过程

最后,学习了软件危机和软件过程模型。了解了软件危机的争论和软件过程模型的不同类型,包括瀑布模型、原型化的瀑布模型、V模型、螺旋模型等。探讨了个人软件过程PSP、团队软件过程TSP以及CMM/CMMI等软件过程改进方法和标准。

CMMI共有5个级别,代表软件团队能力成熟度的5个等级,数字越大,成熟度越高,高成熟度等级表示有比较强的软件综合开发能力。

  • 一级,初始级,软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。

  • 二级,管理级,软件组织在项目实施上能够遵守既定的计划与流程,这级能保证项目的成功率。

  • 三级,已定义级,软件组织能够根据自身的特殊情况及自己的标准流程,将这套管理体系与流程予以制度化。

  • 四级,量化管理级,软件组织的项目管理实现了数字化,降低了项目实施在质量上的波动。

  • 五级,持续优化级,软件组织能够充分利用信息资料,对软件组织在项目实施的过程中可能出现的问题予以预防。能够主动地改善流程,运用新技术,实现流程的优化。

此外,还学习了敏捷方法、Scrum敏捷开发方法和DevOps等新兴的软件开发方法和流程,这些方法和流程强调迭代、增量和团队协作,能够提高开发效率和产品质量。

我的收获和感想

  • 通过学习Git和版本控制的基本用法,我能够更好地管理代码的版本和协作开发,提高团队合作效率。

  • vi/vim编辑器的学习让我在命令行环境下更加高效地进行代码编辑和操作,提高了我的开发效率。

  • 正则表达式的掌握让我能够快速有效地进行文本处理和数据提取,提高了处理复杂文本的能力。

  • 代码中的软件工程的学习让我更加注重代码的质量和可维护性,掌握了编写高质量代码的基本方法和设计原则。

  • 从需求分析到软件设计的过程让我更好地理解和满足用户需求,掌握了用例建模和面向对象分析的基本方法。

  • 软件科学的学习让我认识到软件开发中的抽象和逻辑思维的重要性,以及设计模式在提高代码复用性和灵活性方面的作用。

  • 学习软件过程模型让我了解了不同的开发方法和流程,帮助我更好地组织和管理软件开发项目。

总之,通过学习《代码中的软件工程》一书和《高级软件工程》课程内容,我对软件工程领域有了更深入的了解。这些知识和技能对于我作为一名软件开发人员来说非常重要,能够帮助我编写高质量的代码,进行有效的团队协作,并且在需求分析和软件设计过程中更好地满足用户需求。孟宁老师不仅对软件工程领域有深入的了解,还涉猎广泛,引入哲学、历史故事等其他领域的知识。这样的引入不仅增加了课程的趣味性,也让我们从更宽广的视角思考软件工程问题,让学习变得更加愉快且非常有意义。感谢孟宁老师为我们带来的愉快而丰富的学习体验!

参考资料:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值