Source Details
- Video Title:
- The First Programming Languages: Crash Course Computer Science #11
- Channel/Author:
- CrashCourse
- Publication Date:
- May 11, 2017
- URL:
I. The Limitations of Hardware-Level Programming
Hardware's Native Tongue: Machine Language/Code
Computers fundamentally operate on "raw, binary instructions," known as Machine Language or Machine Code. This is "the only language they’re able to speak."
Early Programming - A "Painstaking" Process
In the initial days of computing, programmers had to write entire programs directly in machine code. This involved:
- First, outlining a program informally in a human-readable format, such as English, referred to as Pseudo-Code (e.g., "retrieve the next sale from memory, then add this to the running total for the day, week and year, then calculate any tax to be added").
- Then, "painstakingly expand[ing] and translat[ing] it into binary machine code by hand, using things like opcode tables."
Programming at this hardware level was "cumbersome and inflexible," leading to a demand for a "more versatile way to program computers - what you might call a 'softer' medium."
II. The Dawn of Assembly Language and Assemblers
Human-Readable Mnemonics
By the late 1940s and early 1950s, programmers developed "slightly higher-level languages that were more human-readable." These languages replaced binary opcodes with "simple names, called mnemonics, which were followed by operands, to form instructions." For example, instead of 0010 1110
, programmers could write LOAD_A 14
.
The Assembler: Bridging the Gap
Since CPUs only understand binary, programmers created "reusable helper programs, in binary, that read in text-based instructions, and assemble them into the corresponding binary instructions automatically." This program is called an Assembler. It converts Assembly Language into native machine code.
Increased Abstraction and Ease of Use
Assemblers introduced features that further simplified programming:
- Automatic JUMP Address Calculation: Instead of manually calculating jump addresses, assemblers allowed programmers to use "little labels that can be jumped to." The assembler would then "do the work of figuring out all of the jump addresses."
- "Moving up another level of abstraction": This allowed programmers to "focus more on programming and less on the underlying mechanics under the hood," enabling "more sophisticated things to be built by hiding unnecessary complexity."
III. The Rise of High-Level Programming Languages and Compilers
Limitations of Assembly Language
Despite improvements, Assembly Languages remained a "thin veneer over machine code."
- One-to-one Mapping: "each assembly language instruction converts directly to a corresponding machine instruction – a one-to-one mapping – so it’s inherently tied to the underlying hardware."
- Hardware-Specific Focus: Programmers still had to "think about which registers and memory locations they will use."
Dr. Grace Hopper and the First Compiler
Dr. Grace Hopper, a US naval officer and one of the first programmers on the Harvard Mark 1 computer, was instrumental in developing higher-level programming.
- "Arithmetic Language Version 0" (A-0): Hopper designed this high-level programming language. Unlike assembly, "a single line of a high-level programming language might result in dozens of instructions being executed by the CPU."
- The Compiler: To perform this complex translation, Hopper built "the first compiler in 1952." A compiler is a "specialized program that transforms 'source' code written in a programming language into a low-level language, like assembly or the binary 'machine code' that the CPU can directly process."
- Initial Skepticism: Despite the innovation, "many people were skeptical of Hopper’s idea." She noted, “I had a running compiler and nobody would touch it. … they carefully told me, computers could only do arithmetic; they could not do programs.”
Benefits of High-Level Languages
Using a language like Python as an example, programmers no longer need to "deal with registers or memory locations." The compiler handles these details. Programmers can "just create abstractions for needed memory locations, known as variables, and give them names," like a = 10, b = 5, c = a + b
. The underlying hardware assignments become irrelevant to the programmer.
IV. Key Milestones and Concepts in High-Level Languages
FORTRAN (FORmula TRANslation) - 1957
Released by IBM, FORTRAN "came to dominate early computer programming." Programs were "20 times shorter than equivalent handwritten assembly code," creating a strong economic advantage by trading a small increase in computation time for a significant decrease in programmer time.
COBOL (COmmon Business-Oriented Language) - 1959
Developed by a consortium advised by Grace Hopper, COBOL was designed to be platform-independent. While "each computing architecture needed its own COBOL compiler," these compilers "could all accept the same COBOL source code, no matter what computer it was run on." This "Write Once, Run Anywhere" concept is a "benefit of moving away from assembly and machine code, which is still CPU specific."
Reduced Barrier to Entry
High-level programming languages significantly lowered the entry barrier, democratizing computing and transforming it "from a cumbersome and esoteric discipline to a general purpose and accessible tool." This allowed professional programmers to create increasingly sophisticated programs.
V. The Ongoing Evolution of Programming Languages
Golden Era of Design
The period following 1959 marked a "golden era in programming language design," evolving "in lockstep with dramatic advances in computer hardware."
Proliferation of Languages
Hundreds of programming languages have emerged since, including:
- 1960s: ALGOL, LISP, BASIC
- 1970s: Pascal, C, Smalltalk
- 1980s: C++, Objective-C, Perl
- 1990s: Python, Ruby, Java
- New Millennium: Swift, C#, Go
Continued Innovation
New languages are constantly proposed, leveraging "new and clever abstractions to make some aspect of programming easier or more powerful." The ultimate goal, or "Holy Grail," remains the use of "plain ol’ English," where users could "literally just speak what you want the computer to do." This, however, remains "science fiction… for now."