软件工程中需要学习和掌握的软件都有哪些_软件工程教育“守破离”

24e64c0f1f1f046f9abb9eafb6b28609.png

软件工程教育“守破离”

南京大学 邵栋 2020.03.26

软件工程是建立在计算机科学基础之上的一个工程性学科。它不是单纯的编程问题求解,在时间维度、规模维度、多因素权衡博弈维度上对工作人员提出了更高的要求。

作为一个工程学科,软件工程教育与科学教育有很大不同。

“守破离”是日本剑道中合气道训练弟子,进行技艺培养的方式。“守”指的是按照某位师傅教授的内容,不做任何修改的进行实践、训练,并不要求理解背后的原理。“破”的阶段,弟子除了学习自己师傅(流派)教授的内容,还需要了解其它流派的技艺,并思考、理解这些技艺背后的背景和原理。“离”是高级阶段,弟子这时候已经可以出师了。弟子从这门技艺的原始思想和背景出发,独创性的发展新的认识和技艺,并且基于实际情况进行测试。

软件工程的教育建立在计算机科学学习基础之上,在掌握了计算机科学原理知识之后,也有一个“守破离”的学习过程。

“守”的阶段学习并严格遵循软件工程规范,这里包含相应的实践和工具的使用。例如:

  • 写程序时,遵循编码规范(比如开发汽车等高安全性领域C语言软件,遵循国际编程规范MISRA C:2004.)。
  • 使用版本配置工具(Git)管理自己的代码,并且按照规定至少每天提交一次代码。
  • 遵循TDD测试驱动开发实践,编写任何重要代码前,先编写相应自动化测试脚本。
  • 采用Jenkins进行持续集成。
  • 团队每天召开站立会议(Standup Meeting),并且按照规定每人轮流回答三个问题:“我昨天做了什么”,“我今天打算做什么”,“我有没有遇到障碍”。

这里的实践和工具,即包含技术方面和包含管理方面。守的阶段,并不要求学生对这些实践背后的原理有深刻的认识,仅要求学生能够按照老师的要求严格执行。守的阶段是破的阶段的基础,如果连守的技能都不能掌握,高谈阔论破和离是没有意义的。

而仅有守,在软件工程中是不够的。大家经常用“货物崇拜”的例子在软件工程中解释为什么仅有规范,但不懂其背后的原理,是不够的。

“货物崇拜”(Cargo Cults):第二次世界大战太平洋战争时,美军于塔纳岛建立了一个临时基地,修建了机场,当时岛上的原住民看见有一些“大铁鸟”(军用飞机)为美军运送物资,美军也会分配一些物资给当地人。二次世界大战结束后,美军离开塔纳岛。后来,原住民制造了跑道以及机场相关设施,还安排一个人坐在一个木制小屋里,头上带着两个木制件,像耳机和天线一样,假装是机场塔台工作人员。他们按照原来观察到的美军做法做了所有事情,看起来完全像以前一样,但没有飞机降落。

“破”的阶段,需要理解软件工程规范背后的原理。例如:

  • 演进式软件设计为什么要和自动化测试、持续集成、重构联合使用?
  • 为什么DevOps团队做微服务时最好使用容器技术?
  • 版本配置工具中的分支什么情况下使用最佳?
  • 学习敏捷软件开发方法论,除了学习Scrum、eXtreme Programming、Kanban和精益软件开发基本实践之外,还需要思考它们和传统瀑布模型的区别?敏捷软件开发为什么适合快速变更的软件开发?

只有理解了这些背后的原理,才能够正确的进行软件开发,而不是“货物崇拜”:

  • 不是看到一家软件公司加班996,就认为我们也学996,就会成功;
  • 不是看到一家公司通过CMMI5级,就也要求开发团队通过,认为开发的可预测性会大幅度提升;
  • 不是看到Google每隔几年重新编写一次软件,就也每隔几年抛弃自己的软件重新开发。

“离”的阶段,是一个独创性的阶段。这时,结合对软件行业的深刻认知以及分析,可以提出一些新的软件工程认知。当然,这些认知必须放在实际环境进行检验,比如:

  • 软件工程不是工程,而是“博弈”?
  • 敏捷软件开发宣言

对于一个软件开发组织,定制一整套符合自己的软件工程规范同样是“离”的一种体现。这时候,你了解了全世界关于软件工程已有的知识,并深刻认知了背后的原理,结合自己组织的人员技能、业务场景,设计一整套符合自己的软件工程规范,这也是一种创造性的工作。

“守破离”这样一个顺序,适合大部分软件工程知识传授的内容,教学时尽可能不做变动。理解软件工程“守破离”的学习过程,我们可以更好明确学习的内容和顺序,遵循教学规律,合理安排教学内容。

敏捷软件开发的教学:
可以先进行实践和工具的教学;再介绍敏捷宣言、价值观等抽象理论;最后给出一些企业的具体实践方案,并说明其定制的原因。如果先进行概论教学,会导致学生在学习概论时没有任何背景,难以理解。

在组织中导入软件工程体系或引入新的软件工程实践(比如DevOps或敏捷软件开发)时,同样可以参考“守破离”的过程,先严格的导入规范和实践;在大部分人可以熟练掌握适应后,再理解相关背景和原理,针对本组织情况进行适当调整;最后根据自己的具体情况,裁剪和定制最适合自己的软件工程体系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值