🧩 第十一章 衍生:敏捷开发
📄 一句话概括

10 个常见问题里,技术只能解决 5 个——需求、协作、进度、验收这 5 个只能靠流程;技术解决【做得对】,流程解决【做对的事】。

📝 本节和前面几节的关系

第十讲讲完设计(技术),这一章换赛道:开发流程。先说明为什么技术不够。

一、实测:一半问题技术解不了

技术能解 5 个:代码写错、性能不够、结构混乱、测试不足、接口不合理。 技术解不了 5 个:需求一周改三次、没人知道该做什么、交付总延期、两个组对不上、验收时说不是这个。 后 5 个全都不是【写代码】的问题,它们属于【怎么把事做成】。

二、两个层面不能互相替代

技术解决【做得对】:代码正确、性能好、结构清楚。 流程解决【做对的事】:需求清楚、分工明确、进度可见。 技术再强,做错的东西也还是错的——这是本章的起点。

三、为什么这一章要放在最后

因为流程的效果依赖技术底子:代码改不动的人,谈敏捷只会更乱。 11.14 会说清这层依赖:敏捷源于面向对象。 所以顺序是:结构 → 设计 → 流程,倒过来学容易变成喊口号。

四、动手 Demo:仅靠技术和技术窍门,软件开发并不会成功

列 10 个项目常见问题,逐个判断技术能不能解决。 数一数两边的数量。

items = [("这段代码写错了", "技术能解"), ("性能不够", "技术能解"),
         ("结构混乱", "技术能解"), ("测试覆盖不足", "技术能解"),
         ("接口设计不合理", "技术能解"),
         ("需求一周改三次", "技术解不了"),
         ("没人知道该做什么", "技术解不了"),
         ("交付总延期", "技术解不了"),
         ("两个组各做一半对不上", "技术解不了"),
         ("验收时说不是要的这个", "技术解不了")]
tech = sum(1 for a, b in items if b == "技术能解")
print(len(items), tech, len(items) - tech)   # 10 5 5

实跑输出:

--------------------------------------------------------------------
仅靠技术和技术窍门,软件开发并不会成功
--------------------------------------------------------------------

  一个项目里,光靠技术能解决的有几件?实测 10 个常见问题:

  问题                     能不能靠技术解决
  ------------------------------------------
  这段代码写错了           技术能解
  性能不够                 技术能解
  结构混乱                 技术能解
  测试覆盖不足             技术能解
  接口设计不合理           技术能解
  需求一周改三次           技术解不了
  没人知道该做什么         技术解不了
  交付总延期               技术解不了
  两个组各做一半对不上     技术解不了
  验收时说不是要的这个     技术解不了

      常见问题                    10 个
      技术能解决的                5 个
      技术解决不了的              5 个

  **实测一半是技术,一半不是**——后一半(需求、协作、进度、验收)**只能靠流程。**
  **这就是软件开发为什么需要【开发流程】**:技术解决【做得对】,流程解决【做对的事】。
  **所以第 11 章讲的是流程,不是编程。**

实测:10 个问题里 5 个技术能解、5 个技术解不了。 解不了的那 5 个(需求、协作、进度、验收)才是项目失败的常见原因。 所以这一章讲流程,而不是讲更多的编程技巧。

30 秒实验

  1. 把你上一个项目的问题列出来,按技术/流程两类分一分。
  2. 找出一个你想用技术解决、其实该用流程解决的问题。

常见误区

  1. 以为技术强就够了。技术解决做得对,流程解决做对的事。
  2. 以为流程能救技术。代码改不动,流程再好也跑不起来。
自测三问(点开对答案) 1. 实测比例如何? —— 10 个问题里技术能解 5 个,解不了 5 个。 2. 技术与流程各管什么? —— 技术管做得对(正确、性能、结构),流程管做对的事(需求、分工、进度)。 3. 为什么流程这章放在最后? —— 流程效果依赖技术底子;敏捷本身源于面向对象,结构不行谈敏捷只会更乱。

相关笔记