《代码中的软件工程》----- 课程总结

一、工欲善其事必先利其器

1.编程神器 Visual Studio Code

VScode的主要功能区如下:

基本操作快捷键:https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

 思考:1.为什么VScode在保持简洁的同时,又有很多功能?(插件)

2.为什么插件这么多的情况下,VScode的反应、运行效率没有很低?(进程隔离的插件模型)

2.Git

场景一:Git 本地版本库的基本用法

场景二:Git 远程版本库的基本用法

场景三:团队项目中的分叉合并

场景四:Git Rebase

场景五:Fork + Pull request

3.Vim

第一关:安装Vim

        关注Vim的三种模式:命令模式、输入模式、底线命令模式。

第二关:三种模式之间的切换

第三关:移动光标的基本方法

• h 或 向左箭头键(←) 光标向左移动一个字符
• j 或 向下箭头键(↓) 光标向下移动一个字符
• k 或 向上箭头键(↑) 光标向上移动一个字符
• l 或 向右箭头键(→) 光标向右移动一个字符

第四关:移动光标的更多方法

0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)

$ 或功能键[End] 移动到这一行的最后面字符处(常用)

G 移动到这个档案的最后一行(常用)

 gg 移动到这个档案的第一行,相当于 1G 啊!(常用)
 n<Enter>n 为数字。光标向下移动 n 行(常用)

第五关:删除

•  x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于
[backspace] 亦即是退格键) (常用)
• nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
• dd 删除游标所在的那一整行(常用)
• ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)

第六关:复制与粘贴

•yy 复制游标所在的那一行(常用)
• p, P p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行! 举例来说,我目前光标在第20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
• nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)

第七关:复原和重做

• u 复原前一个动作。(常用)
• [Ctrl]+r 重做上一个动作。(常用)
• 这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次

第八关:自动化执行宏命令

第九关:基本搜索

第十关:基本搜索替换

第十一关:切换到编辑模式

第十二关:命令行模式

第十三关:代码中批量添加注释

4.RegEx(正则表达式)

第一关:基本的字符串搜索方法

第二关:同时搜索多个字符串的方法

第三关:在匹配字符串时的大小写问题

第四关:通配符的基本用法

第五关:匹配具有多种可能性的字符集

第六关:贪婪匹配 vs. 懒惰匹配

第七关:一些特殊位置和特殊字符

第八关:使用捕获组复用模式

第九关:基本的字符串搜索替换方法

第十关:复用捕获组的方式进行替换

二、工程化编程实践

首先学习了在VSCode中配置C++运行环境。然后使用Go或Rust实现一个命令行的菜单小程序,最终目标是完成一个通用的命令行的菜单子系统便于在不同项目中重用。

在实验的代码书写过程中,要求代码风格:简明、易读、无二义性。

然后学习了编写高质量代码的基本方法:通过控制结构简化代码、通过数据结构简化代码、一定要有错误处理以及拒绝修修补补要不断重构代码等。

三、从需求分析到软件设计

       首先学习了什么是需求、怎么获取需求以及高质量的需求是什么样子的。然后学习了需求分析的两类基本方法:原型化方法(Prototyping)和建模的方法(Modeling)。学习了用例建模的基本步骤、准确提取用例的基本方法、用例图的基本画法等,还学了UML其他图的基本原理以及基本画法。更加规范了我们在软件开发过程中文档的书写。从需求分析到软件设计主要学习了敏捷统一过程、对象交互建模以及形成软件设计方案的基本方法。

四、软件科学基础概论

        首先学习了什么是软件即软件的基本构成元素、软件的基本结构、软件中的一些特殊机制以及软件的内在特性。从程序编译的层面学习了软件的基本结构中的各个结构的指令。

        然后学习了软件的设计模式,设计模式是一种被广泛认可的解决特定问题的方案,可以帮助软件工程师更好地组织和管理代码。学习了以下几种常见的设计模式:

  1. 工厂模式(Factory Pattern):用于创建对象,将对象的创建与使用分离开来,使得系统更加灵活。

  2. 单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个全局访问点,避免了重复创建对象和管理对象的问题。

  3. 建造者模式(Builder Pattern):将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

  4. 原型模式(Prototype Pattern):用于创建重复的对象,通过复制现有的对象来创建新的对象,避免了重复创建对象的开销。

  5. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一种接口,使得原本不兼容的接口可以协同工作。

  6. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离开来,使它们可以独立地变化,从而提高系统的灵活性。

  7. 装饰器模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,同时又不改变其结构,从而提高系统的灵活性。

  8. 外观模式(Facade Pattern):提供一个统一的接口,用来访问子系统中的一群接口,从而简化了客户端的操作。

  9. 享元模式(Flyweight Pattern):运用共享技术来有效地支持大量细粒度对象的复用,从而提高系统的性能。

  10. 组合模式(Composite Pattern):将对象组合成树形结构,以表示部分和整体之间的关系,从而使得客户端可以统一处理单个对象和组合对象。

每种设计模式都有其独特的应用场景和优缺点,软件工程师在实际开发中可以根据实际情况选择合适的设计模式来提高软件的质量和可维护性。

