“接口”比“抽象”更全面:前者可符号化;后者反而会泄漏细节!


本文提出“接口”是比“抽象”更根本的软件设计范式:真正革命性的接口完整保留系统能力,并通过结构映射极大提升操作效率,而抽象必然因能力丢失导致“泄漏”。历史上的数学符号、阿拉伯数字都是接口革命的典范。作者据此创办Overlord Systems,致力于构建下一代编程接口。

一个被严重低估的革命性概念:接口,不是抽象

为什么人类能登上月球,却还在用和30年前差不多的方式写代码?
为什么我们有了AI,但开发软件还是那么痛苦、缓慢、充满挫败感?

今天要讲的这篇文章,来自一位名叫Omar(@bloeys)的创业者兼思想者,他在过去几年里构建了一套关于“人机交互”和“编程本质”的全新认知框架——一个几乎被整个行业忽视却可能彻底改变未来软件开发范式的理念。

这是一场对“接口”(Interface)本质的哲学追问。

Omar曾深入研究计算史、数学符号演化、硬件架构,并最终创办了一家名为Overlord Systems的初创公司,致力于打造下一代软件开发“接口”。
他的核心观点非常颠覆:我们今天所依赖的所谓“编程语言”“框架”“库”,绝大多数其实是“抽象”(Abstraction),而非真正的“接口”;
而抽象的本质,是在牺牲系统能力的前提下换取短暂的便利——这就是为什么我们总在和“泄漏的抽象”(leaky abstractions)搏斗。
真正的接口,不仅不丢失能力,反而让原本“可能但痛苦”的事变得“实用甚至轻松”。

这听上去很玄?别急,往下看,你会彻底刷新对“软件”“编程”甚至“人类认知工具”的理解。

接口 vs 抽象:一场被混淆了半个世纪的战争

让我们先搞清楚一个根本问题:什么是“接口”?

作者说,它很难精确定义,但你可以“看到就知道”。
比如日历应用——你可以用滚动列表看日程,也可以用网格视图。两者功能完全一致,都能新增、修改、删除事件,但网格明显是更好的“接口”。为什么?因为它更充分地利用了现代屏幕的输出能力,再配合直观的拖拽输入(比如斜向拖动事件来同时改日期和时间),你能在一瞬间理解整个月的安排,并快速调整。

关键来了:接口本身不增加新功能,但它让“原本理论上可行但实际没人愿意做”的事情变得轻松可行。
这就像一辆性能超强的跑车,如果油门响应慢半拍、方向盘虚位大,你根本不敢在弯道全力驾驶——不是不能,而是不“实用”。

作者进一步区分了三个层级:可能(Possible)、实用(Practical)、轻松(Easy)。

比如问路:靠别人口头指路是“可能”,用老式GPS是“实用”,而用带语音输入和自动重算路径的谷歌地图就是“轻松”。
我们今天绝大多数软件,其实卡在“可能”和“实用”之间——比如改一行前端代码要等10秒编译,这既不是完全不可用,也不是真正高效。
真正的接口,目标是把事情从“可能”推向“轻松”。

而抽象呢?抽象是“隐藏细节以简化使用”,但代价是丢失能力。比如数据库ORM(对象关系映射),它让你用面向对象的方式操作数据库,看似方便,但一旦涉及复杂查询、性能优化或特殊数据类型,你就不得不绕过ORM,写原生SQL——这就是“抽象泄漏”。
因为抽象只暴露了系统的一部分,当需求超出这个子集,它就崩了。

接口则不同:它代表系统的“全部”,不隐藏、不简化、不妥协。
数学符号就是绝佳例子:用自然语言描述“二次方程求根公式”冗长又易错,而用现代符号“x = (-b ± √(b²-4ac)) / 2a”不仅简洁,还能直接进行代数操作(比如移项变号)。

这不是隐藏了数学的复杂性,而是用结构化(符号结构:一种形式化)的方式完整呈现了它。所以接口不是系统的“简化版”,它就是系统本身——只是换了一种更高效、更直观的表达方式。

历史上的接口革命:从罗马数字到数学符号

要真正理解接口的力量,我们必须回望历史。

人类最伟大的几次认知飞跃,其实都是“接口升级”。

第一个例子:从罗马数字到阿拉伯数字。
罗马数字里,XV=15,X=10、V=5,你需要心算加法;
而阿拉伯数字“15”中,“1”在十位、“5”在个位,位值制本身就编码了数值结构。

这不仅是写法不同——在罗马体系下,乘法曾是只有少数学者掌握的高深技艺,相当于今天的微积分!
为什么?因为做乘法需要反复查表、累加,极其繁琐。
而阿拉伯数字的位值结构天然支持竖式乘法,让小学生都能轻松掌握。

