This Side of Sanity
alternate history

alternate history: computers, programming languages, operating systems

The real world timeline is shown side by side with this alternate history (and marked with a gray background).

This alternate history looks at how computers would have been different without the haphazardness of capitalism.

For this alternate history, we will assume that ideas came into existence at the same time they occurred in real history.

For this alternate history, we will assume that ideas for computers, programming languages, and operating systems are much more orderly than in real history.

For this alternate history, we will assume that the first computer hardware was almost as disorderly and chaotic as real history and we will introduce more orderly machines in the time frame of the real history.

For this alternate history, we will assume that the specifications for the alternate processors/computers, operating systems, and programming language are maintained by a non-profit organization.

For this alternate history, we will assume that the hardware is manufactured by the normal for profit corporations and at least one socialist corporation (worker owned).

mid 4,000s B.C.E.

Copper Age

technology mid 4,000s B.C.E. The Copper Age started in the mid 4,000s B.C.E.. Copper was the second metal humans worked (gold was first). Copper was used for axes, nails, roofing tiles, crowns, maces, armor, pans, jewewlry, statues, and wire.

3,000 B.C.E.

papyrus

technology 3,000 B.C.E. Papyrus from the papyrus plant of the Nile Delta.

At this point the need and the technology was ready for the paperclip. Bend some wire and use with paper. Spoiler alert: the paperclip wasnt invented until 1867.

Do we just insert the paperclip right here? Probably not.

Writing on paper is way easier than writing on clay or rock. Paper is an early form of memory. Old school data storage.

The Mesopotamians stored a lot information on clay tablets (fueling advances). The Egyptians stored a lot more data on paper (fueling advances).

1932

lambda calculus

mathematics 1932 Lambda calculus (Alonzo Church) is computationally complete, but highly inefficient.

If you don’t already have familiarity with Lambda calculus, these words are going to be confusing.

We need either the word “lambda” or the lower case Greek lambda λ.

Lambda cakculus is a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution (Wikipedia’s definition).

Variables, Abstraction, and Application give us all the building blocks for any possible computation. The programmer can create anything Turing complete from only these three terms.

There are many commonly used named functions.

Alternate history: At this point we can do reductions and we can make use of lambda functions. We also gain the capaibilities of LISP and other programming languages based on lambda calculus once we figure out how to efficiently evaluate them.

1936

Universal Machine (Turing machine)

mathematics 1936 Turing machines (universal machine) (Alan Turing) are computationally complete, but highly inefficient.

A Turing machine has three types of action:

  1. Print Si, move one square to the left (L) and go to state qj
  2. Print Si, move one square to the right (R) and go to state qj
  3. Print Si, do not move (N) and go to state qj

Programs for a Turing machine are written as a finite set of quintupes of the form:

qi Sj Sij Mij qij

Where qi is the current state, Sj the content of the sqaure being scanned, Sij the new content of the square, Mij specifies whether the machine is to move one square to the left, to the right, or to remain at the same square, and qij is the next state of the machine (Stanford Encyclopedia of Philosophy fair use, typical of the small quotations that normally appear in research papers).

Alternate history: At this point we have all of the basic computer hardware possibilities, including state machines, addressable memory, and subroutines.

1950

Short Code

programming language 1950 Short Code released 1950.

Chief developers: William F Schmidt, Albert B. Tonik, J.R. Logan

Predecessor: Brief Code

Birkbeck Assembler

programming language 1950 Birkbeck Assembler released 1950 for the ARC (Automatic Relay Computer designed by Andrew Donald Booth at Birkbeck College, London, available 1947-1948).

Chief developers: Kathleen Booth

1951

Regional Assembly Language

programming language 1951 Regional Assembly Language released 1951, designed 1950.

Derived from EDSAC Initial Orders and evolved into EDSAC Autocode, as well as being a strong influence on SO 2. (Online Historical Encyclopedaedia of Programming Languages)

Superplan

programming language 1951 Superplan developed between 1949 and 1951, released 1951.

Chief developer: Heinz Rutishauser

Predecessor: Plantalk

Introduced the keyword "for". a is an array:

Für i=base(increment)limit: ai + addend = ni

Alternate history: At this point we can iterate over an array and perform an addition to the elements. Presumably we could figure out variations, such as subtraction, multiplication, division, increment, decrement, zero, fill, etc.

1952

Autocode

programming language 1952 Autocode released 1952.

1954

IPL

programming language 1954 IPL (forerunner to LISP) released 1954.

1955

IPL

programming language 1955 FLOW-MATIC (forerunner to COBOL) released 1955.

1957

FORTRAN

programming language 1957 FORTRAN (first compiler) released 1957.

COMTRAN

programming language 1957 COMTRAN (precursor to COBOL) released 1957.

1958

LISP

programming language 1958 LISP released 1958.

ALGOL 58

programming language 1958 ALGOL 58 released 1958.

1959

IBM 1401

