从定制汽车工厂理解软件开发:一个绝佳的类比

作者Max Kanat-Alexander用一个定制汽车工厂和巨型指令手册的生动比喻,向非技术人员解释了软件开发的本质、团队协作的复杂性、代码维护的持续挑战以及制定规则(架构与接口)的重要性。

一个用于软件开发的类比

有时候,我需要向非软件开发人员解释软件开发。多年来,我想出了一个比喻,来解释软件开发是什么样子及其过程。我曾成功地用它向一个9岁的孩子解释软件开发,包括网络安全等高级概念。我想其他人可能也会从中受益,所以分享如下:

想象你生活在一个没有计算机的世界。你是一家定制汽车工厂的老板,人们可以在纸上写下世界上任何他们想要的汽车,你的工厂会为他们制造。然而,这些汽车不是由人类制造的,而是由可以阅读并遵循指令(但不会自己思考)的特殊机器人制造的。

机器人知道如何制造汽车的方式是,有一本特殊的指令手册,描述了如何制造每个部件,以及如何将这些部件组装成任何人可能想要的任何汽车。这本书非常庞大——足足有10万页,详细说明了机器人需要执行的精确步骤,同时考虑到了机器人在制造汽车时可能遇到的任何情况。(例如,如果其中一个机器人在制造一个部件时坏了怎么办?如果工厂用完了他们正在制造的部件的材料怎么办?如果客户要求组装两个以前从未有客户要求过的部件,而手册中没有关于如何做的说明怎么办?等等——你能想象到的每一种可能的情况。这就是为什么这本书如此之长。)

显然,一个人不可能创建一本10万页手册中的所有指令。所以这本书是由1000个人共同撰写的,他们都在同一本书上协作。有些人写关于如何制造汽车发动机的指令。其他人写关于如何制造车门的指令。等等,针对汽车的每一个部件和每一种组合方式。手册中的所有指令都必须彼此“兼容”——例如,如果我制造了一个门,它必须能够连接到汽车的车身上。如果我制造了轮胎,它们必须适合轮毂。所以这本书的所有作者都在不断地协作,以确保书中的所有指令都能正确配合工作。

随着新型汽车零件的出现,必须编写新的指令。随着本书的作者发现机器人可能遇到的新情况(“哦,我们没意识到下雨时,有些零件会生锈!”),他们必须更新手册中的指令。换句话说,这本书不仅需要编写一次,实际上还在不断变化。事实上,为了使手册保持最新状态所需要的工作量,几乎总是超过编写新指令的工作量。

现在,如果这听起来像是一个不可能解决的问题,请不要担心。没有任何一个人能够理解整本书。所以如果你对这个问题感到不知所措,那是正常的!世界上每个人对这个问题的感觉都是如此。这是10万页不断变化的指令。那我们是怎么做到的呢?我们为这本书的编写方式制定了规则。例如,我们说“车门将始终以相同的方式连接到车身上。”就像,车门总是有相同类型的挂钩来连接到车身,而车身总是有相同的位置来容纳这些挂钩。这样,无论你制造什么样的门或什么样的车身,它们总是能组合在一起。现在我们不必再考虑这个问题了。我们制定了许多这样的规则,以便每个编写手册的人都可以安全地处理他们负责的部分,而不必担心他们仅仅因为更改了一条关于车轮或发动机的指令就会毁掉整辆汽车。只要每位作者都遵守规则,他们就可以更改书中的任何内容,而整辆汽车将继续正常工作。这限制了我们可能制造的汽车类型,但它使解决问题成为可能,否则将是不可能的。

这些作者,即编写和维护这本手册的人,就是软件开发人员。他们遇到的问题几乎与软件开发人员和开发团队遇到的问题完全相同。例如,你如何知道你写的指令确实有效?当有新成员开始在这本书上工作时,他们如何学习这些规则?当规则太多以至于作者记不住所有规则时会发生什么?作者如何了解客户想要制造的新车和新零件?使用这个比喻,你基本上可以向任何人解释软件开发的所有过程、问题和原则。

希望对你有帮助!

-Max

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计