# 编程的演变

从早期接线、数字指令到汇编、高级语言和AI辅助编程，看编程如何一步步演变，以及为什么人仍要判断需求并亲手试用。

By cosmic\-panda\-06d658e3

Topic: Computing, AI &amp; Electronics

[Open the interactive Jig](https://ask.jig.com/j/UUXoriYi17DV)

## Transcript

### 1. 写代码，到底在做什么？

想让计算机算出这个月一共花了多少钱，人一听就懂，计算机却需要更明确的信息：支出记录在哪里，哪些属于这个月，怎样加起来，结果显示在哪里。编程，就是把我们希望计算机完成的事情，变成它能够执行的指令。

转盘上的八件展品讲的是同一件事：人们一直在把繁琐的工作交给工具，好更直接地说出要解决的问题。拖动空白处可以转动转盘。

### 2. 接线、开关和数字指令

在1940到1950年代，有些早期计算机要靠接线、拨开关来设置工作过程；使用存储程序的计算机，则按照数字编码的机器指令运行。想算一次支出，你得亲自安排：从哪里取出一个数，放到哪里，做什么运算，结果存回哪里。不同机器的指令可能不同，所以那时的人既要理解问题，又要处理大量机器细节。

1945年的ENIAC靠插线和开关编程，重新设置一次可能要一天左右。1948年，曼彻斯特的“宝贝”机第一次运行了存放在内存里的程序。

### 3. 汇编：给指令起名字

数字指令太难记，人们就给每种操作起一个好记的名字，比如用一个符号表示加法，用另一个符号表示存储。再由一个叫“汇编程序”的工具，把这些符号转换成机器指令。程序更容易读、也更容易改了，但机器怎样一步步执行，仍然要由人来安排。

剑桥大学保存的1949年EDSAC资料里就有这样的助记符：A 表示加，T 表示把结果存进内存。纸带上的“A 20 F”就是一条这样的指令。

### 4. 高级语言：离机器细节更远

后来，人们直接写计算逻辑，由编译器、解释器这些工具承担转换和执行工作。“高级”指的是离机器底层细节更远：在今天的 Python 里，用 sum\(expenses\) 就能把一组支出加起来。但业务规则仍要人写清楚：哪些记录属于本月？退款怎么算？重复记录怎么处理？

1957年，FORTRAN商业发布，科学家和工程师能用接近数学公式的方式写程序；1964年诞生的BASIC面向没有编程经验的学生。后来，C、Python等语言服务于不同的任务。

### 5. 像搭积木一样做软件

软件越做越大，一个记账工具除了算总数，还需要输入框、按钮、分类、图表和数据保存。于是通用功能做成库和组件，常见结构做成框架，编辑、运行、调试也整合进开发环境。做软件越来越像搭积木，但选哪些积木、怎样连接、出了问题怎样检查，仍要人来判断。

1991年发布的Visual Basic，让开发者画出窗口、放上按钮，再写点击按钮时要发生什么。低代码、无代码工具也用拖拽和规则配置降低门槛，与传统编程并行发展。

### 6. AI 开始参与写代码

2021年，GitHub发布Copilot技术预览：程序员写下一部分代码或一句注释，AI就能根据上下文建议后面的代码，甚至生成一个函数。后来，AI还能读取项目、修改多个文件、运行程序和测试，再根据报错继续修改。当AI既能写代码又能观察结果，人就可以通过持续对话，推动一个应用逐步成形。

用自然语言引导代码生成，在2021年就已经存在。2025年发布研究预览的Claude Code，展示了读取项目、修改文件和运行测试的能力。

### 7. Vibe Coding：边说、边看、边改

2025年2月，Andrej Karpathy提出了Vibe Coding：主要向AI表达想法，大量接受它生成的代码，不逐行理解实现，而是看运行结果，再继续提修改要求。按下按钮，依次说出三句话：“我想做一个记账工具，能记录金额、分类和支付方式”“支付方式改成下拉选择吧”“加一个分类统计”。你描述需求、观察结果、提出反馈，AI承担大量代码编写。

你可以把精力放在自己最了解的事情上：使用场景是什么，什么功能最需要，现在的结果哪里不合适。

### 8. 最后，一定要亲手试一试

编译器按照明确的语言规则处理程序；AI则根据你的表达生成一种实现方案，它可能误解你的意思，也可能漏掉某种情况。所以实际试用非常重要：统计的金额对不对？分类能不能修改？关闭以后重新打开，记录还在不在？

Karpathy在自己项目的复盘里也提到：初版界面出现得很快，后续连接服务、部署和排错仍然需要不少工作。