computer 1959 IBM 1401 released October 5, 1959, started 1958.

FACT

programming language 1959 FACT (forerunner to COBOL) released 1959.

COBOL

programming language 1959 COBOL released 1959. Worldwide #26 most popular programming language according to PYPL as of June 2020 (0.37%).

RPG

programming language 1959 RPG released 1959.

1960

quater-imaginary base

mathematics 1960 Donald Knuth proposed the quater-imaginary base in 1960. It is a non-standard positional numeral system which uses the imaginary number 2i as its base. It is able to (almost) uniquely represent every complex number using only the digits 0, 1, 2, and 3 (Wikipedia).

Alternate history: At this point we can express complex numbers in a more compact system. We probably should allow a programmer to write complex numbers using either the FORTRAN-style pair or Knuth’s quater-imaginary base, as well as offer both output options.

DEC PDP-1

computer 1960 DEC PDP-1 delivered November 1960, prototype December 1959.

CDC 1604

computer 1960 CDC 1604 released 1960.

CDC 160A

computer 1960 CDC 160A released 1960.

1962

APL

programming language 1962 APL released 1962.

Simula

programming language 1962 Simula released 1962.

SNOBOL

programming language 1962 SNOBOL released 1962.

1963

CPL

programming language 1963 CPL (forerunner to C) released 1963.

1964

CDC 6600

computer 1964 CDC 6600 released September 1964.

PDP-6

computer 1964 PDP-6 released 1964.

BASIC

programming language 1964 BASIC released 1964.

PL/I

programming language 1964 PL/I released 1964.

1965

PDP-8

computer 1965 PDP-8 released March 22, 1965.

IBM System/360

computer 1964 IBM System/360 introduced April 7, 1964, delivered 1965, started 1960.

1966

JOSS

programming language 1966 JOSS released 1966.

1967

CDC 7600

computer 1967 CDC 7600 released June, 1967.

BCPL

programming language 1967 BCPL (forerunner to C) released 1967.

1968

PDP-10

computer 1968 PDP-10 released 1968.

Logo

programming language 1968 Logo released 1968.

1969

GRI-909

computer 1969 GRI-909 released 1969.

B

programming language 1969 B (forerunner to C) released 1969.

1970

PDP-11

computer 1970 PDP-11 released 1970, prototype 1969.

Pascal

programming language 1970 Pascal released 1970.

Forth

programming language 1970 Forth released 1970.

1972

C

programming language 1972 C released 1972. Worldwide #6 most popular programming language (grouped with C++) according to PYPL as of June 2020 (5.69%).

Smalltalk

programming language 1972 Smalltalk released 1972.

Prolog

programming language 1972 Prolog released 1972.

1973

ML

programming language 1973 ML released 1973.

1974

CDC STAR-100

computer 1974 CDC STAR-100 released 1974.

1975

Scheme

programming language 1975 Scheme released 1975.

1976

Cray-1

computer 1976 Cray-1 released 1976, announced 1975.

1977

Apple II

computer 1977 Apple II released June 1977.

Tandy TRS-80

computer 1977 Tandy TRS-80 released August 3, 1977.

VAX-11/780

computer 1977 VAX-11/780 released October 25, 1977.

Commodore PET

computer 1977 Commodore PET released December 1977, started 1976, prototype January 1977.

Programming Computable Functions (PCF)

programming language 1977 Programming Computable Functions (PFC) introduced by Gordon Plotkin in 1977, based on previous unpublished material by Dana Scott. (Wikipedia: Programming Computable Functions)

We need a bunch of specialized mathematical sybols or a way to convert them into standard characters.

1978

SQL

programming language 1978 SQL released 1978.

1979

Atari 400 and Atari 800

computer 1979 Atari 400 and Atari 800 released November 1979.

1980

Tandy TRS-80 Color

computer 1980 Tandy TRS-80 Color released September 1980.

C++

programming language 1980 C with classes (renamed C++ in 1983) released 1980. Worldwide #6 most popular programming language (grouped with C) according to PYPL as of June 2020 (5.69%).

1981

IBM Personal Computer

computer 1981 IBM Personal Computer released August 12, 1981.

1982

Commodore 64

computer 1982 Commodore 64 released August 1982, introduced January 1982.

DEC Alpha

processor 1982 DEC Alpha released 1982.

PostScript

programming language 1982 PostScript released 1982.

1983

Apple Lisa

computer 1983 Apple Lisa released January 19, 1983.

Common Lisp

programming language 1983 Common Lisp released 1983.

Ada

programming language 1983 Ada (MIL-STD-1815) first validated compiler certified April 11, 1983, Military Standard reference manual approved December 10, 1980. Worldwide #23 most popular programming language according to PYPL as of June 2020 (0.43).

ABAP (Advanced Business Application Programming)

programming language 1983 ABAP (Advanced Business Application Programming) released 1983, originally named Allgemeiner Berichts-Aufbereitungs-Prozessor, German for General Report Creation Processor. Worldwide #21 most popular programming language according to PYPL as of June 2020 (0.45%).