注意:两种体系都能表示任意整数,能力完全等价,但阿拉伯数字的“结构”映射了十进制的本质,使得“操作接口”本身变成了“计算引擎”。

第二个革命性接口:现代数学符号。
在9世纪,数学家花拉子米(Al Khwarizmi)用整段自然语言描述方程:“一个平方数加上十个根等于三十九……”——你能想象用中文句子做微积分吗?
现代符号(如∫、∑、∂)不仅压缩了信息,更重要的是,它把数学的“逻辑结构”转化为“视觉结构”。
加号移到等号另一边变减号,这个操作在符号体系中是机械的、可视的;
而在自然语言里,你得靠抽象推理。

这种结构映射让代数操作变得“可机械化”,极大降低了认知负荷。

更关键的是,它让数学从少数精英的思辨游戏,变成了普通人可学习、可操作的工具——甚至成为儿童教育的一部分。

这些例子证明:接口的升级不是“加功能”,而是通过更精准地映射系统内在结构,释放原本被低效表达所压抑的“实用能力”。

我们今天抱怨编程难,很可能不是因为问题本身复杂,而是因为我们还在用“自然语言(语义)写数学”——即用不适合表达计算本质的工具在勉强应付。

(banq注:内容与形式二分法是最基础的认知起点,但是很多人没有,人的直觉总是探究这符号代表什么意思?而不是看看符号组合、前后顺序等非内容方面的形式,注意力无法从内容陷阱里移开,掉入陷阱兔子洞而不能自拔!)

编程语言:我们最大的幻觉

现在回到编程。作者一针见血地指出:编程本质上就是数学。

图灵机是纯数学构造,所有程序理论上都能写成数学方程。编程语言和图灵机的关系,就像现代数学符号和自然语言的关系——都是同一计算本质的不同“接口”。

但这里有个陷阱:我们常把高级语言(如Python)当作“对机器语言的抽象”,其实更准确地说,它是“对图灵机的更好接口”。
为什么?
因为Python没有丢失图灵完备性(Turing Completeness)——任何图灵机能做的事,Python理论上也能做(忽略性能)。

它只是用更贴近人类思维的结构(如变量、循环、函数)来表达计算,而不是隐藏了底层细节。相比之下,真正的抽象比如某个Web框架,它可能只支持特定的路由模式或数据库操作,一旦你有特殊需求,就得“跳出框架”。

编程语言之所以成功,正是因为它是一个(相对)完整的接口:它保留了全部计算能力,同时通过语法结构(如缩进代替花括号)降低了心智负担。

但作者也承认,现有编程语言远非完美接口。比如为什么我们还要“在脑子里执行代码”来调试?为什么数据库表结构一改就牵一发动全身?为什么移动App的页面跳转逻辑不能像画流程图一样直观调整?
这些问题的根源,在于当前编程接口未能充分映射软件系统的内在结构。
我们仍在用线性文本(代码)去描述高度并行、状态复杂、交互密集的系统,这就像用文字描述一幅油画——信息完全丢失了。

真正的编程接口,应该让开发者直接操作“软件的结构”,而不是通过文本间接编码。
比如,一个理想的后端接口,可能允许你用可视化方式定义API端点、数据流、权限规则,并自动生成高效、可维护的代码——这不只是“低代码”,而是用结构化接口替代文本抽象。

接口不是黑白,而是一条光谱

作者特意提醒:不要把接口和抽象看成非黑即白。

现实中,大多数系统处于两者之间的光谱上。比如汇编语言是机器码的更好接口(用MOV代替10001001),但它对现代CPU的某些指令仍无法表达,所以对CPU来说,它又是个不完整的抽象。

阿拉伯数字和罗马数字都是“数字”的接口(都能表示任意整数),但前者远优于后者。

关键判断标准是:是否保留了系统的全部能力?是否通过结构映射提升了操作效率?越接近“完整能力+高效结构”,就越接近理想接口。
而绝大多数现代库、框架、API,其实都偏向光谱的“抽象”一端——它们为特定场景Context优化,却牺牲了通用性。
这就是为什么工程实践中总在“用框架”和“绕过框架”之间反复横跳。

作者认为,行业的问题在于:我们太习惯做“小切面抽象”(比如一个SaaS工具只解决一个痛点),而不敢去构建覆盖整个问题域的“完整接口”。因为后者需要全局视角、大量投入和长期迭代,不符合短期商业逻辑。

但历史证明,真正的范式转移,往往来自这种“大而全”的接口革命——比如关系型数据库、Unix管道、Web浏览器。所以,不要满足于做一个“更好用的ORM”,而要思考:有没有可能构建一个完全替代SQL的数据库接口?不是隐藏SQL,而是用更直观的结构(比如可视化查询图)来完整表达数据操作的所有可能?

