文章摘要:从“贫嘴张大民的小屋”说起

再论软件开发的系统复杂性
文章日期:2025-11-03

核心论点

作者核心观点是,大语言模型在应对具有高度系统复杂性的软件开发时存在显著局限性。软件开发的核心挑战,尤其是对长期演化的复杂系统而言,并非简单的“编程”,而是涉及对系统历史、设计决策和约束的深刻理解。作者通过“贫嘴张大民的小屋”这一隐喻,生动地阐述了软件系统独特的、充满约束和历史痕迹的演化特性,并强调“大模型一锅炖”的思路无法解决根本问题。

1. “贫嘴张大民的小屋”中的系统复杂性隐喻

点击展开/折叠核心隐喻
  • 隐喻设定:整个四合院比作一个软件系统,张大民为解决住房问题而在院中大树下搭建的“树穿床而过”的小屋,是系统演化中的一个独特“模块”。
  • 三个核心启示:
    1. 软件是持续演化的生命体:理解软件需要追溯其演化历史,就像理解小屋为何有树,需要了解张大民当时的处境和邻里的约束。
    2. 设计决策是约束下的产物:软件中的许多“奇怪”设计,都是在特定历史、技术和资源约束下权衡的结果,具有高度独特性。大模型学习的通用模式无法理解这些个案。
    3. 可持续发展依赖于知识掌握:若不了解小屋的来龙去脉(设计知识),新的主人可能不敢轻易改造(砍树)。同理,缺乏对软件演化历史和设计知识的掌握,维护和重构复杂系统将寸步难行。

2. “编程”不等于“软件开发”

点击展开/折叠二者区别

作者认为,随着AI代码生成能力的增强,区分“编程”和“软件开发”变得至关重要。

  • 编程 (Programming):更侧重于实现一个一次性的解决方案,如“算法+数据结构”,目标是为特定问题提供计算过程。
  • 软件开发 (Software Development):目标是构建并长期维护一个软件系统

软件系统的四大特征:

  • 长期稳定运行:需处理各种异常,并满足性能、可靠性、安全性等非功能性需求。
  • 根植于复杂环境:软件是更大的社会物理系统的一部分,其需求和满意度与环境密切相关。
  • 精巧的设计结构:模块间密切协作,局部程序的规约由整体设计决定,而非原始用户需求。
  • 经历长期演化:外部环境和技术发展驱动软件不断变化,导致复杂性持续增长。

结论:大模型擅长局部、边界清晰的“编程”任务,但对于涉及系统性、长期性和复杂决策的“软件开发”,目前只能起辅助作用。

3. 软件的三重角色和形态

点击展开/折叠三种形态及AI的影响

作者提出,应根据软件的不同形态来讨论AI的能力边界,不能一概而论。

形态 核心要求 设计复杂度 AI的实现能力
解决方案 目标达成、成本、时间 无到低 可通过Agent等形式完全自动化
工具应用 功能正确、性能、易用性 低到中 可生成Demo或在专家指导下完成开发
复杂系统 可用性、安全性、性能等 中到高 仅提供辅助支持,人类经验起主导作用

这三种形态大致对应软件频谱的左(个性化小应用)、中、右(巨复杂系统)三端。

4. “自然语言编程”的适用场合

点击展开/折叠四种适用情况

作者指出,“自然语言编程”并非万能钥匙,其成功应用有特定的场景和前提。

开发方式 核心用户 能力要求 AI的角色
“即用即抛”的解决方案 普通用户 表达目标 规划并执行完整方案
“即用即抛”的用户演示 产品经理 理解业务 一次性生成全部代码
扁平化的业务软件 有经验的开发者 提供高质量需求和约束 生成代码并根据反馈迭代调整
专家掌控的复杂软件 专家型开发者 极强的分析设计和自制力 根据提示生成局部代码

核心警告:在专家掌控模式中,开发者的理解和判断力是瓶颈。如果开发者放松对AI生成代码的严格审核,将失去对开发过程的控制,导致质量下降。

具体行动建议 (根据文章推断)

点击展开/折叠行动建议

作者并未直接列出行动清单,但根据其核心论点,可以推断出以下针对不同角色的具体行动建议:

对于所有软件从业者:

  • 保持清醒认知:要正视软件开发的系统复杂性,避免盲目追捧“自然语言编程”等流行口号,理解AI代码生成能力的边界。
  • 分类施策:在评估或应用AI开发工具时,首先要明确你面对的是哪种软件形态(解决方案、工具应用、还是复杂系统)。不要用一套方法论或期望值去衡量所有场景。
  • 夯实基础:回归并深刻理解软件工程的根本原理和企业级开发的实践,这是驾驭AI、解决复杂问题的基础,而非寄希望于AI“一锅炖”。

对于使用AI辅助开发的专家型开发者:

  • 牢牢掌控主导权:在开发复杂系统时,必须由人类专家进行整体规划、任务拆解(“画田字格”)和节奏控制。AI是辅助工具,不是主导者。
  • 保持高度自制力与批判性思维:必须严格审查AI生成的每一行代码,警惕因AI的高效输出而降低代码质量标准。开发者自身的理解力和判断力是保证项目成功的关键瓶颈。
  • 精通人机协作:通过精心设计的提示词(上下文、约束、提醒)来精确引导大模型,并在其生成代码后,进行手动的集成、适配和调整。

对于行业领导者与研究者:

  • 避免“大跃进”式宣传:在讨论范式变革时,应更加严谨和谨慎,避免过度宣传,给行业带来不切实际的期望,最后“留下一地鸡毛”。
  • 构建长远体系:致力于构筑软件智能化开发的理论和方法体系,而不是停留在对当前工具的短期应用探索上。

5. 结束语与展望

点击展开/折叠结论与未来思考
  • 回归理性:在AI代码能力爆发增长时,更应正视软件开发的系统复杂性。抛开软件形态谈论开发范式变革是不合适的,应避免“大跃进”式的盲从。
  • 智能化开发 (AI4SE):当前AI主要擅长构造“解决方案”和“工具应用”,而非“复杂系统”。
  • 智能化系统 (SE4AI):未来,即使是以Agent形态出现的新型智能化软件,也必须建立在稳定、可靠、确定性的传统软件基础设施之上。AI模型将是新型软件系统的重要组件,而非全部。

作者简介

彭鑫,复旦大学计算与智能创新学院副院长、教授,国家级高层次人才计划入选者。主要研究方向包括软件智能化开发、AI原生与云原生系统、泛在计算软件系统、智能汽车及工业软件等。

原文

源链接

相关链接

代码数字孪生:回归软件的复杂系统属性
智能化时代的软件人才培养
大模型时代软件智能化开发:我们在哪里?该往何处走?