Skip to main content
  1. Posts/
  2. Computing History Series/

Programming Language Evolution: From Machine Code to High-Level Languages

sun.ao
Author
sun.ao
I’m sun.ao, a programmer passionate about technology, focusing on AI and digital transformation.
Table of Contents
Computing Through the Ages - This article is part of a series.
§ : This article

Imagine you traveled back to 1946 and stood before ENIAC.

You want this machine to calculate “1+1”. What do you do?

You can’t input “1+1” because ENIAC doesn’t recognize these symbols. You must:

  1. Unplug certain cables and insert them into new positions
  2. Flip certain switches
  3. Press the start button

ENIAC’s “language” was cables and switches—this was the most primitive “programming.”

Later, people invented using 0s and 1s to represent instructions. For example, 10110000 might mean “move data to register.”

This is machine code—the computer’s native language.

But humans have trouble reading machine code. So, the evolution of programming languages began.

Machine Code: The Computer’s Native Language
#

Computers only recognize two numbers: 0 and 1.

Inside computers, all information is represented in binary: instructions, data, addresses—all are strings of 0s and 1s.

For example, on early x86 processors:

  • 10110000 00000101 means “move the number 5 to the AL register”
  • 00000100 00000010 means “add the number 2 to the AL register”

Programmers had to memorize the meaning of these numbers, then punch holes in paper tape or input using switches.

This was not only tedious but error-prone. One wrong digit and the entire program would crash.

Assembly Language: The Birth of Mnemonics
#

In 1949, the EDSAC computer first used assembly language.

Assembly language used mnemonics instead of numbers:

  • MOV AL, 5 replaced 10110000 00000101
  • ADD AL, 2 replaced 00000100 00000010

Mnemonics are English abbreviations, easier to remember: MOV is move, ADD is add.

But computers don’t recognize mnemonics, only machine code. So an assembler was needed to translate assembly language into machine code.

Assembly language was much better than machine code, but still very low-level:

  • Programmers had to understand the CPU’s registers and instruction set
  • Different CPUs had different assembly languages; programs were hard to port
  • One assembly instruction corresponded to one machine instruction; writing complex programs was tedious

FORTRAN: The First High-Level Language
#

In 1957, IBM released FORTRAN (Formula Translation).

FORTRAN was the first widely used high-level programming language. It let scientists and engineers write programs in a way similar to mathematical formulas:

READ *, A, B
C = A + B
PRINT *, C

This was much simpler than assembly language! Programmers didn’t need to know CPU registers; they just wrote formulas.

FORTRAN’s designer was John Backus. He said: “I hated writing assembly programs. I wanted to invent a language that would make programming easier.”

FORTRAN was mainly used for scientific computing. Even today, many scientific computing programs are still written in FORTRAN.

COBOL: Business Programming
#

In 1959, the U.S. Department of Defense convened a meeting to discuss developing a programming language for business.

The result was COBOL (Common Business-Oriented Language).

COBOL’s design goals were:

  • Close to English: Non-programmers could read it
  • Handle business data: Accounting, inventory, reports
  • Portable: Could run on different computers

COBOL code looks like English:

ADD 1 TO COUNTER
IF COUNTER > 100
    DISPLAY "LIMIT REACHED"
END-IF

COBOL was widely used in banking, insurance, and government systems. Even today, about 95% of ATM transactions worldwide still use COBOL code.

ALGOL: Algorithmic Language
#

In 1960, European and American researchers collaborated to develop ALGOL (Algorithmic Language).

ALGOL’s goal was: Scientific computing and algorithm description.

ALGOL introduced many important concepts:

  • Code blocks: Using begin...end to enclose a section of code
  • Scope: Variables are only valid within the block where they’re defined
  • Recursion: Functions can call themselves

ALGOL wasn’t as popular as FORTRAN or COBOL, but it influenced many later languages: Pascal, C, and Java all borrowed from ALGOL’s design.

BASIC: The Language for Beginners
#

In 1964, John Kemeny and Thomas Kurtz at Dartmouth College developed BASIC (Beginner’s All-purpose Symbolic Instruction Code).

BASIC’s design goal was: Let non-computer-science students program too.

10 PRINT "HELLO"
20 INPUT "WHAT IS YOUR NAME? ", N$
30 PRINT "HELLO, "; N$
40 END

