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