软件开发的类比
2025年3月7日 作者:Max Kanat-Alexander
有时候,我需要向非软件开发人员解释软件开发。多年来,我想出了一个类比,能够解释软件开发是什么以及它的流程。我曾经成功地用这个类比向一个9岁的孩子解释软件开发,甚至包括网络安全等高级概念。我觉得其他人可能也会从中受益,所以分享如下:
想象你生活在一个没有计算机的世界。你是一家定制汽车工厂的老板,人们可以在纸上写下他们想要的任何汽车,你的工厂就会为他们制造。然而,这些汽车不是由人类制造的,而是由能够阅读并遵循指令(但不会自己思考)的特殊机器人建造。
机器人知道如何制造汽车的方式是有一本特殊的指令书,描述了如何制造每个部件以及如何将这些部件组装成任何人可能想要的任何汽车。这本书非常庞大——有10万页精确的指令,详细说明了机器人需要执行的确切步骤,考虑了机器人在制造汽车时可能遇到的任何情况。(例如,如果其中一个机器人在制造部件时坏了怎么办?如果工厂用完了他们正在制造的部件的材料怎么办?如果客户要求组装两个以前从未有客户要求过的部件,而书中没有相关指令怎么办?等等——你能想象的每一种可能情况。这就是为什么这本书如此之长。)
显然,一个人不可能创建一本10万页的指令书。所以这本书是由1000人共同编写的,他们都在同一本书上合作。有些人编写如何制造汽车发动机的指令,有些人编写如何制造车门的指令,等等,涵盖汽车的每个部件和每种组合方式。书中的所有指令都必须相互"一致"——例如,如果我制造一扇门,它必须能够连接到汽车的车身。如果我制造轮胎,它们必须适合车轮。所以这本书的所有作者都在不断合作,确保书中的所有指令能够正确地协同工作。
随着新型汽车零件的出现,必须编写新的指令。当这本书的作者发现机器人可能遇到的新情况时(“哦,我们没有意识到下雨时有些零件会生锈!"),他们必须更新书中的指令。换句话说,这本书不仅需要一次性编写,实际上还在不断变化。事实上,保持书籍更新所需的工作几乎总是比编写新指令的工作更多。
如果这听起来像是一个不可能解决的问题,别担心。没有一个人能够理解整本书的内容。所以如果你对这个问题感到不知所措,那是正常的!世界上每个人对这个问题都有同样的感觉。这是10万页不断变化的指令。那么我们是如何做到的呢?我们制定了关于如何编写这本书的规则。例如,我们说"门总是以相同的方式连接到车身”。就像,门总是有相同类型的挂钩连接到车身,而车身总是有相同的位置来容纳这些挂钩。这样,无论你制造什么门或什么车身,它们总是能够配合在一起。现在我们不再需要考虑这个问题了。我们制定了许多这样的规则,这样每个编写书籍的人都可以安全地处理他们的部分,而不必担心他们仅仅通过更改关于车轮或发动机的一条指令就会破坏整个汽车。只要每个作者遵循规则,他们可以更改书中的任何内容,整个汽车将继续工作。这限制了我们可能制造的汽车类型,但它使得解决问题成为可能,否则这是不可能的。
这些作者,即编写和维护这本书的人,就是软件开发人员。他们遇到的问题几乎与软件开发人员和开发团队遇到的问题完全相同。例如,你如何知道你编写的指令实际上有效?当有新的人开始在这本书上工作时会发生什么,他们如何学习规则?当规则太多以至于作者无法记住所有规则时会发生什么?作者如何了解客户想要制造的新汽车和新汽车零件?你可以使用这个类比向任何人解释软件开发的所有流程、问题和原则。
希望这对你有帮助!
-Max
分享 点击在Facebook上分享(在新窗口中打开)Facebook 点击在LinkedIn上分享(在新窗口中打开)LinkedIn 点击在Hacker News上分享(在新窗口中打开)Hacker News 点击在Reddit上分享(在新窗口中打开)Reddit 点击在Threads上分享(在新窗口中打开)Threads 点击在X上分享(在新窗口中打开)X
1条评论 发表回复
Filis Futsarov 说: 2025年3月7日上午5:03 哦!!我很高兴我一直使用那个类比:)) 回复 发表回复取消回复
联系 关于 书籍:《理解软件》 书籍:《代码简洁性》
输入您的邮箱… 订阅
Max Kanat-Alexander 5天前 我很高兴今年能在2025年开发者生产力工程峰会上发表主题演讲之一。我谈到了什么造就了出色的开发者体验。特别是,这次演讲涵盖了我们在所有开发者体验工作中试图优化的三个核心事项。希望它有所帮助! :) https://lnkd.in/g-AJtJ2b 阅读更多 什么造就了出色的开发者体验? lnkd.in 690分享
Max Kanat-Alexander 6天前 为什么谷歌拥有如此出色的开发者体验?它只是在这方面花费了比任何人都多的钱吗? 嗯,是的,如果你累计计算谷歌在其基础设施上投入的所有人力成本,谷歌可能在开发者体验上花费的钱比任何人都多。但这实际上并不是谷歌在这方面成功的核心原因,因为谷歌开发者体验的早期并没有涉及大量工程师。实际上,它涉及了相对较少的一些优秀工程师,他们随着时间的推移相当缓慢地构建工具。谷歌一些最受喜爱的工具最初总共只有三、四个人构建。 关键在于,这些工程师被允许专注于开发者基础设施的基础,无论需要多长时间都要把它做对。每个人都在朝着开发者体验的长期全局最大值努力,而不是短期的即时需求。非常优秀的工程师被赋予自由去问诸如"一个完美的构建工具应该是什么样子"这样的问题,然后尝试构建它。对于源代码控制、代码审查、编程语言基础设施、CI、IDE、通用库以及开发者体验的许多其他部分也是如此。当然,有时我们在这个过程中构建了一些糟糕的东西,但公司足够关心把它做对,以至于我们(通常)会回头修复它,最终。 谷歌开发者体验和速度的关键在于这种对软件工程基础的关注。这不仅仅是在开发者工具团队中,而是贯穿整个公司——谷歌的工程师比我在任何其他地方看到的都更关心代码质量、测试等。 行业其他地方的技术领导者最常犯的错误之一就是未能关注所有这些工程基础。代码库可维护吗?你是否有需要的基本工具来高效且有效地构建可靠、高质量的软件?是否有系统确保新的软件工程师能够快速上手项目,并随着时间的推移提高他们的技能?等等。 相反,我经常看到领导者坚持在破碎的基础上紧急解决即时问题,而没有任何真正在未来解决这些基础的计划。这有点像是一个酒店建造者,看到所有其他酒店都有很棒的顶层套房,然后坚持让团队建造一个美丽的顶层套房,而建筑却有开裂的地基和漏水的管道。修复那个地基可能很困难,但如果你不修复,你肯定会后悔。 基础有时感觉抽象或不重要,因为它们不是你被要求交付的即时产品。但让我告诉你,如果你想能够交付任何东西,基础才是最重要的。 阅读更多 18741分享
Max Kanat-Alexander 10月1日 计算机从来不是任何事情的原始原因。它们从根本上没有意志力(在没有先前指令的情况下做出导致行动的决定的能力)。总是有某个地方的人类给了计算机指令,它才会做它正在做的事情。 这对AI和所有其他计算机软件都是一样的。 这不仅仅是一个高层次的哲学原则。它实际上非常适用于我们在工作环境和生活中应用和使用AI的方式。 当我们说AI编码助手改进了软件开发时,实际上并不是AI做到了这一点。是我们向开发者提供了助手,然后他们有效地使用它。很容易认为我们只需向我们的开发者撒上魔法仙尘,魔法仙尘就会让他们更有效率,但实际上这需要工作和关注,而这项工作和关注是关于人类操作技术的。 每当你听到有人声称计算机、软件或任何AI系统做了某事时,退后一步想一想,“等等,人类实际上在那里做了什么?“理解这一点将比仅仅阅读头条新闻和LinkedIn上的肤浅热门观点让你走得更远。 阅读更多 384分享
Max Kanat-Alexander 9月17日 通常,解决软件系统问题的方法是分配软件工程师来解决问题。 将问题分配给软件工程师的危险在于,他们会编写软件来解决它。 当你看到软件系统中长期未解决的问题时,通常意味着没有人被分配去解决那个具体问题。 当你看到不必要的软件被编写时,几乎总是因为软件工程师被分配去解决某个问题,并决定编写软件是解决它的方法。 阅读更多 568分享 加载更多
© 2025 版权所有。由The Fox提供技术支持。
管理同意联系关于书籍:《理解软件》书籍:《代码简洁性》
回到顶部