第一性原理对于解决复杂问题特别有用,因为它们可以让您将问题分解为核心元素,然后从这些核心元素中系统地构建解决方案。这比试图用先入为主的观念解决问题或根据过去的经验对问题做出假设更有效。第一性原理的定义第一性原理主要应用于计算机科学、工程和物理,但它可以应用于任何行业。本文主要讨论第一性原理在软件开发中的应用。应用第一原则大致有四个步骤:1.确定要解决的问题2.将问题分解为基本部分3.质疑并挑战您的假设4.从头开始??创建新的解决方案Firstness原则是什么?第一原则是您用来建立论点的起点或假设。第一性原理思维是指将问题分解为基本部分并按顺序检查每个部分直到找到答案的过程。第一性原理思维不同于其他解决问题的技巧,因为它可以让你专注于问题最重要的元素,而不会被无关的细节或二手信息分散注意力。通过这种方法,与跳过推理过程中的某些步骤相比,您可以更快、更有信心地得出解决方案。第一性原理思维是一种通过查看问题的根本原因来分析复杂问题的方法。第一性原理的历史第一性原理在哲学和科学领域有着悠久的历史。它可以追溯到古希腊哲学家亚里士多德,他认为所有的知识和理解都必须来自第一原则(基本原则)。在他的著作中,亚里士多德强调了从不言而喻的真理或公理开始并使用逻辑推理来推断更复杂思想的重要性。第一原理的概念继续对现代科学和哲学思想的发展产生巨大影响。在17和18世纪,哲学家笛卡尔和伊曼纽尔康德也强调了使用理性从第一原理中获得知识和理解的重要性。在20世纪,物理学家理查德·费曼(RichardFeynman)推广了费曼技术的使用,该技术涉及将概念或问题分解为其基本原理,以便更好地理解和解决它。马斯克在创建特斯拉时也使用了第一性原理思维。那时候电池很贵,而且充不上多少电。在考虑用什么来制造电池时,马斯克用第一性原理来思考为什么电池如此昂贵。马斯克认为电动汽车将比汽油更便宜。一个巨大的发电站一定是比小型内燃机更有效的发电方式。马斯克建造了巨大的超级工厂来降低电池成本。第一性原理思维的另一个例子是SpaceX和降低太空火箭的成本。马斯克认为,太空火箭的巨大成本在于它们只能使用一次,而SpaceX制造的可重复使用火箭可以安全着陆并再次使用。马斯克与第一性原理在软件开发中,你也可以用4个步骤来解决你面临的问题。这个问题可能是需求问题,可能是产品设计问题,可能是技术方案,也可能是bug。第一性原理的四个步骤步骤1:确定要解决的问题并将其分解为基本部分第一性原理思维首先确定问题的最重要部分并将其分解为组成部分。确定问题中最重要的部分;将每个部分分解成自己的组成部分,然后确定每个部分与整体之间的关系;重复前两步的过程,直到你把所有东西都分解了。确定问题并将其分解为基本部分第2步:问“为什么”一旦将问题分解为各个组成部分,就该问“为什么”了。问“为什么五次”是从源头找出问题或结果的根本原因的有用方法。当你每次都问“为什么”,并继续深入挖掘时,你最终可以找到任何问题或结果的核心——即使看起来有多个原因在起作用。让我们看一个例子:假设你的程序崩溃了:为什么?因为API停止接受请求。为什么?因为最新的部署导致应用程序启动出现死锁。为什么?因为生产环境的并发请求比测试环境多,并且使用了非线程安全的数据结构。为什么?开发时没有考虑到这一点。所有测试都通过。为什么?自动化测试不包括任何高吞吐量场景。第三步:挑战您的假设假设是构建解决方案的基础。它们可能是对的,也可能是错的,但它们始终基于您此时此刻所知道的真实情况。如果您的假设是正确的,那么它们应该会引导您找到一个好的解决方案;如果它们不正确,那么它们可能会在以后导致可怕的后果。具有挑战性的假设当一个有希望的假设被证明是错误的时,代码需要改变,可能所有依赖于它或与之相关的一切都需要改变。我们通过第一性原理思考质疑和挑战我们在软件开发中的假设:我们的业务目标和目标到底是什么?而不仅仅是需求,因为很多需求是错误的或者是信息缺失。需求是假设的共同领域,关于需求的假设一般出现在边缘场景(特例)中。边缘案例占总可用性的20%,但占实施复杂性的80%。边缘情况通常不是系统可操作性所必需的,但它们确实对用户体验有很大影响。在早期的“最小可行产品”发布范围界定和功能优先级划分期间,将边缘案例留给下一个实施阶段可以将您的应用程序发布速度加快数周。假设主要分为以下几类:a)关于市场的假设;b)关于问题的假设;c)关于解决方案的假设;d)关于人的假设。假设的一些例子,例如:假设某人的计划是好的,一切都考虑到了;假设某个解决方案所需的规模;假设以前的文档是一个很好的复制模板假设错误不在特定区域假设思想被绕过,我们假设其他人已经为我们完成了所有思考而我们不需要。第4步:专注于您的目标并从头开始创建新的解决方案下一步是专注于您的目标。第一步是确定问题,第二步是收集有关解决问题需要做什么的信息。现在是您需要关注解决问题的最终结果的时候了。这在实践中意味着:不要被细节分心,除非它们与解决你的问题和实现你的目标有关;专注于实现这些目标,不要担心沿途发生的事情。在软件开发中应用第一性原理思维可以通过多种方式帮助软件开发。使用这种方法的一些具体好处包括:通过将问题分解为基本原则并确定关键需求和目标,它有助于阐明软件要解决的问题或挑战。它通过使用既定原则来指导技术、体系结构和设计模式的选择,为做出明智的设计和开发决策提供了基础。通过使用这些原则来评估解决方案的稳健性和有效性,有助于识别和解决对问题的理解上的差距或不一致。我们通过两个例子来应用第一性原理:1.设计一个电子商务应用程序产品问题:用户为什么需要这个应用程序?快速找到并购买他们需要的东西。为什么他们需要我们减少结账流程中的步骤?他们想节省时间。一键结帐可能会有所帮助。为什么他们需要我们支持评论?这有助于他们建立对所购买商品的信任,并帮助他们更快地做出购买决定。软件工程问题:实现功能的最低要求是什么?搜索框、过滤结果和产品页面的方法、类别页面以及结帐方法。我们可以使用什么技术来构建它?电子商务平台已经有一个用于搜索、过滤和显示结果的API。也许一个带有CSS+JS的基本UI就足够了。我们的用户如何相互交互?他们可以对产品发表评论,系统中的每个人都可以看到这些评论。我们可能需要支持来创建/管理评论。2.设计一个社交应用问题:用户为什么需要这个应用?用户希望找到具有相似兴趣的其他人并与他们联系。他们可以搜索个人资料、阅读此人的公共信息并在个人资料上发表评论。为什么用户需要交互?他们想在个人资料页面上发送消息或发表评论。我们的数据模型是什么?用户有个人资料,他们可以将照片添加到他们的个人资料中。我们将如何在系统中表示用户?用户将有一个名字、一个电子邮件地址(我们可以用它来发送消息)和一些其他基本信息,如年龄或性别。结语第一性原理可以应用于软件开发各个环节所面临的问题,而不仅限于需求问题、产品设计问题、技术解决方案和Bug。当我们在问题的泥潭中不能自拔,当我们面对问题,不知所措的时候,大脑中的钟声应该在这些时候提醒你,是时候重新审视你现在的烦恼了,先用原则,再次重组新的解决方案。参考资料:https://addyosmani.com/blog/first-principles-thinking-software-engineers/https://uxdesign.cc/8-first-principles-of-software-design-6f24ad1590b9https://itnext.io/first-principles-thinking-in-software-development-b0450447aa67https://www.theengineeringmanager.com/growth/first-principles-and-asking-why/文章来自:热爱科学的Wesley,如转载为此文章,请联系热爱科学的卫斯理,今天头条号。
