重要要点
· 软件系统需要综合解决问题的能力-我们进行测试,观察和试验,以验证我们的工作并确定其价值。
· 构建软件系统的历史是发现和形式化综合方法以实践指导我们创建过程的实践的历史。
· 已经出现了多种综合管理方法,以与用于构建软件系统的综合实践相匹配。
· 综合管理与用于经营业务的分析方法形成对比,从而对价值创造形成了新的约束。
一种新的证明
在机器学习算法战胜了围棋世界冠军之前,甚至在搜索算法战胜国际象棋大师之前,计算机在解决地图问题时就取得了人类思维的第一个智力胜利。
该解决方案是首次在计算机上发现纯数学领域的重大成就。 这震惊了世界,颠覆了人类思想至上的神圣信念,同时揭示了数字化解决问题的新模式。
“地图问题”询问为地图着色需要多少种颜色,以便具有公共边界的区域将具有不同的颜色。
易于解释,易于视觉验证,但难以正式证明的”地图问题”以多种方式捕捉了世界的想象力。 首先,为了优雅地表达其陈述,然后,在其解决方案难以捉摸的一百多年中。 最后,对于产生结果的残酷而新颖的方法。
地图问题是图论的基础,因为地图可以变成我们可以分析的平面图。 为了解决该问题,可以使用放电方法来找到可简化的图形构型,将缩减后的构型限制为不可避免的组,并且可以对不可避免的组进行测试以查看实际需要多少种颜色。
如果我们能够测试所有可能的不可避免的设置并发现只需要四种颜色,那么我们将得到答案。 但是手动减少和测试集合的操作非常费力,甚至是野蛮的。 当1852年首次提出”地图问题”时,可能无法考虑这种方法。
当然,随着计算能力的提高,许多人开始意识到这个问题已经成熟,可以加以利用。 我们可以创建让计算机为我们完成工作的算法-我们可以以编程方式查看是否存在地图需要四种以上颜色的反例。 最后,这就是发生的一切。 因此,我们庆祝了:四种颜色就足够了! 问题解决了?
这些不是你要寻找的证据
数学是分析性的,逻辑性的。 在检查证明时,我们希望能够解决整个问题。 对于”映射问题”,数学家只需要这样的证明,一些漂亮的东西,一些可以揭示解释系统行为的结构的东西,一些可以洞悉问题内部原理的东西。
在1976年美国数学学会夏季会议上提出解决方案时,挤满了房间。 他们没有得到漂亮的东西-相反,他们得到了打印输出。 成百上千页的打印输出,成千上万次测试的结果。
这甚至是证明吗? 会议分歧很大。 他们说,解决方案根本不是证明,而是”演示”。 他们说,使用科学方法而不是纯粹的逻辑是对数学学科的冒犯。 许多人并没有准备放弃他们一生的工作。
对地图问题的解决方案的焦虑突出了我们如何解决问题的基本二分法:分析方法与综合方法之间的差异。
四色定理的解决方案不是分析性的:它是综合性的-它通过观察得出了真相,并在所有离散情况下进行了详尽的研究。 这是根据经验得出的答案,它利用计算机的能力来应对各种可能性。 通过分析来证明图形的可约性,但是该解决方案是通过对每个不可避免的集合进行编程观察得出的:编码的经验,可能是人工的。 传统意义上没有证据-如果您要检查工作,则需要检查代码。
但这正是我们解决代码中所有问题的方式。 我们使用创建和验证的双重合成方法:合成代码,然后进行综合证明。 我们利用代码媒介提供的独特功能来尽快测试,观察,体验和”证明”我们的结果。 这是软件。
软件是合成的
纵观任何现代软件交付组织的开放式计划格局,您都会发现它的迹象,这种思维方式与技术的分析根源形成鲜明对比。
在站着的小树林附近,一堆信息辐射器的对面,您可能会看到我们珍贵的文物-J型曲线,分层的金字塔,一等分的板子-与生产原理的题词并列。 这些让我们想起了敏捷培训的过去,也向仍然向所提供的材料致敬的团队证明,他们决定了自己的材料并做出了自己的贡献。
是什么使这些新的工作方式在软件交付中如此成功? 答案就在于这个基本但尚未证明的事实-软件是合成的。
软件系统是富有创造力的,新颖的和生成的; 人与技术之间精心互动的产物。 这些并不是我们学龄者期望找到的有序,分析性的世界。 充满了复杂性和不确定性,我们必须使用不同的方法来得出解决方案。
这些合成系统中”工作”的工作方式不同。 我们使用不同的方法来控制”综合性”,并利用它来获得我们的优势。 当我们学会看到这一点时-当我们改变关于确定性之路的思维模式时-我们开始就如何组织自己,使用何种实践以及如何与之有效地做出更好的决策。
我们习惯于使用可以进行分析的系统,并且在物理世界中发现确定性的地方,我们可以从深入的检查和形式验证中获得真正的价值。 由于我们不能使用拉动请求来更改物理定律(并且不会在周期中发布更新的,更好的重力版本),因此值得花时间计划,分析和思考问题。 更不用说进入的重大障碍了-用物理材料建造东西需要付出一定的成本,然后才能下定决心。
人工的软件提供了独特的能力,可以从开放式合成的不确定性中获得可重复的价值,但前提是我们愿意放弃我们的强迫性分析。
世界上没有其他媒体具有如此直接和可访问的能力,可以从新兴经验中创造价值。 在代码中,我们将思想和意图组合在一起,以解决我们非常实际的问题,在每个线程中学习和发现可能性,从而使知识浮现并朝着不同的方向发展。
综合的工作方式影响着开发的日常工作,从编写代码的最基本动作开始,一直到组织的管理。 要了解这一点,让我们逐步完成该过程。
能行吗
创建行为是综合过程,软件主要是创造性行为。 这是将数百万个离散元素组合在一起以创建新事物和不同事物的实践。 在结合这些元素的过程中,我们有机会创造出既新颖又美观的新产品。
我们从一组离散的基元,元素和结构开始。 我们使用结构和流程将它们组合成算法。 在这种耦合中,我们产生了一些新元素,它们各自独立,并收集了新的特性和功能。 安排算法,我们创建运行时和库,脚本和可执行文件。 这些的结合带来了系统-程序和应用程序,基础架构和环境。 通过这些产品,我们制造产品,诞生企业,创建类别并建立整个行业。
尽管我们的系统是由数百万个小片段的复杂合成拼凑而成的,但它们却在人们的重力和意图的作用下挂在一起。 “作为用户……”但是这些意图可能会发生冲突,并且只有将它们放在一起时这些冲突才变得可见。
在整个创建过程中,我们对正在构建的系统的理解就会发生并发生变化(顺便说一下,这是许多技术债务的根源)。 我们接受,直到我们看到它,我们才能够真正了解我们的系统:当我们观察我们的想法成真时,我们会从一点一点地增长,一步一步地承诺的理解中学习。 “会起作用吗?”
为了回答这个问题,我们编写代码,运行,测试,我们去看看。
创建过程需要通过经验进行验证。 这就是我们发现综合真理的方法。 使用计算机,我们可以连续地执行此操作,我们可以使其自动化。 用代码的方式,”体验”很便宜,并且对我们很容易获得。 验证我们的假设就像运行代码一样简单。 这种对经验的递归求助是我们创造过程中的基本组织原则。
在合成系统中,我们要做的第一件事是体验我们的工作,从我们的合成中学到东西。 在向系统提供指令时,我们需要使系统具有教导我们的能力。 综合的不确定性越大,我们就需要从经验中学到更多。
因此,我们优化了此类学习的日常工作。 测试驱动开发,快速反馈,测试金字塔,结对编程; 这些都是良好软件开发的基础,因为它们使我们更接近体验在整个系统范围内以不同方式进行的更改。 任何有助于或体验我们的变革方式的实践都将在这里成为一家好公司。
它仍然有效吗?
在复杂的系统中,我们始终走在理解的边缘。 我们正在通过复杂的 络系统,汇聚意图的 络进行工作,而对零件的常规更改通常会在其他地方带来意想不到的后果。 我们不仅需要测试我们的更改,而且还需要知道是否破坏了其他任何功能。 “它仍然有效吗?”
为了回答这个问题,我们将综合方法贯穿交付生命周期并推向相邻领域。
当我们的工作在价值流中移动时,我们使用支持系统来验证和维持我们意图的真实性,从而使我们的核心工作流程外部化。 我们根据经验创建代理,即为我们”体验”并 告结果的系统。 我们使用持续集成来验证我们的意图,并获得对代码的共享视图,以作为对整个系统的更改。 我们使用连续交付将我们的变更推向生产型,源代码控制的环境。 当我们的工作进入系统中越来越大的边界时,我们使用管道来保持稳定性并提供快速反馈。
在过去的十年中,这些实践的范围不断扩大,这些实践将我们的个人经验外部化并提供了代理经验:测试自动化,可重复的构建,持续集成,持续交付等。 我们将其中许多置于DevOps的旗帜下,我们可以将其理解为在价值链中沿途进行的综合思考。 该概念已被证明非常有用,以至于我们的行业已开发出一种强制性来进一步扩展该概念:DevSecOps,DevTestOps,BizDevOps,NetDevOps等。
而且为什么我们要创建这些新的本体,这些综合的理解类别也很有意义。 我们希望就”完成”,”测试”或”创造价值”的含义建立单一视图,该视图结合了我们的学科用来体验世界的不同概念。 这些是我们行业希望扩展直观上有用的示例:在软件价值流中应用综合思维的能力。
为什么不起作用?
一旦我们的软件在生产环境中运行,我们就需要将综合的工作方式再延长一次-系统的可观察性。 我们的主要目标是构建旨在及早发现问题的系统,以便我们学习和改进。
随着我们系统的发展,服务会像不合适的齿轮一样一起磨碎。 意图冲突,假设破裂,系统开始以越来越出乎意料的方式运行。 我们已经学会了使用使我们能够深入了解系统,检测异常,运行实验并对故障做出相应的实践,而不是花精力尝试预测所有可能的故障模式。
当难以预测系统行为以及更改将如何影响用户时,需要具有可观察性。 换句话说,要确保我们与系统现象的交互与客户体验保持一致。
使系统可观察是一种将上下文,信息和有关系统的特定知识相结合以创建理解条件的实践。 我们所做的投资是我们整合知识的能力-与日志的语义,意图相关的日志,度量,事件,跟踪等的收集。 我们也通过实验来发现,假设和验证我们的直觉,从经验上解决这些问题。
计划失败涉及一组同样综合的实践。 弹性工程领域在软件行业中正获得发展动力,他们问,我们如何建立一个能够应对意外情况并从环境中学习的系统? 我们可以构建我们的系统以允许紧急行为教给我们,而我们可以通过适应和响应能力来组织我们的组织并做出改变。
混沌工程学也采用了实验性方法,而不是试图分解系统并试图破译所有故障,让我们动手吧。 让我们向系统中注入故障,并观察故障如何发生。 检查,调整,重复。 这是一种由经验驱动的方法,已经在构建规模化软件系统方面取得了许多成功。
通过这样的操作实践,我们接受这样一个事实,即我们的系统很复杂,并且无论代码覆盖范围有多好,我们的工作将始终背负着沉重的债务。 我们最好的办法是使自己有能力对突发事件或级联变化做出快速反应。
综合管理
在这一点上,我们的系统的综合性质也需要向上推进并进入我们的管理体系也就不足为奇了。 我们的工作需要动态的,经验驱动的管理模型。
我们很了解这条龙。 多年来,它已经以多种形式表达出来:”泥泞的大球”,”神话中的人月”,”更糟越美好”,”敏捷宣言”; 每一个都是适应我们工作基本真理所需要素的演变,即综合工作需要综合管理。
在编程的早期,我们被迫使用解析模式来解决编码问题。 最初的计算机是如此昂贵且难以访问,以至于程序员在尝试任何方法之前都不得不用铅笔和纸来研究他们的算法(想一想,Knuth的计算机编程艺术)。 进行实验以查看有效方法的做法根本不是一种选择。
就像程序员必须进行分析以使其尽可能接近解决方案,然后再将其提交给代码一样,管理人员也必须进行分析以确保最受限制的资源得到最有效的利用。 发展起来的工作模式涉及到大量的计划,并且前期设计很大,尽管在廉价的计算能力世界中这是不合理的,但这种模式一直持续到今天。
综合思维要求我们抛开这些传统根源,抛弃如何解决计算机问题的历史记忆。 我们不是通过形式上的证明,而是通过在应该工作的系统上下文中看到它们起作用来证明事物。
我们在软件中使用的管理实践已使传统的分析方法(例如,项目管理)的优先级降低。 我们知道,分析只能带我们走很远,直到我们到达了解的边缘,缺少新兴知识,集体学习和系统特性。
添加替代文字
在分析导致规划的地方,综合需要经验。 可以预见的是,敏捷实践很有用,因为在软件开发中,经验是无法替代的。 我们的系统,环境,组织和市场在不断变化,因此我们的团队需要配备与我们期望的系统相同的响应能力和自适应能力。
为了管理软件系统,我们采用了灵活的方法,使我们能够体验和学习:Scrum的检查和改编; Cynefin的感应和响应; OODA的观察和定位-这些实践都包含我们系统的非线性特性,以及在其中建立理解的综合方法。
随着技术本体的发展,我们正在创建更广泛的管理本体。 在整合端到端价值交付流程的组织和文化元素时,我们一直在思考成为”团队”的含义。 软件系统是一种共生感,其中通过新兴的 交 络进行相互学习。 我们认识到,综合性工作需要一种多样化的集体学习系统,才能从经验知识和主观意义中获得充实。
作为一个行业,我们正在定义和完善自己的”综合管理”方法集,这些方法使我们的团队能够缩小创造行为与体验时刻之间的鸿沟,将人们与他们的工作以及他们所居住的环境联系起来。 因此,下一个挑战是将我们的工作带入我们通常称为”业务”的强大力量的轨道。
新型约束
我们的基本真理与业务的稳定和分析,计算和确定性的需求相矛盾。 业务由金钱和指标,合同和期限,用户和平台驱动。 为了向客户提供价值,我们需要不断地与这种相反但又互补的意图进行对接。
软件的综合性质与业务的分析需求之间的紧张关系产生了约束,给我们的工作施加了压力。 这些约束可能是有价值的,也可能是有害的,这取决于我们设计组织系统的方式。 他们要求权衡,牺牲和债务,这些可以有意管理,也可以临时解决,而且麻烦。 造成问题的不是紧张本身,而是管理不当。
很多时候,组织系统没有进行优化以在上下文之间传递知识,这成为一种痛苦的提取过程。 我们被要求投资于使分析方面充满信心的工作,而使综合方面无所作为。 我们被迫在不透明的 告抽象中工作,这些抽象不映射到我们自己的工作结构。 这些组织无意间使开发人员承受不断折衷的压力,要求他们折衷于综合价值。
同时,成功的组织会积极地促进分析环境和综合环境之间的流动:创建接口,企业可以从中收集所需的信息; 会学习减轻了 告要求和围绕组织层次结构的路线; 诸如OKR之类的有用抽象提供了方向,而不会中断执行。 我们优化组织系统以创建生成反馈循环,从而使我们能够轻松地共享我们的学习并适当地传播知识。
我们如何在整个业务流程中管理约束,这对于我们构建动态学习型组织至关重要,而后者依赖于信息和知识的平衡流动。 但是,通过掌握分析综合二分法,我们可以更深入地思考如何有效。
尽管围绕如何管理这些约束以跨越企业的知识边界进行更多的研究,但已经出现了新的工作方式来帮助我们。
新的工作方式
地图问题的解决方案之所以具有影响力,是因为它改变了世界对我们认为是”可验证信息”的理解。 它向我们展示了一种发现世界事物的新方法,它是通过使用新兴的以双重合成方式在代码介质中解决问题的方式实现的。
同样,软件中固有的综合管理实践开辟了业务管理方式的前沿。 我们看到了对不同想法的更大开放度,数字世界对此也提出了要求:我们的工作中心是一个复杂的系统,该系统要求研究如何在整个企业中推动新的工作方式。 钟摆已经从像管理业务一样管理软件,转而像管理软件一样管理业务。
越来越大的势头正在软化业务的分析方面,并使其更易于与综合思维相结合。 除预算之外,设计思维使我们摆脱了季度预算的限制,设计思维普及了发现和体验式学习的经验技术,业务敏捷力求使业务运营与复杂的自适应系统的本质保持一致,而蒂尔运动正在寻求一种替代性的管理方式 作为自组织的集体学习系统的企业。
如果我们创建能够利用新兴知识力量的组织-如果我们成功地为我们的业务设计了综合管理系统-我们将获得回 。 但是,如果我们在分析的瘫痪上花了太多钱,那就失败了。
当我们打破提供软件产品的管理模式时,我们就有机会在其他地方打破它们。 借助软件,我们已经证明了成功的做法与分析风格不符。 他们会在其他地方工作吗? 找出答案的唯一方法是:去看看。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!