换个角度看敏捷3 - 我心中的敏捷
心中的敏捷
“敏捷是什么”,这个问题长期以来一直困扰着我。前段时间提出了敏捷问题解决方式,算是从做法(做事的方法)上对敏捷进行了一个简单的总结。最近一直在清理,这就试图描述一下我心中的敏捷。因为个人一直从事软件开发工作,所以文中的主体部分有一些与软件开发相关的经验,不能做到完全的通用化。
我心中的敏捷
从信仰、理论到实践与方法学,这就是我心目中完整的敏捷知识体系。
敏捷信仰
主要内容
敏捷信仰,也可以被称为敏捷世界观,源于经验主义或逻辑实证主义。其主要内容包括:
- 世界是复杂的和不断变化的,人是导致复杂和变化的主要原因
敏捷对此使用的词汇是我们不能预测未来。这看似不可知论,但其实这句话的意思是我们无法准确预测变化的影响。
敏捷软件开发是复杂和不断变化的典型,客户、开发团队都处于不断变化中。参考彼得德鲁克的“知识工人”理论,《第五项修炼》等。
- 经验主义,小步前进,持续改善
逻辑实证主义强调经验的获取是建立在实践的基础上。因此在逻辑实证主义看来,经验主义,小步前进,持续改善是应对复杂和变化的最佳方式,也是敏捷的核心。这就是“Kaizen”,持续改善文化的来源。
对比描述
敏捷信仰导致了敏捷与其他方式的不同,为方便理解,现进行对比。
- 科学主义或唯科学主义Scientism
科学主义是一种主张以自然科学技术为整个哲学的基础,并确信它能解决一切问题的哲学观点。其主要特点是在尊重科学经验与事实的名义下,推行不可知论和主观经验主义。科学主义的流行导致了事实与价值、科学与人文的分离和对立。
科学主义影响深远,对于计算机是工程学还是科学,现在仍在争论中,但我们在计算机发展的过程中处处均可发现科学主义的身影。科学主义极大的影响了软件开发的发展历程。
当我们陷于优劣争论,忙于证明某种方式比其他方式更加科学的时候,已经落入了科学主义的陷阱。
- 非理论派与不可知论
在问题解决过程中,还存在这种纯实践派,他们反对任何形式的理论,主张实践出真知。认为复杂问题是不可预知的,从而没有预知的必要。这是典型的两分法,在实践理论失败后反对一切理论。
- 中庸与太极
敏捷看上去与中国传统的中庸和太极是如此的相似。但是敏捷本质上将没有最佳做法的含义,也不代表混沌。
敏捷拥有严肃、完整和科学的做事方式,比我们见过的任何一种方法更加的严格。
- 精益思想
精益思想的两大支柱是尊重他人和持续改善,这一点与敏捷惊人的一致,其根源在于他们都源于同样的哲学-逻辑实证主义。
敏捷理论
根据个人的理解,敏捷的理论根源主要源于下述理论和更多的实践证明,因为敏捷本身就是实践的结果。
- 复杂系统和混沌理论
敏捷中常见的提法包括系统思考、局部优化等。
传统软件开发中以分工为基础,更强调分解,不同角色应对分解后的简单问题。敏捷软件开发中强调系统,每个参与者都有机会获取对整个系统的认识,同时“可工作的软件”即分解后的集成在敏捷软件开发中是重中之重。
- 博弈论\运筹学\排队论
敏捷大量应用了博弈论的研究,典型是将软件开发比喻成一种合作博弈。软件开发涉及的利益相关者众多,是一种典型的博弈应用,如何取得多赢,敏捷软件开发对此进行了深入的思考,并对传统软件开发的许多工作方式提出了质疑。
- 认知科学\知识工人理论
敏捷应用了许多对人本身的认知、心智的研究成果。
a) 人类擅长比较而不是量化
敏捷软件开发中大量应用比较和趋势,取消了很多无效和成本过高的量化指标。用价值作为软件交付的结果,用计划扑克实践进行基于比较的估算与计划。“尽快交付更高的价值Deliver higher value faster”成为敏捷的目标。
b) 人类对重复和节奏的偏爱
c) 反馈对人类的重要作用
敏捷价值观
- 承诺
- 专注
- 开放
- 尊重
- 勇气
敏捷问题解决方式
敏捷问题解决方式是对敏捷工作方法的总结。敏捷不仅仅是信仰,它还提供了具体的、有效的工作方式。
- 保持系统性
a) 敏捷问题解决方式并未预测问题解决的最佳答案,而只是提出了一种方法框架方便经验获取。
b) 问题经分解后仍然是问题(单位问题),保持了问题解决的系统性。
c) 问题的检验注重问题本身的完整性和问题解决方法的系统性。
d) 敏捷问题解决方式以产出为基准进行回顾和优化,原因在于以投入为基准进行的优化对于复杂系统(非线性)效果不佳。
- 沟通与合作的博弈
a) 敏捷问题解决方式强调问题提出者的参与,增强了问题提出者与问题解决者的沟通合作。
b) 敏捷问题解决方式通过问题分解模式的转换,对单位问题进行转移视角分解成另一类单位问题并解决,实现问题解决者内部的沟通合作。
- 强调人的作用
a) 问题的解决与否基于问题提出者的主观判断,而非某种客观依据。
b) 问题的分解基于问题提出者与问题解决者的沟通合作,而非某种预知的科学方式。
c) 以问题的检验为导向,验证工作方法、问题分解方式的有效性。
敏捷实践
敏捷实践是敏捷信仰与敏捷问题解决方式应用于实践的结果。存在大量的敏捷实践,这里就不一一列举。唯一需要强调的是,单独强调某一敏捷实践的作用容易忽视系统性,应该在敏捷信仰、敏捷理论、敏捷价值观和敏捷问题解决方式的指导下,系统的应用敏捷实践。
敏捷方法学
敏捷方法学由一系列敏捷实践组成,但是借用XP中的一句话,这些实践结合在一起形成了一个胜于部分结合的整体。
- Scrum
- XP
敏捷应用
敏捷适用于解决以人为中心的问题,因此可以广泛应用于上述范围。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?