软件抽象的哲学
几十年来,我们一直在尝试编写更少的代码。
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
软件工程的历史通常被讲述为硬件突破和语言发布的时间线。但在技术里程碑之下,隐藏着一个更深层次、更人性化的故事:开发者日常认知体验的演变。每当行业攀升抽象阶梯时,同样的社会学和心理学戏剧就会上演。
首先是恐慌。那些为自己在机器底层领域所获得的精湛技艺而自豪的资深从业者警告说,新的抽象"太慢"、"不可靠",或者是"业余爱好者"的工具。
然而,历史通过经济学家所说的"补偿理论" consistently 证明这种恐慌是错误的。抽象并没有摧毁开发者;它解放了开发者。通过自动化机械性工作,这些转变将人类的能动性向上游转移——压缩反馈循环,将主要工程瓶颈从语法执行转移到逻辑编排,并完全重新定义了"编写代码"的含义。
为了降低恐慌水平,让我们沿着历史长河漫步,探索类似的范式转变——以及它们对软件开发者的工作和开发者本身的影响。
1、第一次转变
在20世纪50年代早期,编写软件是一种激烈的、物理性的翻译行为。程序员生活在硅片内部,手动将代数公式映射为原始二进制操作码、内存地址和CPU寄存器分配。
FORTRAN(1954年)是第一次尝试抽象编程并使其变得更容易。它将开发者的核心任务从硬件指令转变为逻辑意图。科学家或工程师可以编写50行自然的数学公式,而不是编写1000条繁琐的汇编指令,然后让编译器负责将其翻译成机器语言。

通过自动化机器翻译的机械步骤,编译器并没有让程序员失业。相反,它爆发了整个行业,将开发者的工作从与硅片限制的斗争转变为专注于算法设计。
2、第二次转变
即使编译器成熟之后,开发者的日常工作流程仍然高度碎片化。几十年来,编写、编译和运行代码的过程是一系列孤立的、慢动作的任务,不断打断开发者的注意力。
在20世纪80年代早期,开发者的工作流程是基于磁盘的,而且非常繁琐。你在基本的文本编辑器中编写代码,将其保存到软盘上,关闭编辑器,从另一个软盘加载编译器进行多次处理,加载单独的链接器,最后运行可执行文件。
这个循环在1983年11月被Anders Hejlsberg创建的Turbo Pascal打破了。通过将编辑器、超快编译器和链接器完全整合到RAM中,Turbo Pascal将五分钟的磁盘等待时间压缩成一瞬间的"眨眼完成"体验。

这是向"IDE"(集成开发环境)工作的开始,一种为开发者工作流程提供的一体化解决方案。
从缓慢的、基于磁盘的软盘时代到Turbo Pascal闪电般的内存编译的转变,并没有让程序员过时。相反,它引发了大规模的招聘热潮,并从根本上重新定义了成为软件开发者的含义。
3、第三次转变
现在,当开发者可以在IDE中编写抽象代码、编译和执行它时,重点已经转移到扩展开发者的工作上。在AI出现之前,我们一直处于这种转变中。这里有许多贡献因素,但它们的重点主要是——编写更少的代码,管理更少的东西。让我们探索其中的一些。
垃圾回收器
也许在软件开发历史上,最令人紧张的界限是堆内存管理。在像C和C++这样的系统语言中,开发者必须充当自己的物理内存保管员,显式地分配和释放他们程序使用的每个字节的RAM。内存管理的引入消除了开发者的这种心理负担,也最小化了跟踪手动内存分配和释放时的人为错误。
自动完成
随着软件复杂性的增长,主要的认知约束从原始的反馈循环转变为导航庞大的、扩展的API和类库。为了解决这个问题,微软在1996年引入了IntelliSense(智能代码补全)。
在IntelliSense之前,开发者的桌子上堆满了六英寸厚的系统手册。如果你无法回忆起函数的确切名称或参数,你必须停止编写,翻阅物理书籍,或者挖掘离线文档。
随着实时、弹出式自动补全的引入,软件在文本编辑器内直接变得自我文档化。

外部依赖
虽然编译器和IDE改变了开发者编写代码的方式,但另一个范式转变从根本上改变了他们必须编写的代码量。软件开发从自定义、自包含的创作文化向全球互联组装文化的演变,可以说是AI之前开发者生产力最激进的转变。
集中式包管理器和在线注册表的出现——从1995年Perl的CPAN开始,扩展到2002年Java的Maven,最终在2010年达到JavaScript的npm——将代码共享变成了一个实用工具。通过单个终端命令,开发者可以立即访问全球集体的预编写逻辑大脑。
4、第四次转变
正如编译器使寄存器管理过时一样,IDE消除了手动编译的延迟,包注册表将自定义基础转化为组合的乐高积木,AI现在正在自动化样板语法和标准代码模式的生成。开发者的界面正在经历哲学家所说的工具性消解——从输入单个按键转变为表达整体意图和策划代码库。
每次范式转变都系统地剥离了编码的物理和机械性工作,将开发者的角色推向认知栈的更高层。我们已经从如何编写指令转变为我们想要构建什么。

/goal
双关语。
作为开发者,我们需要问自己——"我们输出的最终状态是什么?"答案是"一个产品"。我们擅长创建其他人可以使用的产品。我们的目的从来不只是编写代码。
我觉得我现在实践的是真正的软件工程,因为我已经将手动代码编写外包给了AI。我正在思考软件如何构建,应该使用哪些技术,它应该如何与其他组件交互,哪些层应该从实际业务逻辑中抽象出来,等等。你知道,你在计算机科学学位期间学习过但之后再也没有想过的课程。它们现在正在全面发挥作用。
所以——不,我不认为AI会杀死软件工程——但它将改变工程师所需的技能。就像IDE让一些技能过时并要求我们获得新的技能一样,就像软件包装做了同样的事情一样——就像下一次进化将不可避免地让我们再次重新学习一样。
原文链接:The Philosophy of Software Abstraction
汇智网翻译整理,转载请标明出处