AI改变我们的编程方式
8 min read

AI改变我们的编程方式

本文围绕特斯拉前AI总监Andrej Karpathy的“软件3.0”理念,探讨AI如何颠覆传统编程。开发的核心正从编写代码,转变为用自然语言与AI协作。这不仅催生了“提示工程”等新技能,更开启了编程民主化的新时代。探讨了开发者角色如何转变,以及未来人机协作将是何种面貌
AI改变我们的编程方式
Photo generated by Gemini

延续上一篇关于AI的思考,作为程序员最关心的编程范式的变化,我打算看一下业界有哪些思考和趋势。

这篇文章主要是围绕Tesla前AI总监Andrej Karpathy关于软件3.0的观点展开的。

什么是软件3.0

Andrej Karpathy提出软件开发的演进过程可以被划分为三个主要阶段,即Software 1.0、Software 2.0和Software 3.0,它们代表了编程思想和实现方式的根本性转变。

特性 Software 1.0 (传统软件) Software 2.0 (AI 软件) Software 3.0 (LLM 驱动的软件)
核心思想 明确的指令 (Explicit Instructions) 从数据中学习 (Learning from Data) 与通用模型对话 (Interacting with a General Model)
“代码”是什么? 人类编写的源代码 (C++, Python) 神经网络的权重 (Weights) 自然语言提示 (Prompts)
如何“编程”? 程序员在开发环境中编写代码 工程师用海量数据训练模型 用户通过对话、提问、下指令来引导模型
开发者角色 软件工程师、程序员 机器学习工程师、数据科学家 所有人、提示工程师、AI 应用开发者
典型例子 计算器、操作系统、数据库 图像识别、语音识别、推荐系统 ChatGPT、Copilot (代码助手)、Midjourney (AI绘画)
优点 精确、可靠、行为可预测 擅长处理模糊、复杂的模式识别问题 开发速度极快、门槛极低、知识广博
缺点 僵化、无法处理模糊问题 “黑箱”,需要海量数据,可能产生偏见 可能会“幻觉”(一本正经胡说八道)、依赖大公司、有安全风险

Software 1.0:传统编程

这是我们最熟悉的软件开发模式。程序员使用Python、C++等形式化的编程语言,一行一行地编写明确的指令来告诉计算机如何执行任务。例如,特斯拉自动驾驶系统中就包含大量的C++代码。这种模式的特点是逻辑精确、行为可预测。

Software 2.0:神经网络编程

Software 2.0的“代码”不再是人类编写的指令,而是神经网络的权重。开发者通过收集和标注海量数据,使用梯度下降等优化算法来“训练”一个神经网络模型。模型从数据中自动学习规律和特征,例如用于图像识别的AlexNet。在特斯拉自动驾驶系统中,神经网络就逐渐取代了传统的C++代码。

Software 3.0:自然语言编程

这是最新的范式,其核心是大型语言模型(LLMs)。开发者不再编写传统代码或训练专门的模型,而是通过自然语言(如英语)编写提示词(Prompts)来与一个强大的、预先训练好的通用LLM进行交互,引导它生成所需的功能或代码。例如,要完成一个情感分类任务,开发者可能只需向LLM提供几句话的描述和几个示例即可。

编程范式的演进

Software的三个阶段是演进关系而非完全取代。Software 1.0是基础,提供精确控制;Software 2.0解决了1.0难以处理的模糊和感知问题;而Software 3.0则建立在2.0的成果(LLMs)之上,将编程的接口从形式化语言转变为自然语言,极大地降低了门槛。它们之间的核心区别在于“代码”的形态和“编程”的方式:从人类编写指令,到用数据优化权重,再到用语言引导模型。

这个变化最酷的地方在于,开发工作的核心,从“告诉电脑怎么做”变成了“告诉AI我想要什么”。在AI的加持下,开发者不用再苦哈哈地抠每一行代码逻辑了,只需要写出清晰、全面的目标说明(Specifications)和提示(Prompts),告诉AI我们期望软件能实现什么功能。然后,AI代理就会像个得力助手,把这些想法转化成我们能读懂、能运行的代码。

所以你看,开发者的角色也变了!程序员不再是单纯的“码农”,而更像是“AI协调员”或者“模型训练师”。最重要的技能也变成了如何拆解复杂问题、做好系统设计,以及一门新学科提示工程(Prompt Engineering)。这不只是简单地提问,而是要学会如何像一个精准的指挥家一样,用最恰当的指令、上下文和约束,引导AI产出我们想要的结果。

当下的AI Coding Assistant的身影现在几乎无处不在,贯穿了整个软件开发的生命周期:

  • 规划阶段:脑子里只有一个模糊的想法?没关系,AI能帮你把它变成明确的需求和用户故事。
  • 开发阶段:像GitHub Copilot这样的AI编程神器,可以实时帮你写代码、补全函数,据说能把开发效率拉高整整45%!简直太神了!
  • 测试阶段:AI还能自动写测试用例、跑测试,帮你揪出代码里的bug和安全漏洞。
  • 部署和维护:AI也能优化发布流程,甚至能预测系统可能会在什么时候出问题,让运维工作省心不少。

不过目前AI Coding也不是完美的,存在很多问题:

  • 安全问题:现在最头疼的就是“提示注入”(Prompt Injection)。坏人可能会用一些刁钻的问法来“忽悠”AI,让它绕过安全限制,干点坏事,比如泄露你的数据。
  • 可信度与可靠性问题:LLM有时候像个“黑箱”,我们搞不清它为什么会做出某个决定。而且它还时不时会一本正经地“胡说八道”(也就是“幻觉”),这对于要求绝对精准的软件来说,可是个大麻烦。

所以目前为止Software 3.0目前更适合作为工具箱中的辅助工具,而非完全取代传统的代码编程。

软件范式的更新

Andrej Karpathy关于软件3.0的讨论中提到它不仅仅是一个技术更新,更是一场深刻的范式革命。

编程的民主化与角色的转变

社区普遍认为,Software 3.0最大的意义在于“编程民主化”。由于编程语言变成了自然语言,非程序员也能参与到软件创建中,极大地拓宽了创新的来源。X平台(原Twitter)上的讨论热烈,用户强调“English is coding”(英语即编程)的理念。对于程序员而言,工作重心从手写代码转向了设计高效的提示(Prompt Engineering)、验证和审计AI生成的代码以及管理整个AI系统。

LLM作为新的“操作系统”

Andrej Karpathy将LLMs比作1960年代的早期计算机或是一种新型的操作系统。这一观点在社区中获得了广泛认同。LLMs成为了一个可编程、可组合的基础平台,开发者可以围绕它来构建各种应用,而不是一切从零开始。

人机协作而非完全取代

目前大家普遍的共识是,Software 3.0强调的是人机协作,即“部分自动化”(Partial Autonomy)。Karpathy提出的“Autonomy Slider”(自主性滑块)概念被反复提及,即用户可以根据任务需求调整AI的介入程度。AI负责生成,人类负责验证,形成高效的“生成-验证”循环。

总而言之,软件3.0不仅仅是工具上的更新换代,它更像是一场关于思维、流程和团队协作方式的革命。公司需要赶紧建立起新的管理规则,培养团队和AI打交道的能力,还得花钱投资一些能管好AI风险的技术。说到底,未来的赢家,不是那些拥有最强AI的人,而是那些最懂得如何与AI共舞、能建立起高效、安全、负责任的人机协作体系的团队和个人。这,才是这场变革中最激动人心的部分!

References

  1. 人工智能对软件开发过程的战略影响
  2. Andrej Karpathy: Software Is Changing (Again)

Public discussion

足迹