# 🧭 编程之道 > 绝利一源,用师十倍。三返昼夜,用师万倍。 一份关于编程本质、抽象、原则、哲学的高度浓缩稿 它不是教程,而是“道”:思想的结构 --- # 1. 程序本体论:程序是什么 - 程序 = 数据 + 函数 - 数据是事实;函数是意图 - 输入 → 处理 → 输出 - 状态决定世界形态,变换刻画过程 - 程序是对现实的描述,也是改变现实的工具 **一句话:程序是结构化的思想** --- # 2. 三大核心:数据 · 函数 · 抽象 ## 数据 - 数据是“存在” - 数据结构即思想结构 - 若数据清晰,程序自然 ## 函数 - 函数是“变化” - 过程即因果 - 逻辑应是转换,而非操作 ## 抽象 - 抽象是去杂存真 - 抽象不是简化,而是提炼本质 - 隐藏不必要的,暴露必要的 --- # 3. 范式演化:从做事到目的 ## 面向过程 - 世界由“步骤”构成 - 过程驱动 - 控制流为王 ## 面向对象 - 世界由“事物”构成 - 状态 + 行为 - 封装复杂性 ## 面向目的 - 世界由“意图”构成 - 讲需求,不讲步骤 - 从命令式 → 声明式 → 意图式 --- # 4. 设计原则:保持秩序的规则 ## 高内聚 - 相关的靠近 - 不相关的隔离 - 单一职责是内聚的核心 ## 低耦合 - 模块如行星:可预测,却不束缚 - 依赖越少,生命越长 - 不耦合,才自由 --- # 5. 系统观:把程序当成系统看 ## 状态 - 所有错误的根源,不当的状态 - 状态越少,程序越稳 - 显化状态、限制状态、自动管理状态 ## 转换 - 程序不是操作,而是连续的变化 - 一切系统都可视为: `output = transform(input)` ## 可组合性 - 小单元 → 可组合 - 可组合 → 可重用 - 可重用 → 可演化 --- # 6. 思维方式:程序员的心智 ## 声明式 vs 命令式 - 命令式:告诉系统怎么做 - 声明式:告诉系统要什么 - 高层代码应声明式 - 底层代码可命令式 ## 规约先于实现 - 行为先于结构 - 结构先于代码 - 程序是规约的影子 --- # 7. 稳定性与演进:让程序能活得更久 ## 稳定接口,不稳定实现 - API 是契约 - 实现是细节 - 不破坏契约,就是负责 ## 复杂度守恒 - 复杂度不会消失,只会转移 - 要么你扛,要么用户扛 - 好设计让复杂度收敛到内部 --- # 8. 复杂系统定律:如何驾驭复杂性 ## 局部简单,整体复杂 - 每个模块都应简单 - 复杂性来自组合,而非模块 ## 隐藏的依赖最危险 - 显式 > 隐式 - 透明 > 优雅 - 隐式依赖是腐败的起点 --- # 9. 可推理性 - 可预测性比性能更重要 - 程序应能被人脑推理 - 变量少、分支浅、状态明、逻辑平 - 可推理性 = 可维护性 --- # 10. 时间视角 - 程序不是空间结构,而是时间上的结构 - 每段逻辑都是随时间展开的事件 - 设计要回答三个问题: 1. 状态由谁持有? 2. 状态何时变化? 3. 谁触发变化? --- # 11. 接口哲学 ## API 是语言 - 语言塑造思想 - 好的接口让人不会误用 - 完美接口让人无法误用 ## 向后兼容是责任 - 破坏接口 = 破坏信任 --- # 12. 错误与不变式 ## 错误是常态 - 默认是错误 - 正确需要证明 ## 不变式保持世界稳定 - 不变式是程序的物理法则 - 明确约束 = 创造秩序 --- # 13. 可演化性 - 软件不是雕像,而是生态 - 好设计不是最优,而是可变 - 最好的代码,是未来的你能理解的代码 --- # 14. 工具与效率 ## 工具放大习惯 - 好习惯被放大成效率 - 坏习惯被放大成灾难 ## 用工具,而不是被工具用 - 明白“为什么”比明白“怎么做”重要 --- # 15. 心智模式 - 模型决定理解 - 理解决定代码 - 正确的模型比正确的代码更重要 典型模型: - 程序 = 数据流 - UI = 状态机 - 后端 = 事件驱动系统 - 业务逻辑 = 不变式系统 --- # 16. 最小惊讶原则 - 好代码应像常识一样运作 - 不惊讶,就是最好的用户体验 - 可预测性 = 信任 --- # 17. 高频抽象:更高阶的编程哲学 ## 程序即知识 - 代码是知识的精确表达 - 编程是把模糊知识形式化 ## 程序即模拟 - 一切软件都是现实的模拟 - 模拟越接近本质,系统越简单 ## 程序即语言 - 编程本质是语言设计 - 所有编程都是 DSL 设计 ## 程序即约束 - 约束塑造结构 - 约束比自由更重要 ## 程序即决策 - 每一行代码都是决策 - 延迟决策 = 保留灵活性 --- # 18. 语录 - 数据是事实,函数是意图 - 程序即因果 - 抽象是压缩世界 - 状态越少,世界越清晰 - 接口是契约,实现是细节 - 组合胜于扩展 - 程序是时间上的结构 - 不变式让逻辑稳定 - 可推理性优于性能 - 约束产生秩序 - 代码是知识的形状 - 稳定接口,流动实现 - 不惊讶,是最高的设计 - 简单是最终的复杂 --- # 结束语 **编程之道不是教你怎么写代码,而是教你如何理解世界** 代码是思想的形状 程序是理解世界的另一种语言 愿你在复杂世界中保持清晰,在代码中看到本质