软件工程与土木工程的不同
观看本视频后,你将能够认识到软件工程与土木工程的不同,描述软件工程是如何不断变化的,并阐述项目管理模式为何不太适用于软件开发。一种常见且不利于 DevOps 工作的做法是,把软件工程工作当作土木工程来做。
对于一个土木工程的项目而言,你可能想要建造一座办公楼。你聘请一位建筑师来设计大楼并绘制蓝图。蓝图会交给施工团队,施工团队按照蓝图来建造大楼。一旦完成交接,建筑师就会着手下一个项目。他们可能会就蓝图的一些问题接受咨询,但在很大程度上,他们的工作已经完成,可以继续前进了。施工团队会花数月时间按照蓝图中的规格建造大楼。施工完成后,大楼会移交给维护团队,由维护团队接管大楼的维护工作。除非你在加利福尼亚州,否则大楼下面的地面不会有太大变动,从那以后一切都相当稳定。
问题在于,我们用同样的方式看待软件开发。软件开发工作通常被当作土木工程来运作。我们把它看作是一个完成后就可以继续推进的项目。架构师把设计方案扔给开发人员后,就去做下一个项目了。开发人员把代码扔给测试人员。项目完成后,整个项目又被扔给运维团队,作为 “日常业务” 的一部分来运行和维护。项目团队的所有人员都被重新分配到新的工作中,也许会留下一个骨干开发团队负责维护。
与这种土木工程的方式不同,软件工程是有机的。即使应用程序本身没有变化,其底层的软件栈也在不断变化。由于新发现的漏洞,操作系统需要打补丁,软件包需要更新。这些变化会影响应用程序,而运维团队只能自己去处理这些变化。新功能也在不断添加。一座办公楼建成后,通常不会再增加新的楼层。但软件并非如此。系统的行为一直在变化。然而,我们仍然把软件工程当作土木工程来对待。这种项目模式从根本上来说并不适合软件开发。当一个项目完成,人员都离开后,就没有人对软件负责了。这可不是开发出优秀软件的方法。
相反,你应该把软件开发当作产品开发来对待。产品的生命周期很长,并且会不断进行改进。如果开发软件的团队在完成开发后不是离开,而是继续构建和维护软件,他们就能对代码有更深入的理解,并对代码产生主人翁意识。他们会想出让代码变得更好的好点子。我们绝不能再把软件工程当作土木工程来做。在 DevOps 中,我们希望拥有稳定、长期的团队成员,实现端到端的全程负责。这才是开发出优秀软件的方法。
在本视频中,你了解到软件开发通常被视为一个完成后就交给运维团队进行维护的项目。软件工程以及系统的行为都在不断变化。团队负责制和稳定的团队使得软件开发更像是产品开发,而不是项目管理。