跳过正文
  1. 文章/

编程语言进化论:从机器码到高级语言

sun.ao
作者
sun.ao
我是 sun.ao,一名热爱技术的程序员,专注于 AI 和数智化领域。
目录
计算机前世今生 - 这篇文章属于一个选集。
§ : 本文

想象一下,你穿越回1946年,站在ENIAC面前。

你想让这台机器计算"1+1"。你该怎么做?

你不能输入"1+1",因为ENIAC不认识这些符号。你必须:

  1. 拔掉某些电缆,插到新的位置
  2. 拨动某些开关
  3. 按下启动按钮

ENIAC的"语言"是电缆和开关——这是最原始的"编程"。

后来,人们发明了用0和1来表示指令。比如10110000可能表示"把数据移动到寄存器"。

这就是机器码——计算机的母语。

但人类很难读懂机器码。于是,编程语言的进化开始了。

机器码:计算机的母语
#

计算机只认识两个数字:0和1。

在计算机内部,所有信息都用二进制表示:指令、数据、地址,都是一串0和1。

比如,在早期的x86处理器上:

  • 10110000 00000101 表示"把数字5移动到AL寄存器"
  • 00000100 00000010 表示"把数字2加到AL寄存器"

程序员必须记住这些数字的含义,然后用手在纸带上打孔,或者用开关输入。

这不仅枯燥,而且容易出错。一个数字错了,整个程序就崩溃。

汇编语言:助记符的诞生
#

1949年,EDSAC计算机首次使用了汇编语言

汇编语言用助记符代替数字:

  • MOV AL, 5 代替 10110000 00000101
  • ADD 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-IF

COBOL在银行、保险、政府系统中广泛使用。直到今天,全球约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 END

BASIC简单易学,在个人电脑时代广泛流行。苹果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) 一种编程范式,把数据和操作数据的函数封装成"对象"。对象可以继承、多态、封装。面向对象适合构建大型复杂系统。


思考题
#

  1. 从机器码到高级语言,编程变得越来越容易。你觉得编程的"门槛"降低是好事还是坏事?
  2. 今天有数百种编程语言。你觉得未来会出现一种"统一语言"吗?

明天预告:Python的哲学——为什么这门语言叫Python,它如何成为AI时代的主流语言?

计算机前世今生 - 这篇文章属于一个选集。
§ : 本文

相关文章