还学习了常见的软件架构(三层架构、MVC架构、MVVM架构)等在实际项目中比较重要的东西。

五、软件危机和软件过程

1.软件危机

高级语言开始出现、操作系统迅猛发展、大量数据处理导致数据库管理系统的诞生等,导致软件开发的基础环境发生了重大变化,从与计算机硬件基础环境直接打交道,变为在一个更高抽象层级之上编写软件。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件开发效率,软件危机开始爆发 。

2.软件过程模型

一般来讲,我们将软件的生命周期划分为:分析、设计、实现、交付和维护这么五个阶段。

常见的有:瀑布模型、带原型的瀑布模型、V模型、分阶段增量和迭代以及螺旋模型。

3.团队概述

大多数商业软件都是由团队开发的,因此,要想成为一个优秀的软件工程师,你就必须具有在团队中工作的能力。如果你有与人合作的意识并且愿意付诸实践,你就具备了成为一个优秀的团队成员的基本素质。但是,团队协作的涵义远比融洽相处要丰富。团队必须计划项目、跟踪进展、协调工作,还必须有一致的工作目标,共同的工作过程,并且经常自由沟通。

4.敏捷方法

Scrum是一种迭代的增量软件项目管理方法,是敏捷方法中最为常见的软件开发模型之一。

Scrum敏捷开发方法的基本流程:

• 第一步:找出完成产品需要做的事情 — Product Backlog。产品经历领导大家对于这个Backlog中
的条目进行分析、细化、理清相互关系,估计工作量等工作。每一项工作的时间估计单位为“天”。
• 第二步:决定当前的冲刺(Sprint)需要解决的事情 — Sprint Backlog。 整个产品的实现被划分为几个互相联系的冲刺(Sprint)。产品订单上的任务被进一步细化了,被分解为以小时为单位(参见 WBS 工作划分的办法)。如果一个任务的估计时间太长(如超过 16 个小时),那么它就应该被进一步分解。订单上的任务是团队成员根据自己的情况来认领。团队成员能主导任务的估计和分配,他们的主观能动性得到较大的发挥。
• 第三步:冲刺(Sprint)。团队按照backlog任务执行。在冲刺阶段,外部人士不能直接打扰团队
成员。一切交流只能通过项目经理(Scrum Master)来完成。
• 第四步:得到软件的一个增量版本,冲刺评审会议,发布给用户。然后在此基础上又进一步计划
增量的新功能和改进。

5.总结

随着互联网、移动互联网以及虚拟化、云计算等技术的发展,软件要依赖的环境发生显著变化,当然这些变化本身也是软件塑造的结果。软件从复杂单体软件的以架构为中心向微服务架构的分布式软件转变,软件过程从CMM/CMMI向敏捷方法和DevOps转变。
重构作为编程的一种基本方法得到业界的普遍认同和采纳;微服务结构则有利于在更高的设计抽象层级上对软件进行重构;敏捷方法则进一步有利于在软件开发过程层面进行迭代和重构;DevOps则终极性地在业务、运维和效益层面进行快速迭代重构。

六、课程总结

《代码中的软件工程》是一本非常实用的软件工程书籍,通过对软件开发过程中常见的问题和解决方案进行深入浅出的讲解,为软件工程师提供了很多实用的知识和经验。在学习这本书的过程中,我得到了很多启示和收获:

  1. 代码的可读性非常重要。代码不仅要能够正确地运行,还要易于理解和维护。在编写代码时,要注意代码的命名、注释、缩进等方面,使其易于阅读和理解。

  2. 代码的可测试性也非常重要。软件开发是一个持续迭代的过程,只有能够快速、准确地测试代码,才能保证软件质量和开发效率。在编写代码时,要注意代码的结构和逻辑,使其易于进行单元测试和集成测试。

  3. 设计模式是提高代码质量和可维护性的重要手段。设计模式是一种被广泛认可的解决特定问题的方案,可以帮助软件工程师更好地组织和管理代码。在实际开发中,要积极应用各种设计模式,提高代码的可复用性和可维护性。

  4. 持续集成和持续部署是软件开发中不可或缺的环节。持续集成是指频繁地将代码集成到主干分支中,并进行自动化测试和构建,以确保代码的质量和稳定性。持续部署是指自动化部署代码到生产环境中,以提高开发效率和响应速度。在实际开发中,要积极应用持续集成和持续部署技术,提高开发效率和软件质量。

  5. 团队合作和沟通非常重要。软件开发是一个团队合作的过程,只有团队成员之间的沟通和协作良好,才能保证项目的顺利进行和成功实现。在实际开发中,要积极与团队成员沟通,及时解决问题,确保项目进度和质量。

总之,《代码中的软件工程》一书涵盖了软件开发过程中的各个方面,从代码编写到测试、部署和团队协作,都给出了实用的建议和经验。作为一名软件工程师,我认为这本书是必读的,它可以帮助我们更好地理解软件开发的本质和要点,提高开发效率和软件质量,为我们的职业发展提供有力的支持。

参考资料:《代码中的软件工程》代码中的软件工程: 《代码中的软件工程》一书的配套ppt和源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值