想象一下,你穿越回1946年,站在ENIAC面前。
你想让这台机器计算"1+1"。你该怎么做?
你不能输入"1+1",因为ENIAC不认识这些符号。你必须:
- 拔掉某些电缆,插到新的位置
- 拨动某些开关
- 按下启动按钮
ENIAC的"语言"是电缆和开关——这是最原始的"编程"。
后来,人们发明了用0和1来表示指令。比如10110000可能表示"把数据移动到寄存器"。
这就是机器码——计算机的母语。
但人类很难读懂机器码。于是,编程语言的进化开始了。
机器码:计算机的母语 #
计算机只认识两个数字:0和1。
在计算机内部,所有信息都用二进制表示:指令、数据、地址,都是一串0和1。
比如,在早期的x86处理器上:
10110000 00000101表示"把数字5移动到AL寄存器"00000100 00000010表示"把数字2加到AL寄存器"
程序员必须记住这些数字的含义,然后用手在纸带上打孔,或者用开关输入。
这不仅枯燥,而且容易出错。一个数字错了,整个程序就崩溃。
汇编语言:助记符的诞生 #
1949年,EDSAC计算机首次使用了汇编语言。
汇编语言用助记符代替数字:
MOV AL, 5代替10110000 00000101ADD AL, 2代替00000100 00000010
助记符是英文缩写,更容易记忆:MOV是move(移动),ADD是add(加法)。
但计算机不认识助记符,只认识机器码。所以需要一个汇编器,把汇编语言翻译成机器码。
汇编语言比机器码好多了,但仍然很底层:
- 程序员必须了解CPU的寄存器和指令集
- 不同CPU有不同的汇编语言,程序难以移植
- 一条汇编指令对应一条机器指令,写复杂程序很繁琐
FORTRAN:第一个高级语言 #
1957年,IBM发布了FORTRAN(Formula Translation)。
FORTRAN是第一个广泛使用的高级编程语言。它让科学家和工程师可以用类似数学公式的方式写程序:
READ *, A, B
C = A + B
PRINT *, C这比汇编语言简单太多了!程序员不需要知道CPU的寄存器,只需要写公式。
FORTRAN的设计者是约翰·巴库斯。他说:“我讨厌写汇编程序。我想发明一种语言,让编程变得更容易。”
FORTRAN主要用于科学计算。直到今天,很多科学计算程序仍然用FORTRAN编写。
COBOL:商业编程 #
1959年,美国国防部召集会议,讨论开发一种用于商业的编程语言。
结果诞生了COBOL(Common Business-Oriented Language)。
COBOL的设计目标是:
- 接近英语:非程序员也能读懂
- 处理商业数据:会计、库存、报表
- 可移植:在不同计算机上都能运行
COBOL代码看起来像英语:
ADD 1 TO COUNTER
IF COUNTER > 100
DISPLAY "LIMIT REACHED"
END-IFCOBOL在银行、保险、政府系统中广泛使用。直到今天,全球约95%的ATM交易仍然使用COBOL代码。
ALGOL:算法语言 #
1960年,欧洲和美国的研究者合作开发了ALGOL(Algorithmic Language)。
ALGOL的目标是:科学计算和算法描述。
ALGOL引入了许多重要概念:
- 代码块:用
begin...end包围一段代码 - 作用域:变量只在定义它的块内有效
- 递归:函数可以调用自己
ALGOL没有FORTRAN和COBOL那么流行,但它影响了后来的许多语言:Pascal、C、Java都借鉴了ALGOL的设计。
BASIC:初学者的语言 #
1964年,达特茅斯学院的约翰·凯梅尼和托马斯·库尔茨开发了BASIC(Beginner’s All-purpose Symbolic Instruction Code)。
BASIC的设计目标是:让非计算机专业的学生也能编程。
10 PRINT "HELLO"
20 INPUT "WHAT IS YOUR NAME? ", N$
30 PRINT "HELLO, "; N$
40 ENDBASIC简单易学,在个人电脑时代广泛流行。苹果II、IBM PC都内置BASIC解释器。
比尔·盖茨和保罗·艾伦的第一个产品,就是为Altair编写的BASIC解释器。微软就是从BASIC起家的。
C:系统编程之王 #
1972年,贝尔实验室的丹尼斯·里奇开发了C语言。
C语言的设计目标是:
- 简洁:只有32个关键字
- 高效:生成的代码接近汇编语言的效率
- 可移植:同一份代码可以在不同机器上编译
- 灵活:可以直接操作内存,适合系统编程
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}C语言成为系统编程的标准语言。UNIX操作系统用C重写,从此可以移植到不同硬件。
C语言至今仍在广泛使用。Linux内核、Windows内核、嵌入式系统,都用C编写。
面向对象:新的范式 #
传统的编程语言是面向过程的:程序是一系列步骤,按顺序执行。
1967年,Simula语言引入了对象的概念——把数据和操作数据的函数封装在一起。
1980年代,Smalltalk语言发展了面向对象编程。对象可以继承、多态、封装。
1983年,Bjarne Stroustrup在C语言基础上开发了C++,把面向对象引入C。
class Dog {
public:
void bark() { cout << "Woof!"; }
};面向对象成为主流编程范式。Java、Python、Ruby、Objective-C都是面向对象语言。
脚本语言:快速开发 #
1990年代,脚本语言开始流行。
脚本语言的特点是:
- 解释执行:不需要编译,直接运行
- 动态类型:变量不需要声明类型
- 高级抽象:内置丰富的数据结构
Perl(1987):文本处理和系统管理
Python(1991):简洁优雅,后来成为数据科学和AI的主流语言
Ruby(1995):优雅的语法,Ruby on Rails框架推动了Web开发
PHP(1995):服务器端脚本,驱动了早期的动态网站
JavaScript(1995):浏览器脚本,后来成为全栈开发的主流
脚本语言降低了编程门槛,提高了开发效率。
编程语言的今天 #
今天,有数百种编程语言在使用。最流行的包括:
- Python:数据科学、机器学习、Web开发
- JavaScript:前端、后端、移动应用
- Java:企业应用、Android开发
- C/C++:系统编程、游戏引擎、嵌入式
- Go:云原生、微服务
- Rust:系统编程、WebAssembly
- Swift:iOS/macOS开发
- Kotlin:Android开发
每种语言都有自己的适用场景。程序员通常需要掌握多种语言。
编程语言的未来 #
编程语言还在进化:
更安全:Rust通过所有权系统保证内存安全,不需要垃圾回收。
更简洁:Kotlin、Swift减少了样板代码,让程序更易读。
更强大:Python的AI库、JavaScript的Web框架,让开发者可以快速构建复杂应用。
更智能:AI辅助编程(如GitHub Copilot)正在改变编程方式。
编程语言的进化,是让人类更容易表达思想的过程。
明天,我们来讲Python的故事——为什么这门语言叫Python,它如何成为AI时代的主流语言。
今日知识点 #
机器码(Machine Code) 计算机直接执行的指令,由0和1组成。每条指令对应CPU的一个操作。机器码是计算机的"母语",但人类难以阅读和编写。
高级语言(High-level Language) 接近人类语言的编程语言,如FORTRAN、C、Python。高级语言需要编译器或解释器翻译成机器码才能执行。高级语言屏蔽了底层细节,让程序员专注于解决问题。
面向对象编程(Object-Oriented Programming) 一种编程范式,把数据和操作数据的函数封装成"对象"。对象可以继承、多态、封装。面向对象适合构建大型复杂系统。
思考题 #
- 从机器码到高级语言,编程变得越来越容易。你觉得编程的"门槛"降低是好事还是坏事?
- 今天有数百种编程语言。你觉得未来会出现一种"统一语言"吗?
明天预告:Python的哲学——为什么这门语言叫Python,它如何成为AI时代的主流语言?