By 小墨
2026年3月17日
91
643
软件复杂性的累积:一个电商功能的技术债务警示录
在软件开发的日常工作中,你是否曾遇到过这样的情况:一个最初看似简单的需求,经过几次迭代后变得越来越难以理解和维护?这并非个例,而是软件系统演进过程中的普遍现象。本文将通过一个电商系统「限时折扣」功能的典型案例,带你深入理解软件复杂性是如何累积的,以及如何在开发中避免陷入「越做越乱」的困境。
复杂性的本质与表现
让我们先看一个虚构但极其真实的故事。第一周,团队需要在两周内上线「限时折扣」功能,一位「战术快枪手」开发者当晚就完成了实现——直接在订单服务里加一个大开关,判断当前时间是否命中折扣时段,如果是就在结算价上打一个比例折扣。没有新服务、没有抽象、测试也只有两条冒烟用例。第二天演示顺利,大家鼓掌表扬效率高。 第三周,「团购」和「会员价」需求接踵而至。这位开发者把限时折扣的逻辑复制了一份,叠加两个if分支,再加上两个Feature Flag。因为赶时间,他把用户等级查询直接打到了用户服务的同步接口里,并在超时时默认用户是普通会员,避免影响下单成功率。上线顺利,项目周会上大家一致认为这套「战术打法」可复制。 第四个月,诡异Bug开始出现:会员价和满减券叠加时,有时多打了一次折。十分钟修好后,为了稳妥又加了一个保护开关。 第六个月,线上报警:东八区和UTC时间换算错了,午夜跨天时部分订单重复计算折扣。临时补丁上线,问题止住了,但「待重构」的卡片又被新一轮活动排期盖过去。 第九个月,「跨店合并优惠」需求来了,需要支持活动实时生效、规则热更新。团队发现用现有代码已经堆不起来了,
战术性编程 VS 战略性编程
这个故事揭示了一个残酷的现实:复杂性不是某个大错误造成的,而是无数小捷径的总和。每一个「合理的妥协」——多一个开关、复制一段逻辑、加一个短路条件——当时都像救命稻草,叠起来却成了沼泽。 那么,复杂性到底从何而来?从本质上讲,复杂性源于两个核心因素:依赖和晦涩。 依赖是软件的基本组成部分,无法完全消除。实际上,我们在软件设计过程中有意引入了依赖——每次编写新类时,都会围绕该类的API创建依赖关系。但是,软件设计的目标之一是减少依赖关系的数量,并使依赖关系保持尽可能简单和明显。 晦涩则是当重要的信息不明显时发生的情况。一个简单的例子是变量名称过于笼统,没有携带太多有用的信息。或者某个变量的文档没有说明它的单位(秒还是毫秒),所以找到它的唯一方法是扫描代码中使用该变量的位置。 依赖和晦涩共同导致了复杂性的三种典型表现: 第一,变更放大。看似简单的变更需要在许多不同地方进行代码修改。这是因为代码中存在着隐式的依赖关系,一个地方的改动可能连锁影响到其他看似不相关的地方。 第二,认知负荷。开发者需要掌握多少知识才能完成一项任务。较高的认知负担意味着开发者必须花更
真正的速度来自良好设计,而非侥幸「跑起来」。每一次对设计的轻视,都在为未来的瘫痪埋下伏笔。
“小墨”管理复杂性的核心方法
回到我们的故事,那位「战术快枪手」本质上是一个「战术性编程」的践行者。战术性编程的开发思路是「越快完成任务越好,之后的问题之后再说」。其代码特点是「不会花费太多时间来寻找最佳设计,每次增加一些复杂性或引入一两个小错误」。 几乎每个软件开发团队都有至少一个将战术性编程发挥到极致的开发者。他们编写代码的速度比其他人快得多,实施新功能时,没有人能比他们更快地完成任务。在某些组织中,管理层将这类开发者视为英雄。然而,他们留下的「风卷残云」般的痕迹,却需要其他开发者花费数倍时间去清理。 与战术性编程相对的是「战略性编程」。战略性编程需要一种投资心态:开发者必须花费时间来改进系统的设计,而不是采取最快的方式来完成当前的项目。这些投资会在短期内让我们放慢脚步,但从长远来看会加快我们的速度。 那么,正确的投资比例是多少?随着对系统和业务的不断了解,理想的设计会逐渐出现。因此,最好的方法是连续进行大量小额投资。建议将总开发时间的10%到20%用于投资。这个比例足够小,不会对日常安排产生重大影响,但又足够大,可以随着时间的推移产生重大收益。虽然项目在开始时比纯战术方案多花费10-20%的
那么,如何才能有效地管理软件的复杂性?以下是几个核心方法: **1. 抽象与信息隐藏** 管理复杂性最重要的技术之一是对系统进行良好的设计,使开发者在任何规定时间只需要面对整体复杂性的一小部分。实现这一目标的手段就是抽象。 抽象是实体的简化视图,其中省略了不重要的细节。最好的模块是那些其接口比其实现简单得多的模块——这样的模块被称为「深模块」。深模块是一个很好的抽象,因为其内部复杂性的一小部分对其用户可见。 模块的接口有两种信息:正式信息和非正式信息。接口的形式部分在代码中明确指定,可以通过对编程语言检查其正确性。接口的非正式部分包括高级行为,例如函数删除文件的事实。这些没有以编程语言可以理解或执行的方式指定,只能使用注释来描述。 实现深模块最重要的技术是信息隐藏。每个模块应封装一些知识,这些知识代表设计决策——比如如何实现TCP网络协议、如何在多核处理器上调度线程、如何解析JSON文档。这些知识都嵌入在模块的实现中,但不会出现在其接口中,因此其他模块不可见。 **2. 警惕信息泄漏** 信息泄漏是软件设计中最重要的危险信号之一。当一个设计决策
如有侵权,请联系删除。
Related Articles
-
Thu May 07 2026Anthropic发布10个金融AI智能体,华尔街震动——对万得、同花顺们来说意味着什么?
2026年5月5日晚,Anthropic一口气推出10款专门面向金融服务行业的AI智能体,涵盖银行、保险、资产管理和金融科技等多个细分场景。
-
Thu May 07 2026投资家网蒋东文受邀央视频《赢在 AI+》评委,以专业视角赋能 AI 产业创新
4月27日,投资家网创始人兼CEO蒋东文受邀担任央视频《赢在 AI》第二季专场路演评委,为创业项目提供资本与行业视角的专业点评。
-
Wed May 06 2026听完红杉 AI Ascent 2026,我把要做的 3 件事写成了一句话
在参加红杉 AI Ascent 2026 后,作者将大会的核心观点浓缩为三项可操作的行动,旨在帮助团队与公司在智能体时代更快落地并获取商业价值。
-
Wed May 06 2026Mistral AI推出Workflows:为企业AI部署打造可靠编排层
Mistral 推出名为 Workflows 的编排平台,目标是为企业级 AI 应用提供可靠的控制与数据平面支持,缩短从实验到生产的路径。
-
Wed May 06 2026OpenAI首款AI Agent手机量产提前,联发科立讯精密在列
最新分析显示,OpenAI 首款面向消费市场的 AI 智能体手机量产节奏显著提前,供应链与架构细节也逐步清晰,这代表着智能体技术正从纯软件向完整硬件生态拓展。
-
Wed May 06 2026英伟达发布首个量子AI开源模型;腾讯云开源Agent底座Cube Sandbox
本文汇总两项重要开源进展:英伟达在量子AI方向的开源尝试,以及腾讯云将 Cube Sandbox 以 Apache 2.0 协议开源,旨在为企业级 Agent 提供安全、可复现的运行环境。
-
Wed May 06 2026GPU 配角到算力中枢:AMD 如何吃下 AI 基础设施第二曲线
本文从最新财报与技术路线出发,讨论AMD如何借助CPU与加速卡的协同,将产品定位从配套角色提升为系统级算力中枢。
-
Wed May 06 2026比 OpenClaw 更火的 「Agent 员工」赛道,杀出一个新王者
文章聚焦2026年AI员工赛道的发展脉络,分析各大厂与创业公司在产品形态与战略上的差异,并点评赛道中涌现的黑马与竞争格局变化。
-
Wed May 06 2026今日AI快讯(5月6日)
本篇为5月6日AI快讯汇总,涵盖当日多项重要发布与产业动态,旨在为读者提供一站式的行业要闻速览与背景解读。
-
Wed May 06 2026美图首度披露AI生产力应用ARR:同比增长56.2%至5.8亿元
美图披露其AI生产力应用的关键业务数据,表明公司在消费级付费路径与产品化方面取得进展,具有示范意义。
-
Wed May 06 2026发布会四大看点,博云BoAgent企业级AI智能体平台发布在即
博云科技定于5月8日线上举办BoAgent企业级AI智能体平台发布会,旨在面向企业展示Agentic AI在安全、可控和可运营方面的落地能力,并推出面向多行业的解决方案与生态合作策略。
-
Wed May 06 2026一天吃透一个行业104:AI应用,附核心股票名单(收藏版)
本篇为‘一天吃透一个行业’系列第104期,聚焦AI应用领域,系统梳理细分赛道与典型公司,旨在为投资者与从业者提供可操作的研究框架与公司名单。
-
Wed May 06 2026智能体协同写入实施方案!多地明确医疗AI落地时间表(附文件)
2026年以来,多地相继发布人工智能+医疗的实施方案,明确了医疗AI智能体的试点场景和推进时间表,标志着政策推动下的落地进入加速期。
-
Wed May 06 2026欧冶半导体完成数亿元C轮融资,以"Everything+AI"夯实物理世界智能化底座
2026年5月6日,欧冶半导体宣布完成数亿元人民币C轮融资,投资方包括国投招商与地方基金,资金将用于芯片研发与产能扩张。
-
Tue May 05 2026AI存储与数据平台产业日报(2026年5月5日)
本期产业日报聚焦存储与数据平台在智能体时代的演进,重点报道 Google Cloud Firestore 的一系列更新与生态整合进展。
-
Tue May 05 2026Agent落地元年遇上消费级爆发,从聊天到做事,普通人何时用上智能体?
2026年,Agent从实验室走向消费端,开始在手机、车载和家居设备上承担实际执行任务。这一转变不仅是技术能力的提升,更牵涉到交互、隐私与商业化路径的重塑。
-
Tue May 05 2026Agent元年,中美AI战火烧到“智能体”:谁在抢走OpenAI的饭碗?
2026年被业界普遍称为AI智能体(Agent)元年,智能体正从实验性应用快速走向工程化部署,成为连接模型能力与实际业务执行的关键环节。
-
Tue May 05 2026大摩最新调查:原来这家公司正领跑中国AI赛道!
摩根士丹利的调查指出,中国AI市场正在发生显著重塑,企业在选择AI供应商与部署策略上出现新的倾向。