AI也需要好接口!人类和AI的认知瓶颈是一样的

很多人以为AI(尤其是大语言模型)会自动解决软件开发的复杂性,但作者指出一个关键洞见:AI和人类一样,严重依赖它所面对的“接口”。

如果你丢给AI 100个零散的代码文件,让它“修复一个bug”,它大概率会失败——不是AI不够聪明,而是输入接口太差。
但如果你同时提供这些文件的调用关系图、UI界面截图、数据流说明,AI就能快速定位问题。(banq注:这实际提供了这些文件的更多上下文Context)

两种输入在信息量上等价,但后者是更好的“接口”。(banq注:因为有更好的Context)
这是因为LLM的认知模式和人类相似:都擅长处理结构化、上下文丰富的信息,而对碎片化、无结构的文本感到吃力。

所以,提升AI效能的关键,可能不是更大的模型,而是更好的接口设计。比如,为AI开发者设计专用的“结构化代码接口”,让代码自动附带元数据(如函数用途、调用上下文、性能特征),就能极大提升AI的理解和生成质量。

(banq注:带有总结性的元数据能构成形式,比如任何事物的修改时间是一条元数据,能够总结到当前修改状态,是否修改了?修改了多长时间?道生一,一生二,元数据包含从无到有的信号!)

这反过来也印证了作者的核心观点:接口的价值是普适的——无论使用者是人类还是AI,好接口都能放大其能力边界。未来,人机协作的效率,将越来越取决于“人-AI-系统”之间的接口质量,而非单方面提升某一方的智能。

作者在做什么?打造下一代编程接口

基于这套哲学,作者Omar创办了Overlord Systems,目标是构建下一代Web开发接口。他们从后端和云基础设施切入,试图用一个全新的交互范式替代现有的代码+配置文件模式。

据他透露,他们的概念验证(PoC)产品已经能让AI代理完成某些任务时,比当前流行的Cursor(AI编程助手)快2倍,且只用1/10的token——这正是因为他们的系统为AI提供了更结构化、更完整的接口。

虽然具体细节未公开,但可以推测,他们的接口可能整合了代码、架构图、数据模型、部署配置等多维信息,形成一个统一的可操作视图。作者强调,这不是“低代码”或“无代码”的简单延续——那些本质上还是抽象(隐藏了复杂性),而他们的目标是构建一个不丢失任何能力的完整接口。

更激进的是,他认为如果新接口需要新硬件支持(比如非冯·诺依曼架构),那就该重新设计硬件。因为接口的终极目标是释放系统的全部潜力,而不是迁就现有技术的限制。这种“接口先行,硬件适配”的思路,令人想起苹果M系列芯片——为优化特定软件体验而定制硬件。

Overlord Systems目前处于预种子轮阶段,正在开发公开测试版。如果你认同“编程需要一场接口革命”,不妨关注他们的进展。



极客一语道破
接口定义很难,正如形式这个词语定义很难一样,形式是内容以外的一切,所以无法定义,因为它可能是无限,能对无限定义吗?
只能通过排斥法定义,形式不是内容,是内容以外的。

接口也是,接口是内容抽象以外的一切,有时表现为结构形式,有时表现为数字形式,有时表示图形的形式,有时表现为符号形式。

既然接口类似形式,那么可能两者是一回事,不是指鹿为马。
接口也能提供形式化验证, 这样就不必编写代码时还要编写一套形式验证说明!就像编写程序时就不必编写测试程序,如同Rust代码只要编译通过,逻辑上没有大问题!

接口是形式,接口比抽象就更难了,抽象是基于限定上下文,严格属于某个场景陷阱,而接口或形式不是试图去除上下文限制,而是用元数据描绘上下文限制,比如修改时间这个属性就很具有接口形式感,任何变动场景都会记录修改时间,我们就能通过简单一个字段代表变动场景,是不是场景上下文的抽象呢?不是内容抽象哦

信息如果分两种:汇总和明细,汇总就是明细的累积到当前的结果,我们通常只记录结果,不记明细,这样少了真相来源,这个汇总结果是怎么汇总来的呢?

但是如果只有明细,没有汇总,每次不能一目了然,这就太具象。如果只有汇总,没有明细就太抽象。

所以,汇总是明细的接口,元数据,信号特征,设计一个完整系统 汇总和明细不可少,明细是真正内容,汇总是内容之外的形式。

“接口”类似“界面”,产品经理设计的“界面”,“界面/接口”是产品的门面!

接口/界面这个符号形式在自然选择中也是存在:达尔文的自然选择只是白手套:真正大BOSS是“自然诱导”!  ,自然进化出用一套网络接口/界面来应对外部环境的变化,并且慢慢地学习如何适应环境Context变化。