加载中...

本篇要回答的问题:从汇编到今天,编程语言沿着哪条线进化?"面向连接"到底是什么?语言的选择对架构又意味着什么?

上一讲讲了汇编——编程语言的诞生。本讲继续往上,把视野从"语言诞生"拉到"语言进化"。汇编是软件工程师这个分工出现的标志;但若只把编程语言看作一门专业技能,其实低估了它的革命性。

软件是活的书籍

一个升华的观点:软件是活的书籍,是人类知识传承能力的一次伟大进化。书籍能做的,软件都能做且做得更好:

软件强于书籍之处 含义
表达方式多样 不只文字,还有超链接、声音、动画、视频、实时交互反馈
对技术的现场还原 软件本身可以是技术的一部分,传承精确,失传概率大降

由此可预判一个未来:每个小孩的基础教育中一定会有编程教育,就像学物理和数学一样。

编程范式的进化

编程语言只有六十多年历史,迭代却远快于自然语言。从思想表达角度看四种范式:

范式 核心主张 代表语言
过程式 一条条命令执行;核心是结构体 + 过程(函数) Fortran、C/C++、JS、Go
函数式 变量不可变、函数尽量无副作用 → 错更少、质量更高 Haskell、Erlang
面向对象 引入契约,用对象封装使用界面,不主张全局函数 Java、C#、C++、Go
面向连接 朴素的组合思想——研究代码与代码怎么组合 Go

函数式相对小众:变量不可变意味着改一个数组元素要复制整个数组,得用平衡二叉树重做"数组"——想用它,数据结构这门课得重修

展开精读:四种范式各自的推理链(过程式为什么核心恰好是「结构体 + 过程」、函数式那两条禁令
为什么能作废整套数据结构、继承凭什么算过度设计、「面向连接」到底在说什么),
见同目录 精读-04-四种编程范式.md

从"面向对象"到"面向连接"

面向对象的核心是引入契约,基于对象抽象和封装使用界面,两大优点:

优点 含义
清晰的使用界面 某类型有哪些方法一目了然
信息的封装 不主张绕过接口侵入内部实现,提升可复用性

再加上接口,优雅地实现了过程式很费劲才能做到的多态

继承被点名为过度设计:它带来编码便捷,也带来"组合还是继承"的心智负担。最完美的答案是 Go 给的——放弃继承,全面强化组合

Go 自称是面向连接的语言。所谓面向连接就是朴素的组合思想,关键在于:契约不只对象需要,语言设计的方方面面都需要契约

连接契约 约束了什么 Go 的做法
代码规范 人与人的连接 从语言设计上消灭最易起争议的地方,专注意图表达
消息传递 进程(goroutine)与进程的连接 内建 channel,且类型安全,降低犯错机会

这一节的钥匙是「契约」——原文反复用却没定义。展开见 精读 · 第四部分

其他方面的进化

除范式外,语言还在工程化能力上进化:包(发布单元)、版本(依赖管理)、文档生成、单元测试。从执行器行为看分三类:

执行方式 代表
编译为可执行程序 Fortran、C/C++、Go
编译为跨平台字节码 + 虚拟机执行 Java、Erlang
直接解释执行 JavaScript(现多数内部仍有字节码虚拟机提性能)

语言对架构的影响是什么?

回到第 01 讲的架构图,简化后用三种颜色表示不同层次依赖:

简化后的架构依赖层次

颜色 依赖层次
淡紫色 硬件依赖——程序工作的物理基础
淡绿色 软件依赖——程序工作的生态环境
桔色 库/源代码依赖——程序本身的组成(框架基础库 + 业务架构)

唯技术论看:业务架构怎么拆模块由业务需求决定,与语言无关,语言只影响模块规格的描述语法(用语言无关接口,还是用开发语言描述——本着"如无必要勿增实体",作者倾向后者)。

但实践中语言选择极其关键

影响维度 原因
开发效率 不同语言的社区资源、沉淀的框架与基础库差异巨大
后期维护 语言有生命周期,会走向衰落——选熟悉的还是选面向未来的,是两难

总结

本讲抛开语言发展史,从编程范式演进的角度谈进化:过程式、函数式、面向对象,重点落在 Go 带来的面向连接思想,并与面向对象做了对比。

先把"是什么"回答清楚

概念 一句话说明
软件是活的书籍 知识传承能力的进化——表达更多样、还原更精确
四种范式 过程式 / 函数式 / 面向对象 / 面向连接
面向连接 朴素的组合思想,把契约推广到语言每个角落
继承 过度设计,组合才是复合对象的本道

一句话速记

语言进化的方向是"更接近人的思维 + 更强的契约/组合";语言与业务架构理论无关,实践中却决定效率与维护成本。

思考题

新范式的出现越来越难,且新思潮容易"用力过猛"(继承就是例子)。要想突破,需要批判性思维。在你熟悉的语言里,有没有某个被奉为"最佳实践"的特性,其实也是一种过度设计?

公告栏
这是我的个人知识库。
记录技术,也记录生活 —— 读过的、试过的、想明白的,都堆在这儿。
最新文章
网站资讯
文章数目 :
5
已运行时间 :
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
全局知识图谱
当前页面 已访问 文章 标签
ESC 关闭 · 滚轮缩放 · 拖拽移动 · Ctrl+G 开关