软件开发的一个比喻
有时,我需要向非软件开发人员解释软件开发。多年来,我构思了一个比喻,用来解释软件开发是什么以及它的流程。我曾经成功地用它向一个9岁的孩子解释了软件开发,甚至包括网络安全等高级概念。我想其他人或许也能从中受益,所以在此分享:
想象你生活在一个没有计算机的世界。你是一家定制汽车工厂的老板,人们可以在纸上写下他们想要的世界上任何一款汽车,你的工厂就会为他们制造出来。然而,这些汽车不是由人类制造的,而是由能够阅读并遵循指令(但不会自己思考)的特殊机器人制造的。
机器人知道如何制造汽车的方法,是因为有一本特殊的指令手册,描述了如何制造每个部件,以及如何将这些部件组装成任何人可能想要的任何汽车。这本书非常庞大——足足有10万页,精确描述了机器人需要执行的每一个步骤,并考虑到机器人在制造汽车时可能遇到的任何情况。(例如,如果机器人在制造一个部件时,其中一个机器人坏了怎么办?如果工厂耗尽了正在制造的部件所需的材料怎么办?如果客户要求组装两个以前从未有客户要求过的部件,而手册中没有如何组装的指令怎么办?——诸如此类,你能想象到的每一种可能情况。这就是为什么这本书如此之长。)
显然,一个人不可能独立编写出一本10万页的指令手册。所以这本书是由1000个人共同合作编写的,他们都在编写同一本书。有些人编写如何制造汽车发动机的指令,另一些人编写如何制造车门的指令,以此类推,涵盖汽车的每一个部件和每一种组合方式。手册中的所有指令都必须彼此“兼容”——例如,如果我制造了一扇门,它必须能够连接到车身上。如果我制造了轮胎,它们必须适合轮毂。因此,这本书的所有作者必须不断地协作,以确保手册中的所有指令都能正确地协同工作。
当新型汽车部件出现时,就必须编写新的指令。当这本书的作者发现机器人可能遇到的新情况时(“哦,我们没意识到下雨时有些部件会生锈!”),他们必须更新手册中的指令。换句话说,这本书不仅需要一次性编写完成,实际上它还在不断变化。事实上,为了让手册保持最新状态所需要的工作量,几乎总是超过编写新指令的工作量。
如果这听起来像是一个无法解决的难题,别担心。没有一个人能够完全理解整本手册。所以如果你对这个问题感到不知所措,那是正常的!世界上每个人对这个问题都有同样的感觉。这是10万页不断变化的指令。那么我们如何做到呢?我们为手册的编写方式制定规则。例如,我们说“车门始终以相同的方式连接到车身”。就像车门总是使用相同类型的挂钩连接到车身,而车身总是有相同的位置来容纳这些挂钩。这样一来,无论你制造什么门或什么车身,它们总是能组合在一起。现在我们就不必再考虑那个问题了。我们制定许多这样的规则,这样每个编写手册的人都可以安全地负责自己的部分,而不用担心因为更改了关于车轮或发动机的一条指令就破坏了整个汽车。只要每位作者都遵守规则,他们可以更改手册中的任何内容,而整个汽车将继续正常工作。这限制了我们可能制造的汽车类型,但它使得解决这个问题成为可能,否则将是不可能的。
这些作者,即编写和维护这本书的人,就是软件开发人员。他们遇到的问题与软件开发人员和开发团队遇到的问题几乎完全相同。例如,你如何知道你写的指令确实有效?当有新人开始参与编写手册时,他们如何学习这些规则?当规则太多,作者记不住所有规则时会发生什么?作者如何了解客户想要制造的新车和新部件?你可以用这个比喻,向任何人解释软件开发几乎所有流程、问题和原则。
我希望这有所帮助!
-Max