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."

Last modified: Monday, 28 July 2025, 10:26 AM