BASIC was simple and easy to learn, becoming widely popular in the personal computer era. Apple II and IBM PC both had built-in BASIC interpreters.

Bill Gates and Paul Allen’s first product was a BASIC interpreter for the Altair. Microsoft started with BASIC.

C: The King of Systems Programming
#

In 1972, Bell Labs’ Dennis Ritchie developed C language.

C language’s design goals were:

  • Simple: Only 32 keywords
  • Efficient: Generated code approaches assembly language efficiency
  • Portable: Same code can be compiled on different machines
  • Flexible: Can directly manipulate memory, suitable for systems programming
#include <stdio.h>
int main() {
    printf("Hello, World!\n");
    return 0;
}

C became the standard language for systems programming. The UNIX operating system was rewritten in C, making it portable to different hardware.

C is still widely used today. Linux kernel, Windows kernel, and embedded systems are all written in C.

Object-Oriented: A New Paradigm
#

Traditional programming languages were procedural: programs were a series of steps executed in order.

In 1967, Simula introduced the concept of objects—encapsulating data and functions that operate on data together.

In the 1980s, Smalltalk developed object-oriented programming. Objects could inherit, polymorph, and encapsulate.

In 1983, Bjarne Stroustrup developed C++ on top of C, bringing object-orientation to C.

class Dog {
public:
    void bark() { cout << "Woof!"; }
};

Object-oriented became the mainstream programming paradigm. Java, Python, Ruby, and Objective-C are all object-oriented languages.

Scripting Languages: Rapid Development
#

In the 1990s, scripting languages became popular.

Scripting language characteristics:

  • Interpreted execution: No compilation needed, run directly
  • Dynamic typing: Variables don’t need type declarations
  • High-level abstraction: Built-in rich data structures

Perl (1987): Text processing and system administration

Python (1991): Clean and elegant, later became mainstream for data science and AI

Ruby (1995): Elegant syntax, Ruby on Rails framework drove web development

PHP (1995): Server-side scripting, drove early dynamic websites

JavaScript (1995): Browser scripting, later became mainstream for full-stack development

Scripting languages lowered the programming barrier and improved development efficiency.

Programming Languages Today
#

Today, hundreds of programming languages are in use. The most popular include:

  • Python: Data science, machine learning, web development
  • JavaScript: Frontend, backend, mobile applications
  • Java: Enterprise applications, Android development
  • C/C++: Systems programming, game engines, embedded
  • Go: Cloud-native, microservices
  • Rust: Systems programming, WebAssembly
  • Swift: iOS/macOS development
  • Kotlin: Android development

Each language has its own use cases. Programmers typically need to master multiple languages.

The Future of Programming Languages
#

Programming languages are still evolving:

Safer: Rust guarantees memory safety through ownership system without garbage collection.

More concise: Kotlin and Swift reduce boilerplate code, making programs more readable.

More powerful: Python’s AI libraries and JavaScript’s web frameworks let developers quickly build complex applications.

Smarter: AI-assisted programming (like GitHub Copilot) is changing how we program.

The evolution of programming languages is the process of making it easier for humans to express their thoughts.

Tomorrow, we’ll discuss Python’s story—why this language is called Python, and how it became the mainstream language for the AI era.


Today’s Key Concepts
#

Machine Code Instructions executed directly by computers, consisting of 0s and 1s. Each instruction corresponds to one CPU operation. Machine code is the computer’s “native language,” but humans find it hard to read and write.

High-Level Language Programming languages close to human language, like FORTRAN, C, and Python. High-level languages need compilers or interpreters to translate into machine code before execution. High-level languages hide low-level details, letting programmers focus on solving problems.

Object-Oriented Programming A programming paradigm that encapsulates data and functions that operate on data into “objects.” Objects can inherit, polymorph, and encapsulate. Object-orientation is suitable for building large, complex systems.


Discussion Questions
#

  1. From machine code to high-level languages, programming has become easier. Do you think lowering the programming “barrier” is good or bad?
  2. Today there are hundreds of programming languages. Do you think a “unified language” will emerge in the future?

Tomorrow’s Preview: Python’s Philosophy—why is this language called Python, and how did it become the mainstream language for the AI era?

Computing Through the Ages - This article is part of a series.
§ : This article

Related articles