原视频:Andrej Karpathy: Software Is Changing (Again)
2025年6月17日,Andrej Karpathy 大佬分享了面向Software 3.0的观点,非常有启发。我从数据领域视角,解读从software 1.0到2.0,再到3.0的演变,并给出相关创业的战略建议。
摘要
软件开发领域经历了深刻的变革,从软件1.0到软件3.0的演进标志着这一变化。在这一进程中,数据的角色发生了根本性的转变。最初,数据作为人类编写的代码的静态输入,如今已上升为机器学习系统的核心“代码”,最终成为自我进化、自主AI实体的不可或缺的燃料。本报告详细探讨了数据在各个不同软件范式中的性质、处理和管理如何演变,突出了数据在现代技术生态系统中日益抽象化、自动化和关键性的趋势。总体观察表明,软件范式的演变与数据性质、处理和管理的变化密切相关,朝着日益抽象化、自动化和关键性的方向发展。
引言:软件与数据的范式转变
软件开发的过程可以划分为三个不同的进化阶段:软件1.0、软件2.0和软件3.0。每个阶段代表了软件在构思、构建和操作方式上的重大飞跃,而数据的角色也经历了平行且同样具有变革性的演变。
软件1.0体现了传统编程,其特点是人类编写的源代码被精心编译成执行特定任务的二进制可执行文件。1 这种范式依赖于明确的规则和手动流程,每条指令都由开发人员手工编码。2
机器学习的出现带来了软件2.0,这一概念由Andrej Karpathy明确阐述。在这一范式中,软件不再由人类逐行明确编写,而是由机器学习模型隐式生成。开发人员的主要角色从设计明确的编程算法转变为设计和策划大型数据集。1 “代码”本身以一种更抽象的、“对人类不友好的语言”表达,例如神经网络的复杂权重。4
软件3.0代表了一个新兴的时代,人工智能积极参与整个软件创建生命周期。这包括基于用户意图和现实反馈自主地编写、调试和优化软件。3 这一阶段设想软件公司为复杂的、相互交织的AI代理系统,每个代理都有独特的专长,共同协作并自主地实现共同的组织目标。6 这种跨范式的进展从根本上说是数据如何被感知、利用和管理的方式的转变。数据从软件 1.0 中代码的输入变成了软件 2.0 中代码的本质,最终成为软件 3.0 中自主软件实体的驱动因素。这种演变反映了算法、计算能力和数据之间的动态相互作用,其中数据的贡献在塑造人工智能的能力方面变得越来越重要。随着“代码”的性质变得不那么人类可读,更加抽象——从显式的代码行到神经网络权重,再到自然语言提示——显式指令越来越多地被从数据中隐式学习所取代。这意味着数据不再仅仅是输入;它是程序逻辑的基本来源。因此,收集、处理和管理大量复杂数据集的能力既成为这些进展的瓶颈,也成为这些进展的主要推动因素。编程范式越抽象,数据管理就越重要和复杂,成为软件行为的核心决定因素。
软件 1.0:传统编程中的数据
软件 1.0 体现了软件开发中的传统方法,其中每一行代码都由人类开发人员手动编写。这种范式本质上是基于规则和确定性的,意味着人类编写了成千上万行明确的代码,以指导计算机在各种可预见的情况下如何行为。这种方法优先考虑可预测性和控制,测试、部署和监控等流程通常需要大量的人工干预。软件 1.0 应用的常见例子包括广泛使用的工具如 Microsoft Word 和 Excel,企业系统如 Salesforce CRM 和 Workday HR,基础银行和主机系统,政府基础设施,以及定制开发的企业资源规划(ERP)系统。
软件 1.0 中的数据特征
在软件 1.0 中,数据主要是结构化的,存储在关系数据库和电子表格等格式中。常见的数据类型包括用于整数的整数、用于小数值的浮点数、用于字符序列的字符串,以及用于逻辑真/假状态的布尔值。传统数据库构成了软件 1.0 应用程序的支柱,它们是为较小、更静态的数据集设计的。数据通常是明确定义的,符合特定的模式和格式。
软件 1.0 中的数据处理方法
软件 1.0 中的数据处理是通过明确的编程指令精心设计的。例如,1999 年首次发布的跨行业数据挖掘标准流程(CRISP-DM)为数据挖掘项目提供了一个标准化框架。该框架包括业务理解、数据理解、数据准备(涉及选择、清理、构建、集成和格式化数据)、建模、评估和部署等不同阶段。为了确保这些