因为大学读的是软件工程专业,本科的时候就接触了软件工程这门课,而且复试的时候老师问的问题绝大部分都是关于软件工程的。当时学软件工程,只觉得这门课就是纯背的课,感觉没什么用,也不写代码,也不提高我的编程水平,然后复试就被毒打了一顿。因此上学期就想选这门课了,结果运气不好被选课系统踢了。这学期终于如愿以偿选到了。孟老师上课幽默风趣,比较亲和,就像是一个朋友在和你说故事。用生动的例子由浅入深的给我们讲解软件工程学科中的各种概念、遇到的问题及解决方案。课程贴近实战,有编写代码的实验,不再只是纸上的那一个个概念。
课程主要有以下几部分内容:
- 工欲善其事必先利其器:这部分的内容非常实用,涉及到Typing,VS Code,Git,Vim,正则表达式。
- 代码中的软件工程:在这一部分,需要上手写代码了。用Go或者Rust语言来实现。编写menu代码,了解了怎么编写出高质量的代码,模块化的代码怎么编写,软件设计中的一些基本方法和概念。
- 从需求分析到软件设计:这部分从需求分析开始,介绍相关概念,怎么去分析,用什么工具。以面向对象的分析和设计为例,提供了一种从需求分析到软件设计的基本建模方法。在平时代码编写的实践中,我们很少涉及到这方面的内容,这是我们比较欠缺的。
- 软件科学基础概论:这部分涉及到一些基础概念,比如软件的基本构成,基本结构以及软件质量的定义等。还有设计模式的相关知识,详细的介绍了常用的设计模式。很多设计模式及原则之前只是听过,现在有了进一步的了解。
- 软件危机和软件过程:这部分主要讲述了软件危机,软件过程,以及团队的重要性等。介绍了一些经典的软件开发过程模型。
这里我想谈一谈敏捷方法。之前在网上冲浪的时候,碰到了一个问题:为什么谷歌之类大厂程序员认为敏捷开发是瞎扯淡?
互联网使得知识的获取变得更加容易,很多软件可以由一个小团队来实现。同时,技术更新的速度在加快,用户需求的变化也在加快,开发流程必须跟上这些快速变化的节奏。于是敏捷方法就产生了。
敏捷方法的宣言是:
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
从敏捷方法的宣言和目标就可以看出来,它适用于组比较小,业务相对比较简单,敏捷开发可以很好的执行。但是当代码的复杂程度高的时候,可能会出现无视任务复杂度,强行压缩时间,很难在一个较短周期内做出可以量化的进度。而且随意修改定好的计划,可能会牵扯甚多。
敏捷方法原来设想的主场景便是为客户开发定制软件,只不过在某些领域,工作方式不同,不太适用,但是不能说明它没有用。这就好像大家时常调侃的程序员圣战:XX是最好的语言。在不同的领域,不同的语言有自己的优势和劣势,比如C/C++在嵌入式领域备受追捧,而Java/Go在互联网领域大放异彩。每一种方法都有自己的特定应用场景。
信息化时代,软件开发已经覆盖很广了。不同的行业情况千差万别,想要用一套理论去指导所有开发领域是不现实的。因此才会有那么多软件工程专家提出那么多的方法。因此,在做项目之前,要先考虑好,再下手。别想着会有银弹。
参考资料:
《代码中的软件工程》 软件工程: 《代码中的软件工程》一书的配套ppt和源代码