Skip to content

软件工程基本功:六大核心观念

来源:X @123olp,17.4K Views


摘要

软件工程的基本功不是什么具体技术,而是六种看待问题的视角——它们构成了一个成熟软件工程师的思维框架。

观念核心问题目标
复杂性观这个复杂来自哪里?减少偶然复杂性,管理本质复杂性
变化观什么会变?变化成本是多少?让变化成本可控
协作观团队如何高效协作?降低理解、沟通、集成、交接成本
反馈观错误多久能被發現?尽早发现错误,缩短反馈周期
质量观什么是"够好"的代码?可靠性、安全性、可维护性、性能、兼容性、可用性
经济观这个决策的长期成本是什么?用最小长期成本创造最大可持续价值

这六种观念不是孤立存在的——它们相互关联,共同构成软件工程的决策坐标系。一个技术决策,通常同时涉及多个观念。


思维导图


1. 复杂性观

复杂性是软件工程的第一挑战。但不是所有复杂都来自同一个地方。

本质复杂性(Essential Complexity):问题本身固有的复杂,无法消除。

  • 问题本身逻辑复杂
  • 多方需求相互冲突
  • 领域规则头绪众多

偶然复杂性(Accidental Complexity):由我们的选择带来的复杂,可以避免。

  • 工具选型不当
  • 流程设计繁琐
  • 历史包袱堆积
  • 糟糕的系统设计

区分这两种复杂性非常重要:消除偶然复杂性不叫偷懒,叫专业。把时间花在解决本质复杂性上,而不是被自己造成的复杂性困住。


2. 变化观

软件不是静态的,它活在持续的变化中。

需求会变:业务方向调整、用户反馈、新市场机会,都带来新的需求。

代码会老化:随着时间推移,代码越来越难理解、越来越难修改。

架构会被业务压力侵蚀:为了赶进度而做的临时方案,日积月累成为债务。

应对变化的核心不是"预测未来",而是让变化成本可控。这意味着:

  • 好的架构是低耦合的,改一个模块不影响其他模块
  • 好的代码是可读的,让后来者能快速上手
  • 好的文档是存在的,记录了决策和 rationale

3. 协作观

软件是多人长期协作的产物,不是孤胆英雄的个人作品。

代码是给人读的:代码不只是给机器执行,更是给未来的自己和同事读的。一段代码写完,三个月后自己可能已经不记得为什么这么写。

协作成本是真实成本:理解成本、沟通成本、集成成本、交接成本——这些不是"软技能",是直接影响开发效率和产品质量的硬成本。

降低协作成本的实践:

  • 代码规范:风格统一减少理解摩擦
  • Code Review:用团队的眼睛弥补个人的盲区
  • 文档沉淀:把决策写下来,让后来者不用重新推理
  • 接口契约:模块之间用清晰的接口隔离,让独立演进成为可能

4. 反馈观

软件工程的一切努力,都指向一个目标:尽早发现问题

错误发现得越晚,修复成本越高。这是软件工程最核心的定律之一。

测试是反馈:单元测试验证最小模块的正确性,集成测试验证模块之间的协作,系统测试验证端到端的业务流程。

代码评审是反馈:在代码合并之前,用团队的力量发现潜在问题。评审发现的不仅是 bug,还有设计问题、代码坏味道、知识传递。

用户行为是反馈:埋点数据告诉你用户实际怎么用你的产品,哪些功能是高频的,哪些是几乎不用的。

监控告警是反馈:线上问题不是靠用户投诉发现的,而是靠监控指标异常自动触发的。

反馈周期的长短,直接决定软件的质量和团队的效率。越早发现问题,修复成本越低。


5. 质量观

"能跑"不等于"质量好"。软件质量是一个多维度的概念。

ISO/IEC 25010:2023 将软件产品质量定义为九大质量特征:

  • 功能适用性:软件是否提供了所需的功能
  • 性能效率:响应时间、吞吐量、资源利用率
  • 兼容性:与其他系统共存的能力
  • 互操作性:与其他系统交互的能力
  • 安全性:保护数据和系统不受侵害
  • 可靠性:在规定条件下维持功能的能力
  • 可维护性:易于修改和修复
  • 可移植性:从一个环境迁移到另一个环境的能力
  • 可用性:用户能有效使用系统的能力

质量不是某一阶段的事情,而是持续的事情。不是在发布前集中测试一次,而是在整个开发过程中持续关注。


6. 经济观

软件工程最终是一个经济活动——用有限的资源,创造最大的可持续价值。

技术决策有成本:选择什么技术栈、采用什么架构、设计什么流程,都涉及成本。不是技术越新越好,不是方案越复杂越专业,而是合适的成本解决合适的问题

技术债不是道德失败,而是未来成本:技术债的存在是正常的,不是谁的错。问题是技术债会累积利息——欠得越多,以后每次改动成本越高。管理技术债的核心是意识到它的存在,有计划地偿还

架构是对未来变化的下注:今天的架构决策,锁定了未来变化的方向和成本。选择一个能适应多种可能性的架构,还是为当前需求优化但难以扩展的架构,这是一个经济决策。

软件工程的经济观教我们:不要只想着"现在怎么做",要想着"未来怎么改"。最低成本不是不做任何事情,而是让未来的变化成本最小化。


六种观念的协同

这六种观念不是孤立存在的,它们共同构成了软件工程的决策坐标系。

举例来说:

考虑一个技术选型决策

  • 复杂性观:这个方案会增加还是减少系统的复杂?
  • 变化观:这个选择对未来变化是友好还是限制?
  • 协作观:团队能掌握这个技术吗?交接成本高吗?
  • 反馈观:这个技术有好的测试和监控生态吗?
  • 质量观:这个选择对系统的可靠性、安全性有什么影响?
  • 经济观:这个决策的长期成本是什么?投入产出比合理吗?

六个角度都问一遍,做出的决策通常比只凭直觉做的更稳健。


结语

软件工程的基本功,不是某个框架、某门语言、某个工具,而是用正确的观念看待问题

复杂性观让你不浪费精力在偶然复杂性上;变化观让你为未来留有余地;协作观让你不陷入个人英雄主义;反馈观让你尽早发现问题;质量观让你不止步于"能跑";经济观让你做出可持续的决策。

这六种观念不是"知道了就行"的知识点,而是需要在实践中反复验证、逐渐内化的思维习惯。

Released under the MIT License.