History of Programming Languages

Why study history?

  • Something different
  • Appreciation
  • Inspiration

How to Look at History

  • There are a few different ways programming language history is commonly explored
    • Genealogically
      • Attempts to derive more or less continuous lines of evolution from the earliest programming languages to today
    • Innovations
      • More concerned with major developments each language provided

Pre-Modern Era

  • The ideas of automatic computation and programming are not recent
  • In the 1800s
    • The programmable loom of Joseph Jacquard
    • Babbage's automatic difference engine
    • Ada Lovelace - widely considered first programmer

The Dawn Of Computing

  • The earliest computers were not programmable in our sense of the word
    • Could not store programs
    • Were often hardware based

Plankalkul

  • From the German "program calculus"
  • Invented around 1945, but not published until 1972
  • Each statement was two or three lines of code
    • Imagine writing fractions in ASCII only
  • Also published were algorithms to sort arrays and other advanced problems

Shortcode

  • One of the earliest programming languages
    • Was interpreted to machine code
  • Mathmatical expressions assigned numbers
    • 06 - abs
    • 2x - x + 2nd root
      00 X0 03 20 06 Y0
      

The First Compilers

  • Grace Hopper lead the team that built the first programs approximating compilers
  • First produced in 1951, the A-0 compiler could comiple shortcode and other similar ecnoding schemes
    • Produced machine code to be run directly on the hardware
  • Followed by the A-1 and A-2 systems
  • Ran on the UNIVAC architecture

Fortran

  • FORmula TRANslation
    • First version published in 1956
  • One of the first high-level languages
    • The most successful and influential certainly
  • Developed to run on the IBM 704
    • Had floating point and indexing capabilities!
  • Still used for extremely fast mast applications to this day

Fortran Contributions

  • Variables
  • Expressions over numbers and booleans
  • Fixed Length Arrays
  • Reusable Subprograms (Functions)
  • Input and Output Functionality

LISP

  • Developed in the late 50s, specifically to support AI research
  • Fotran had a list processing language that didn't support
    • Recursion
    • Conditional Expressions
    • Dynamic Length Lists
    • Garbage Collection
  • LISP was highly influential, even if it was primarily limited to AI research labs in actual use

ALGOL

  • An attempt to create and ALGOrithmic Language to run on any computer in the world
    • Including Backus and Naur
  • Designed by a commitee made up of representatives from
    • German Society for Applied Mathmattics and Mechanics
    • Association for Computing Machinery
  • Design began in 1957
    • Released in 1960

ALGOL 60 Contributions

  • Blocks
  • Type declarations
  • Scope
  • Nested If Statements
  • Recursive Functions
  • Dynamic Length Arrays

ALGOL's Legacy

  • Conceptually is the basis for most modern languages
  • Was never popular
    • Hard to implement
    • IBM didn't support it
  • Put a damper on the general idea of design by committee

COBOL

  • Still extremely widely used
    • Banks, Government
  • Meant for data processing
    • Looks more "English"
  • Design headed by the DoD
  • First published in 1960

COBOL's Contributions

  • File Descriptions
    • Input and Output support in General
  • Words rather than obscure functions
  • Records

PL/I

  • Released in the mid 60s
    • Developed at IBM
  • PL/I was meant to take what is best from Fortran, COBOL, and ALGOL
    • First example of really trying to combine different programming language features
  • Ended up being very complex

PL/I Contributions

  • Exception Statements
  • Pointers
  • External Linking

BASIC

  • Created as a teaching tool in the early 1960's
    • Was still used in Montgomery County Public Schools in the early 2000s :)
  • Later became popular as a basis for GUI programming
    • Visual Basic
  • First language designed to be run remotely, rather than as a tape or cards fed directly to the machine

Simula

  • Designed in Norway for use in simulating a computer
    • Simula I was released in 1964
  • Simula 67 is the more influential version
    • Based on ALGOL 60
    • Supported co-routines
      • As a by-product of this, had methods of data abstraction

The Precurors to C

  • The UNIX operating system aws in early development in the late 1960s
    • Common languages at Bell Labs at the time were BCPL, and an ever simpler version known as B
  • Both were typeless
    • Integer or Floating Point Division
  • C was first released in 1972
    • Borrowed a lot from ALGOL 68

The Popularity of C

  • Didn't really introduce to many new features
  • Was very flexible, and due to its use in the UNIX operating system, had a large audience
    • Also meant there was a easy to get compiler for many different computers!

Smalltalk

  • Smalltalk is considered the first object oriented language
    • Was built out of a PhD Disseration from the University of Utah in 1969, by Alan Kay
  • Developed at Xerox PARC
    • First published in 1972
  • Everything is an object
    • All methods are called throug message passing

Smalltalk Contributions

  • GUIS
    • Orginally meant as a way to abstract an interface away from code
  • Object Oriented Programming
    • Inheritance

C++

  • Developed at Bell Labs, just like the original C
    • At first was just another version of C with better type checking
  • C with Classes was first published in 1983
    • C++ released in 1984
  • Goals
    • Fast, a superset on top of C
    • Support classes and inheritance

The Impact of C++

  • Although it borrowed from many other languages, it was many peoples first exposure to OOP
    • Because it kept most of the sytnax of C, a lot of people had a good place to start
  • Continues to be used very widely today

Java

  • Started as a way to embed code into consumer devices by Sun Microsystems
    • Originally a modified version of C++
  • C++ was too dangerous in terms of what it allowed to be truly acceptable
    • Should be more reliable
    • Java doesn't allow functions outside of objects

Java Contributions

  • First major language to not allow code to be compiled directly to machine code
  • First major language to widely support multiple inheritance
  • Its popularity spurred work on faster interpreters and VMs
    • The JVM was very slow at first

After Java

  • The history of programming languages becomes an unruely field after Java
    • Part of the reason is we are still living in it
    • The internet and GitHub make it much easier to write and publish a language to thousands of users
  • The large supportive community around a language is often as much of a factor about its popularity as the features of the language itself

Scripting Languages

  • In general, all modern scripting languages are based on features found in the original shell in Unix, know as sh
  • Most modern languages are scripting languages
    • This allows them to be written in a widely available lower language, like C
    • The compiler/interpreter only has to be written once