1984

Apple Macintosh 128K

computer 1984 Apple Macintosh 128K released January 24, 1984.

MATLAB

programming language 1984 MATLAB released 1984. Worldwide #11 most popular programming language according to PYPL as of June 2020 (1.72%).

1985

Commodore 128

computer 1985 Commodore 128 released 1985, introduced January 1985.

Cray-2

computer 1985 Cray-2 released 1985.

Eiffel

programming language 1985 Eiffel released 1985.

1986

Objective-C

programming language 1986 Objective-C released 1986. Worldwide #8 most popular programming language according to PYPL as of June 2020 (2.5%).

Erlang

programming language 1986 Erlang released 1986.

1987

Perl

programming language 1987 Perl released 1987. Worldwide #20 most popular programming language according to PYPL as of June 2020 (0.46%).

1988

Cray Y-MP

computer 1988 Cray Y-MP released 1988.

Tcl

programming language 1988 Tcl released 1988.

Mathematica

programming language 1988 Mathematica released 1988.

1989

Bash

programming language 1989 Bash initially released 1989.

FL

programming language 1989 FL released 1989.

1990

Haskell

programming language 1990 Haskell released 1990. Worldwide #27 most popular programming language according to PYPL as of June 2020 (0.28%).

1991

Python

programming language 1991 Python released 1991. Worldwide #1 most popular programming language according to PYPL as of June 2020 (31.6%).

Visual Basic

programming language 1991 Visual Basic released 1991. Worldwide #17 most popular programming language according to PYPL as of June 2020 (0.88%).

1993

Ruby

programming language 1993 Ruby released 1993. Worldwide #15 most popular programming language according to PYPL as of June 2020 (1.23%).

Lua

programming language 1993 Lua released 1993. Worldwide #22 most popular programming language according to PYPL as of June 2020 (0.44%).

R

programming language 1993 R released 1993. Worldwide #7 most popular programming language according to PYPL as of June 2020 (3.86%).

AppleScript

programming language 1993 AppleScript released 1993.

Visual Basic for Applications (VBA)

programming language 1993 Visual Basic for Applications (VBA) released 1993. Worldwide #14 most popular programming language according to PYPL as of June 2020 (1.24%).

1994

CLOS

programming language 1994 CLOS released 1994.

1995

Ada 95

programming language 1995 Ada 95 released 1995. Worldwide #23 most popular programming language according to PYPL as of June 2020 (0.43%).

Java

programming language 1995 Java released 1995. Worldwide #2 most popular programming language according to PYPL as of June 2020 (17.67%).

Delphi (Object Pascal)

programming language 1995 Delphi (Object Pascal) released 1995. Worldwide #82 most popular programming language according to PYPL as of June 2020 (0.27%).

JavaScript

programming language 1995 JavaScript released 1995. Worldwide #3 most popular programming language according to PYPL as of June 2020 (8.02%).

PHP

programming language 1995 PHP released 1995. Worldwide #5 most popular programming language according to PYPL as of June 2020 (6.02%).

1996

WebDNA

programming language 1996 WebDNA released 1996.

1997

Rebol

programming language 1997 Rebol released 1997.

1999

D

programming language 1999 D released 1999.

2000

ActionScript

programming language 2000 ActionScript released 2000.

C#

programming language 2000 C# released 2000. Worldwide #4 most popular programming language according to PYPL as of June 2020 (6.87%).

2001

Visual Basic .NET

programming language 2001 Visual Basic .NET released 2001.

2003

Groovy

programming language 2003 Groovy released 2003. Worldwide #24 most popular programming language according to PYPL as of June 2020 (0.41%).

Scala

programming language 2003 Scala released 2003. Worldwide #16 most popular programming language according to PYPL as of June 2020 (1.0%).

2005

F#

programming language 2005 F# released 2005.

2007

Clojure

programming language 2007 Clojure released 2007.

2009

Go

programming language 2009 Go (GoLang) released 2009. Worldwide #13 most popular programming language according to PYPL as of June 2020 (1.29%).

2011

Dart

programming language 2011 Dart released 2011. Worldwide #19 most popular programming language according to PYPL as of June 2020 (0.5%).

Kotlin

programming language 2011 Kotlin released 2011. Worldwide #12 most popular programming language according to PYPL as of June 2020 (1.54%).

2012

Rust

programming language 2012 Rust released 2012. Worldwide #18 most popular programming language according to PYPL as of June 2020 (0.78%).

TypeScript

programming language 2012 TypeScript released 2012. Worldwide #10 most popular programming language according to PYPL as of June 2020 (1.86%).

Julia

programming language 2012 Julia released 2012. Worldwide #25 most popular programming language according to PYPL as of June 2020 (0.39%).

2014

Swift

programming language 2014 Swift released 2014. Worldwide #9 most popular programming language according to PYPL as of June 2020 (2.24%).