software 1.0 vs software 2.0 vs software 3.0
文章目录
背景
最近花时间学习了Andrej Karpathy最新的分享:Software Is Changing (Again)。
这里面的知识点很多,干货十足。
这里先从software 1.0 vs software 2.0 vs software 3.0开始。
如何比较
我们将从以下五个角度继续细化剖析:
-
编程范式:谁在“写程序”?程序长什么样?
-
交互方式:人与计算机如何沟通?
-
学习方式:软件是如何学习?
-
泛化能力:能做哪些任务?需不需要从头训练?
-
系统架构与输入输出形式:系统input、process、output之间的差异。
编程范式(Programming Paradigm)
特征 | Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|---|
编程者(人)角色 | 明确写出所有逻辑(if/else等) | 准备数据并设计模型结构 | 提示工程师,编写自然语言提示 |
程序的本质 | 人写的代码(deterministic) | 参数训练出的权重(non-symbolic) | Prompt 作为控制逻辑(可变,灵活) |
表达能力 | 有限:只能表示明确规则 | 中:可以逼近复杂模式 | 高:语言可描述几乎所有逻辑与上下文 |
从“利用编程语言写规则”转变为“利用自然语言描述任务”: 代码code→权重weight→提示词Prompt
交互方式(Human-Computer Interaction)
特征 | Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|---|
交互接口 | 编译器、IDE、命令行 | 调用API、训练模型 | 自然语言对话界面、提示输入框 |
任务分配方式 | 人全权指定 | 人提供目标+数据,模型自学习 | 人通过语言表述意图,模型自适应 |
实时反馈性 | 低 | 低(需重训练) | 高(可即时理解和响应) |
人类指令变得越来越像“对话”而不是“控制”: 编程语言的控制(control)→抽象API的调用(call)→自然语言的对话(Chat)
学习方式(Learning)
特征 | Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|---|
学习来源 | 无,全部人类输入 | 从大量数据中自动学习 | 通过大量语料预训练,再用少量示例调整 |
是否可迁移 | 否,程序只做一件事 | 否,模型常常为一个任务设计 | 是,同一LLM可处理多任务,零样本或少样本即可 |
对错误的反应 | 人修改代码 | 重新训练模型 | 只需修改提示词(prompt)即可尝试修复 |
从“静态逻辑”变为“动态适应”: 修改代码 → 训练模型 → 修改提示词
泛化能力(Generalization)
特征 | Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|---|
跨任务能力 | 无,每写一个程序解决一个问题 | 弱,迁移学习困难 | 强,同一模型可做总结、翻译、推理、编程等任务 |
多语言、多模态 | 支持差,需重新开发 | 可能支持部分 | 强,多语言+多模态+多任务融合 |
从具体到通用: 为具体任务建模 → 为一类任务训练模型 → 提供通用模型实现提示词完成各种任务
系统结构与输入输出(System Architecture & IO)
特征 | Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|---|
系统结构 | 冯·诺依曼结构 + 手写程序 | 神经网络结构(如CNN、RNN) | Transformer结构 + 超大参数(>100B) |
输入形式 | 明确命令、变量 | 向量表示(one-hot/bag-of-words) | 自然语言/图像/语音等各种多模态输入 |
输出形式 | 控制信号、字符串、图形界面 | 类别、概率、数值等 | 文本、代码、图像描述等多样信息 |
从指令到自然语言: 结构化指令 → 向量(矩阵)输入/输出 → 自然语言输入输出
总结
Software 1.0:人类 → 规则 → 程序 → 计算机
Software 2.0:人类 → 数据 → 训练 → 神经网络
Software 3.0:人类 → Prompt → LLM
文章作者 沉风网事
上次更新 2025-06-23