A Brief History of Computing: Prof. Dr. Jörg Schäfer 23 December, 2010
A Brief History of Computing: Prof. Dr. Jörg Schäfer 23 December, 2010
Xmas Lecture
Prologue 3
Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Famous (Computer) Scientists Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Famous (Computer) Engineers Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1
Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 44
Fortran – I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 45
Fortran – II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 46
Algol68 – I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 47
Algol68 – II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 48
Lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 49
1960s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 50
1960s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 51
Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 52
Cobol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 53
1970s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 54
1970s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 55
Hackers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 56
C................................ . . . . . . . . . . .. . . .. . .. . . .. . . ................ 57
Prolog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 58
Smalltalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 59
1980s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 60
1980s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 61
C++ – I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 62
C++ – II. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 63
Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 64
1990s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 65
1990s cont. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 66
1990s cont. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 67
Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 68
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 69
2000s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 70
MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 71
Summary: Programming Languages’ Paradigms . . . . . . . . . . .. . . .. . .. . . .. . . ................ 72
Interpretation of Paradigms . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 73
Shooting Yourself . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 74
Programming Languages as seen by Fans . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 75
Languages as Tools for Programming. . . . . . . . . . . . . . . . . . .. . . .. . .. . . .. . . ................ 76
Outlook 90
The Future of Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Appendix 92
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Credits – I/III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Credits – II/III . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Credits – III/III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2
Content
Prologue
A Brief History of Computers
A Brief History of Programming Languages
A Brief History of Networks
A Brief History of Applications
A Brief History of Computer Scientists and Engineers
A Brief History of Challenges
Outlook
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 2 / 96
Prologue 3 / 96
Disclaimer
3
Famous (Computer) Scientists Quotes
Computer science is no more about computers than astronomy is about telescopes.
Edsger Dijkstra
Computer science also differs from physics in that it is not actually a science. It does not study natural
objects. Neither is it, as you might think, mathematics; although it does use mathematical reasoning pretty
extensively. Rather, computer science is like engineering; it is all about getting something to do something,
rather than just dealing with abstractions, as in the pre-Smith geology.
Richard Feynman, Feynman Lectures on Computation, 1970
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 5 / 96
4
A Brief History of Computers 7 / 96
Stonehenge
←Stonehenge
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 8 / 96
5
Abacus
Used in many cultures including Egypt, Persia, Greek, Roman, Chinese, India, Japan, Native American, . . .
Abacus
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 9 / 96
The abacus, also called a counting frame, is a calculating tool used primarily in parts
of Asia for performing arithmetic processes. The use of the word abacus dates before
1387 AD, when a Middle English work borrowed the word from Latin to describe
a sandboard abacus. The period 2700–2300 BC saw the first appearance of the
Sumerian abacus, a table of successive columns which delimited the successive orders
of magnitude of their sexagesimal number system. The use of the abacus in Ancient
Egypt is mentioned by the Greek historian Herodotus. During the Achaemenid
Persian Empire, around 600 BC, Iranians first began to use the abacus. The earliest
archaeological evidence for the use of the Greek abacus dates to the 5th century BC.
The normal method of calculation in ancient Rome, as in Greece, was by moving
counters on a smooth table. The earliest known written documentation of the
Chinese abacus dates to the 2nd century BC. Some sources mention the use of
an abacus called a nepohualtzintzin in ancient Mayan culture. This Mesoamerican
abacus used a 5-digit base-20 system. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 9
6
Al-Chwarizmi
Algorithms
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 10 / 96
Abu Abdallah Muhammad ibn Musa al-Khwarizmi (c. 780 – c. 850) was a Persian
mathematician, astronomer and geographer, a scholar in the House of Wisdom in
Baghdad. Al-Khwarizmi’s contributions to mathematics, geography, astronomy, and
cartography established the basis for innovation in algebra and trigonometry. His
systematic approach to solving linear and quadratic equations led to algebra, a word
derived from the title of his 830 book on the subject, “The Compendious Book on
Calculation by Completion and Balancing”. On the Calculation with Hindu Numerals
written about 825, was principally responsible for spreading the Indian system of
numeration throughout the Middle East and Europe. It was translated into Latin
as Algoritmi de numero Indorum. Al-Khwarizmi, rendered as (Latin) Algoritmi, led
to the term “algorithm”. Some of his work was based on Persian and Babylonian
astronomy, Indian numbers, and Greek mathematics. When, in the 12th century,
his works spread to Europe through Latin translations, it had a profound impact on
the advance of mathematics in Europe. He introduced Arabic numerals into the
Latin West, based on a place-value decimal system developed from Indian sources.
(Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 10
7
Leonardo da Vinci
Calculator
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 11 / 96
8
Pascaline
In 1642 Blaise Pascal, at age 19, invented the Pascaline.
Pascaline
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 12 / 96
The Pascaline, invented by Blaise Pascal in France in 1642, was a mechanical calcu-
lator that could add and subtract directly. Its introduction launched the development
of mechanical calculators in Europe first and then all over the world, development
which culminated three centuries later by the invention of the microprocessor devel-
oped for a Busicom calculator in 1971. Pascal spent three years and went through
50 prototypes before presenting his first machine to the public in 1645. He dedicated
it to Pierre Séguier, the chancellor of France at the time. He built around twenty
more machines during the next decade, often improving on his original design. Nine
machines have survived the centuries, most of them being on display in European
museums. In 1649 a royal privilege, signed by Louis XIV of France, gave him the
exclusivity of the design and manufacturing of calculating machines in France. The
mechanical calculator industry owes a lot of its key machines and inventions to the
pascaline. First Gottfried Leibniz invented his Leibniz wheels after 1671 while try-
ing to add an automatic multiplication and division feature to the pascaline, then
Thomas de Colmar drew his inspiration from Pascal and Leibniz when he designed
his arithmometer in 1820, and finally Dorr E. Felt substituted the input wheels of
the pascaline by columns of keys to invent his comptometer around 1887. The pas-
caline was also constantly improved upon, especially with the machines of Dr. Roth
around 1840, and then with some portable machines until the creation of the first
electronic calculators. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 12
9
Leibniz 01
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 13 / 96
Gottfried Wilhelm Leibniz (July 1, 1646 – November 14, 1716) was a German
mathematician and philosopher. Leibniz invented the binary number system and
showed the connection with logic (De progressione Dyadica, 1679; oder Explication
de l’Arithmetique Binaire, 1703).
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 13
10
Charles Babbage’s Difference Engine
Calculator
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 14 / 96
Charles Babbage (26 December 1791 – 18 October 1871) was an English mathemati-
cian, philosopher, inventor, and mechanical engineer who originated the concept of
a programmable computer. He invented the Difference Engine, an automatic, me-
chanical calculator designed to tabulate polynomial functions. The Difference Engine
is not a general purpose computer rather a calculator. Later, he designed the Ana-
lytical Engine – a mechanical general purpose computer. The input (programs and
data) was to be provided to the machine via punched cards, a method being used
at the time to direct mechanical looms such as the Jacquard loom. Both machines
were never built during Babbage’s life time. (Source: Wikipedia and other sources)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 14
11
Charles Babbage’s Analytical Engine
Computer
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 15 / 96
The analytical engine, an important step in the history of computers, was the design
of a mechanical general-purpose computer by English mathematician Charles Bab-
bage. In its logical design the machine was essentially modern, anticipating the first
completed general-purpose computers by about 100 years. It was first described in
1837. Babbage continued to refine the design until his death in 1871. Because of
the complexity of the machine, the lack of project management science, the expense
of its construction, and the difficulty of assessing its value by Parliament relative
to other projects being lobbied for, the engine was never built. (Source: Wikipedia
and other sources)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 15
12
The First Programmer
Program
−100 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 16 / 96
Ada Lovelace
! was the only legitimate child of the poet Lord Byron
! wrote programs for computers that did not (yet) exist such as the Analytical
Engine (e.g. computing Bernoulli numbers)
! is considered the first programmer in history
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 16
13
Inspiration for Cyberpunk
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 17 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 18 / 96
14
Power (Jacquard) Looms
We may say most aptly, that the Analytical Engine weaves algebraical patterns just as the Jacquard-loom weaves flowers
and leaves. (Lady Ada Lovelace)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 19 / 96
15
IBM, formerly known as Hollerith
Punchcards
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 20 / 96
Herman Hollerith (February 29, 1860 – November 17, 1929) was an American statis-
tician who developed a mechanical tabulator based on punched cards to rapidly tab-
ulate statistics from millions of pieces of data. He was the founder of the company
that became IBM. Punched card (or punch card or Hollerith card or IBM card) is a
piece of stiff paper that contains digital information represented by the presence or
absence of holes in predefined positions. Now almost an obsolete recording medium,
punched cards were widely used throughout the 19th century for controlling textile
looms and in the late 19th and early 20th century for operating fairground organs
and related instruments. They were used through the 20th century in unit record
machines for input, processing, and data storage. Early digital computers used
punched cards, often prepared using keypunch machines, as the primary medium for
input of both computer programs and data. Some voting machines use punched
cards. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 20
16
Konrad Zuse – Z1
Z1
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 21 / 96
Konrad Zuse (22 June 1910 Berlin – 18 December 1995 Hünfeld near Fulda) was a
German engineer and computer pioneer. His greatest achievement was the world’s
first functional program-controlled Turing-complete computer, the Z3, in May 1941
(the program was stored on a perforated 35mm film). (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 21
17
Alan Turing [Tur01]
Enigma
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 22 / 96
18
Alan Mathison Turing (born 23 June 1912 at 2 Warrington Crescent, London W9,
died 7 June 1954 at his home in Wilmslow, Cheshire) contributed to mathematics,
cryptanalysis, logic, philosophy, biology, and formatively to computer science, cogni-
tive science, Artificial Intelligence and Artificial Life. Turing and the American logi-
cian Alonzo Church argued that every effective mathematical method can be carried
out by the universal Turing machine, a proposition now known as the Church-Turing
thesis. Working independently, Turing and Church had both shown that – contrary
to mathematical opinion of the day – there are well-defined mathematical problems
that cannot be solved by effective methods; each published this result in 1936. This,
in conjunction with the work of the Austrian logician Kurt Godel, put paid to the
Hilbert programme in mathematics. In the summer of 1938 Turing returned to his
Fellowship at King’s. At the outbreak of hostilities with Germany in September 1939
he left Cambridge for the wartime headquarters of the Government Code and Cypher
School (GC&CS) at Bletchley Park, Buckinghamshire. Building on earlier work by
Polish cryptanalysts, Turing contributed crucially to the design of electro-mechanical
machines (’bombes’) used to decipher Enigma, the code by means of which the
German armed forces sought to protect their radio communications. Thanks to the
bombes, by early 1942 GC&CS was decoding about 39,000 intercepted messages
each month, rising subsequently to over 84,000 messages a month – approximately
two every minute. Turing’s work on the version of Enigma used by the German navy
was vital to the battle for supremacy in the North Atlantic. He also contributed to
the attack on the cyphers known as ’Fish’. Based on binary teleprinter code, Fish
was used during the latter part of the war in preference to morse-based Enigma for
the encryption of high-level signals, for example messages from Hitler and members
of the German High Command. It is estimated that the work of GC&CS shortened
the war in Europe by at least two years. Turing received the Order of the British
Empire for the part he played. (Source: http://www.alanturing.net/)
Turing Machine: A Turing machine – described by Alan Turing in 1937 – is a the-
oretical device that manipulates symbols on a strip of tape according to a table of
rules.
Despite his contributions to win the war, Turing was prosecuted by the British Au-
thorities for being homosexual and forced into hormone “treatment”. This eventually
led to depressions and suicide.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 22
19
John von Neumann [Neu45]
EDVAC
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 23 / 96
John von Neumann (December 28, 1903 – February 8, 1957) was a Hungarian-born
American mathematician who made major contributions to a vast range of fields,
including set theory, functional analysis, quantum mechanics, ergodic theory, contin-
uous geometry, economics and game theory, computer science, numerical analysis,
hydrodynamics (of explosions), and statistics, as well as many other mathematical
fields. He is generally regarded as one of the greatest mathematicians in modern
history. While consulting for the Moore School of Electrical Engineering at the Uni-
versity of Pennsylvania on the EDVAC project, von Neumann wrote an incomplete
First Draft of a Report on the EDVAC. The paper, which was widely distributed, de-
scribed a computer architecture in which the data and the program are both stored
in the computer’s memory in the same address space. This architecture is to this day
the basis of modern computer design, unlike the earliest computers that were ’pro-
grammed’ by altering the electronic circuitry. Although the single-memory, stored
program architecture is commonly called von Neumann architecture as a result of
von Neumann’s paper, the architecture’s description was based on the work of J.
Presper Eckert and John William Mauchly, inventors of the ENIAC at the University
of Pennsylvania. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 23
20
Von Neumann Architecture
Architecture
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 24 / 96
Grace Hopper
Grace Murray Hopper was an American computer sci-
entist and United States Naval officer. One of the first
programmers of the Harvard Mark I computer. She de-
veloped the first compiler for a computer programming
language.
Compiler
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 25 / 96
21
Rear Admiral Grace Murray Hopper (December 9, 1906 – January 1, 1992) was
an American computer scientist and United States Naval officer. A pioneer in the
field, she was one of the first programmers of the Harvard Mark I computer, and
she developed the first compiler for a computer programming language. She con-
ceptualized the idea of machine-independent programming languages, which led to
the development of COBOL, one of the first modern programming languages. She
is also credited with popularizing the term “debugging” for fixing computer glitches
(motivated by an actual moth removed from the computer). Because of the breadth
of her accomplishments and her naval rank, she is sometimes referred to as “Amaz-
ing Grace”. The U.S. Navy destroyer USS Hopper was named for her. (Source:
Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 25
Debugging
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 26 / 96
22
Analog Computers
Sliderule
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 27 / 96
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 28 / 96
23
Analog computers were used mainly to solve differential equations, in particular for
weapons, missile control and space travel. Examples: Apollo Lunar Module.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 28
Moore’s Law
Carver Mead
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 29 / 96
24
Unix [RT74]
Unix
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 30 / 96
25
Macs
MacIntosh
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 31 / 96
PCs
IBM PC
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 32 / 96
26
Ubiquitous Computers
Android
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 33 / 96
Quantum Computing
Quantum Computing:
Shor’s-Algorithm [Sho97]:
q−1 !
! q−1
q −1 e2πiac/q |c!|xa mod n!
a=0 c=0
Shor’s-Algorithm
1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 34 / 96
27
Quantum Computers make use of Quantum Effects and use Q-Bits. They can
compute some computations much faster than classical computers. For instance, the
Shor algorithm, named after mathematician Peter Shor, is a quantum algorithm for
integer factorization discovered in 1994. It solves the problem of integer factorization
in O(log3 n).
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 34
Language is a process of free creation; its laws and principles are fixed, but the manner in which the
principles of generation are used is free and infinitely varied. Even the interpretation and use of
words involves a process of free creation.
Noam Chomsky
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 36 / 96
28
Languages as Tools for Thinking
Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt.
Ludwig Wittgenstein [Wit22]
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 37 / 96
Language Evolution
1957 1960 1965 1970 1975 1980 1985 1990
PostScript PostScript level 2
1982 1992
OO Forth
FIG-Forth Forth-83 ANS Forth 1987
Forth
1968 1978 1983 1986
Messy!
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 38 / 96
29
1940s
1940s: It is War. . .
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 39 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 39
30
1940s cont.
! No languages or
! Machine Language (i.e. no language)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 40 / 96
Machine Language
1100011110111010100101001001001010101110011010101001100000111100
1011010101111101010011111111111001011011000000001010010001001000
0110010101101100011011000110111100100000010101110110111101110010
0110110001100100001000010100001001101111011011111100011110111010
1001010010010010101011100110101010011000001111001011010101111101
0100111111111110010110110000000010100100010010000110010101101100
0110110001101111001000000101011101101111011100100110110001100100
0010000101000010011011110110111111000111101110101001010010010010
1010111001101010100110000011110010110101011111010100111111111110
0101101100000000101001000100100001100101011011000110110001101111
0010000001010111011011110111001001101100011001000010000101000010
0110111101101111110001111011101010010100100100101010111001101010
1001100000111100101101010111110101001111111111100101101100000000
1010010001001000011001010110110001101100011011110010000001010111
0110111101110010011011000110010011000111101110101001010010010010
1010111001101010100110000011110010110101011111010100111111111110
0101101100000000101001000100100001100101011011000110110001101111
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 41 / 96
31
1950s
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 42
32
1950s cont.
! Assembly languages were first developed in the 1950s, when they were referred to as second generation
programming languages. For example, SOAP (Symbolic Optimal Assembly Program) was a 1957
assembly language for the IBM 650 computer.
! Fortran, invented by John W. Backus optimized for speed (similar to assembly), used for numerical
calculations in e.g. physics until today.
! Algol, the mother of procedural languages (such as Pascal)
! Lisp, the mother of functional languages
Fortran and Algol are imperative and procedural. Lisp is primarily functional.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 43 / 96
Assembly
_partition :
LFB3 :
pus hq %r b p
LCFI0 :
movq %r s p , %r b p
LCFI1 :
pus hq %r b x
LCFI2 :
movl %edx , %r 1 0 d
m o v s l q %edx ,% r a x
leaq (% r d i ,% r a x , 4 ) , %r b x
movl (% r b x ) , %r 1 1 d
leal −1(% r s i ) , %r 9 d
cmpl %e s i , %edx
j l e L2
m o v s l q %e s i ,% r a x
leaq (% r d i ,% r a x , 4 ) , %r c x
. a l i g n 4 , 0 x90
L4 :
movl (% r c x ) , %r 8 d
cmpl %r 8d , %r 1 1 d
jl L5
incl %r 9 d
m o v s l q %r 9 d ,% r a x
leaq (% r d i ,% r a x , 4 ) , %r a x
movl (% r a x ) , %edx
movl %edx , (% r c x )
...
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 44 / 96
33
Assembly ideas
! use mnemonics that symbolize processing steps (instructions), processor regis-
ters, memory locations, and other language features rather than 0s and 1s
! needs a simple compiler (assembler) – more or less isomorphic
! debugging aids added later
! one and two-pass assemblers Elements:
– Opcode mnemonics
– Data sections
– Assembly directives
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 44
Fortran – I
I M P L I C I T NONE
CONTAINS
RECURSIVE SUBROUTINE Q s o r t ( a )
I F ( s i z e ( a ) > 1 ) THEN
CALL P a r t i t i o n ( a , s p l i t )
CALL Q s o r t ( a ( : s p l i t −1))
CALL Q s o r t ( a ( s p l i t : ) )
END I F
END SUBROUTINE Q s o r t
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 45 / 96
34
Fortran – II
SUBROUTINE P a r t i t i o n ( a , marker )
DO WHILE ( l e f t < r i g h t )
right = right − 1
DO WHILE ( a ( r i g h t ) > p i v o t )
r i g h t = r i g h t −1
END DO
left = left + 1
DO WHILE ( a ( l e f t ) < p i v o t )
left = left + 1
END DO
I F ( l e f t < r i g h t ) THEN
temp = a ( l e f t )
a( le ft ) = a( right )
a ( r i g h t ) = temp
END I F
END DO
I F ( l e f t == r i g h t ) THEN
marker = l e f t + 1
ELSE
marker = l e f t
END I F
END SUBROUTINE P a r t i t i o n
END MODULE Qso rt_Mo dule
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 46 / 96
35
Algol68 – I
PROC p a r t i t i o n =(REF [ ] DATA a r r a y , PROC ( REF DATA, REF DATA) BOOL cmp ) INT : (
INT b e g i n :=LWB a r r a y ;
INT end :=UPB a r r a y ;
WHILE b e g i n < end DO
WHILE b e g i n < end DO
I F cmp ( a r r a y [ b e g i n ] , a r r a y [ end ] ) THEN
DATA tmp=a r r a y [ b e g i n ] ;
a r r a y [ b e g i n ] : = a r r a y [ end ] ;
a r r a y [ end ] : = tmp ;
GO TO b r e a k w h i l e d e c r end
FI ;
end −:= 1
OD;
b r e a k w h i l e d e c r end : SKIP ;
WHILE b e g i n < end DO
I F cmp ( a r r a y [ b e g i n ] , a r r a y [ end ] ) THEN
DATA tmp=a r r a y [ b e g i n ] ;
a r r a y [ b e g i n ] : = a r r a y [ end ] ;
a r r a y [ end ] : = tmp ;
GO TO b r e a k w h i l e i n c r b e g i n
FI ;
b e g i n +:= 1
OD;
b r e a k w h i l e i n c r b e g i n : SKIP
OD;
begin
);
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 47 / 96
Algol68 – II
PROC q s o r t =(REF [ ] DATA a r r a y , PROC ( REF DATA, REF DATA) BOOL cmp ) VOID : (
I F LWB a r r a y < UPB a r r a y THEN
INT i := p a r t i t i o n ( a r r a y , cmp ) ;
PAR ( # r e m o v e PAR f o r s i n g l e t h r e a d e d s o r t #
q s o r t ( a r r a y [ : i − 1 ] , cmp ) ,
q s o r t ( a r r a y [ i + 1 : ] , cmp )
)
FI
);
main : (
[ ] DATA c o n s t l = ( 5 , 4 , 3 , 2 , 1 ) ;
[ UPB c o n s t l ]DATA l := c o n s t l ;
q s o r t ( l , cmp ) ;
p r i n t f ( ( $g ( 3 ) $ , l ) )
)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 48 / 96
36
ALGOL (short for ALGOrithmic Language) is a family of imperative computer pro-
gramming languages originally developed in the mid 1950s which greatly influenced
many other languages and became the de facto way algorithms were described in
textbooks and academic works for almost the next 30 years. It was designed to avoid
some of the perceived problems with FORTRAN and eventually gave rise to many
other programming languages, including BCPL, B, Pascal, Simula, C, and many
others. ALGOL introduced code blocks and the begin and end pairs for delimiting
them and it was also the first language implementing nested function definitions with
lexical scope. Fragments of ALGOL-like syntax are sometimes still used as pseu-
docode (notations used to describe algorithms for human readers). ALGOL was
developed jointly by a committee of European and American computer scientists
in a meeting in 1958 at ETH Zurich (cf. ALGOL 58). It specified three different
syntaxes: a reference syntax, a publication syntax, and an implementation syntax.
The different syntaxes permitted it to use different keyword names and conventions
for decimal points (commas vs periods) for different languages. ALGOL was used
mostly by research computer scientists in the United States and in Europe. Its use
in commercial applications was hindered by the absence of standard input/output
facilities in its description and the lack of interest in the language by large computer
vendors. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 48
Lisp
( d e f u n qs ( l i s t )
( i f (<= ( l e n g t h l i s t ) 1 )
list
( le t (( pivot ( f i r s t l i s t )))
( append ( qs ( r e m o v e − if − no t # ’( lambda ( x ) (< x p i v o t ) ) l i s t ))
( r e m o v e − if − no t # ’( lambda ( x ) (= x p i v o t ) ) list )
( qs ( r e m o v e − if − no t # ’( lambda ( x ) (> x p i v o t ) ) l i s t ))))))
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 49 / 96
37
In 1960, John McCarthy published a remarkable paper in which he did for program-
ming something like what Euclid did for geometry. He showed how, given a handful
of simple operators and a notation for functions, you can build a whole programming
language. He called this language Lisp, for “List Processing,” because one of his key
ideas was to use a simple data structure called a list for both code and data.
It’s worth understanding what McCarthy discovered, not just as a landmark in the
history of computers, but as a model for what programming is tending to become
in our own time. [. . . ] It seems to me that there have been two really clean,
consistent models of programming so far: the C model and the Lisp model. [. . . ]
Lisp wasn’t designed to fix the mistakes in Fortran; it came about more as the
byproduct of an attempt to axiomatize computation. (Source: Paul Graham, see
http://www.paulgraham.com)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 49
1960s
38
1960s – Some Important Events:
! Cold war
! Cuba crisis
! Vietnam war
! Apollo programme
! Rock music
! Black civil rights movement
! Great Proletarian Cultural Revolution in China (death toll 20 to 30 million)
! Mass socialist or communist movement in most European countries (particularly
France and Italy)
! Student protest culture
! Computers becoming used outside science and military
! Gradual progress in programming language design
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 50
1960s
! Basic was developed by John George Kemeny and Thomas Eugene Kurtz at the Dartmouth College
! COBOL
39
Basic
Procedure q S o r t ( A rr a y a ( 1 ) , f i r s t I n d e x , lastIndex )
Protected lo w , h i g h , p i v o t V a l u e
low = f i r s t I n d e x
high = l a s t In d e x
pivotValue = a (( f i r s t I n d e x + l a s t I n d e x ) / 2)
Repeat
W h i l e a ( low ) < p i v o t V a l u e
low + 1
Wend
If l o w <= h i g h
Swap a ( l o w ) , a ( high )
low + 1
high − 1
EndIf
If f i r s t I n d e x < high
qSort (a () , fi r st I n d ex , high )
EndIf
I f low < l a s t I n d e x
q S o r t ( a ( ) , lo w , l a s t I n d e x )
EndIf
EndProcedure
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 52 / 96
The original BASIC was designed in 1964 by John George Kemeny and Thomas
Eugene Kurtz at Dartmouth College in New Hampshire, USA to provide computer
access to non-science students. (Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 52
40
Cobol
Implementation is not shown, because
1. Cobol is too ugly
2. Originally, you could not implement recursion in Cobol at all (it is a language for business people, after all)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 53 / 96
41
1970s
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 54
42
1970s
! C, developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating
system. The one and only systems language. Imperative and procedural, a better high level assembly.
! Prolog , invented by Alain Colmeraue, is a general purpose declarative logic programming language mainly
used for artificial intelligence and computational linguistics.
! Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott Wallace, and other created Smalltalk-80 at
Xerox PARC, the mother of all (good) object-oriented languages, based on Simula (from the 60s!)a
a So OO is indeed a very old technology.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 55 / 96
Hackers
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 56 / 96
43
C
void quick ( i n t ∗ l e f t , i n t ∗ r i g h t )
{
i f ( right > left ) {
i n t p i v o t = l e f t [ ( r i g h t −l e f t ) / 2 ] ;
int ∗r = right , ∗ l = l e f t ;
do {
w h i l e ( ∗ l < p i v o t ) l ++;
w h i l e ( ∗ r > p i v o t ) r −−;
i f ( l <= r ) {
int t = ∗ l ;
∗ l++ = ∗ r ;
∗ r−− = t ;
}
} w h i l e ( l <= r ) ;
quick ( l e f t , r ) ;
quick ( l , r i g h t ) ;
}
}
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 57 / 96
44
Prolog
sort ( [] , [ ] ).
qsort ( [X] , [X] ) .
q s o r t ( [ H | U ] , S ) :− s p l i t B y (H, U , L , R ) , q s o r t ( L , SL ) , q s o r t ( R , SR ) ,
c om b in e (H, SL , SR , S ) .
% s p l i t B y ( H, U , LS , RS )
% True i f LS = { L i n U | L <= H } ; RS = { R i n U | R > H }
s p l i t B y ( H, [ ] , LS , RS ) .
s p l i t B y ( H, [ U | T ] , [ U | LS ] , RS ) :− U =< H, s p l i t B y (H , T , LS , RS ) .
s p l i t B y ( H, [ U | T ] , LS , [ U | RS ] ) :− U > H, s p l i t B y (H , T , LS , RS ) .
% c ombine ( H, L , R , S )
% True i f S i s L ++ [ H ] ++ R ( i n H a s k e l l n o t a t i o n )
c om bine ( H, L , R , S ) :− a ppe nd ( L , [ H | R ] , S ) .
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 58 / 96
45
Smalltalk
" T h i s must be i n s e r t e d in to the c l a s s A r r a y a s an i n s t a n c e method "
q u i c k s o r t : l to : r
" s o r t s t h e a r r a y be tw e e n l and r a f t e r t h e q u i c k s o r t method
by M i c h a e l Neumann 1998
"
| m i l i r temp |
( r > l ) ifTrue : [
m ← s e l f a t : ( ( l + r ) // 2 ) .
il ← l .
ir ← r .
[
[ ( s e l f a t : i l ) < m] w h i l e T r u e : [ i l ← i l + 1 . ] .
[ ( s e l f a t : i r ) > m] w h i l e T r u e : [ i r ← i r − 1 . ] .
( i l < i r ) ifTrue : [
" swap "
temp ← s e l f a t : i l .
s e l f at : i l put : ( s e l f at : i r ) .
s e l f a t : i r p u t : temp .
].
] d o U n t i l : [ i l >= i r . ] .
s e l f q u i c k s o r t : l to : ( i l − 1 ) .
s e l f q u i c k s o r t : ( i l + 1) to : r .
].
↑self .
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 59 / 96
46
1980s
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 60
47
1980s
! C++ was invented as a better (really?!) C by Bjarne Stroustrup. It is a multi-paradigm language
supporting procedural programming and OO concepts.
! Guido van Rossum created Python, a modern script language with functional and OO elements.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 61 / 96
C++ – I
#i n c l u d e <i t e r a t o r >
# i n c l u d e <a l g o r i t h m > / / f o r s t d : : p a r t i t i o n
#i n c l u d e <f u n c t i o n a l > // f o r s t d : : l e s s
// h e l p e r f u n c t i o n f o r median of three
t e m p l a t e <t y p e n a m e T>
T m e d i a n (T t1 , T t2 , T t 3 )
{
i f ( t1 < t2 )
{
i f ( t2 < t3 )
r e t u r n t2 ;
e l s e i f ( t1 < t3 )
r e t u r n t3 ;
else
r e t u r n t1 ;
}
else
{
i f ( t1 < t3 )
r e t u r n t1 ;
e l s e i f ( t2 < t3 )
r e t u r n t3 ;
else
r e t u r n t2 ;
}
}
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 62 / 96
48
C++ – II
/ / h e l p e r o b j e c t t o g e t <= f r o m <
t e m p l a t e <t y p e n a m e Order > s t r u c t n o n _ s t r i c t _ o p :
p u b l i c s t d : : b i n a r y _ f u n c t i o n <t y p e n a m e O r d e r : : s e c o n d _ a r g u m e n t _ t y p e ,
ty pe na me Order : : fir st_ar g um ent_ t yp e ,
bool>
{
n o n _str ic t_o p ( Order o ) : o r d e r ( o ) {}
b o o l o p e r a t o r ( ) ( t y pe na me Order : : second_argument_type arg1 ,
ty pe na me Order : : f i r s t _ a r g u m e n t _ t y p e ar g 2 ) c o n s t
{
r e t u r n ! o r d e r ( arg2 , arg 1 ) ;
}
private :
Order o r d e r ;
};
...
t e m p l a t e <t y p e n a m e R a n d o m A c c e s s I t e r a t o r >
v oid q u i c k s o r t ( RandomAccessIterator f i r s t , RandomAccessIterator last )
{
qui c k s o r t ( f i r s t , last ,
s t d : : l e s s <t y p e n a m e s t d : : i t e r a t o r _ t r a i t s <R a n d o m A c c e s s I t e r a t o r > : : v a l u e _ t y p e > ( ) ) ;
}
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 63 / 96
Python
def qsort ( l i s t ) :
i f no t l i s t :
return [ ]
else :
pivot = l i s t [0]
less = [ x for x in l i s t i f x < pivot ]
more = [ x f o r x i n l i s t [ 1 : ] i f x >= p i v o t ]
r e t u r n q s o r t ( l e s s ) + [ p i v o t ] + q s o r t ( more )
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 64 / 96
49
1990s
1990s cont.
http://info.cern.ch/
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 66 / 96
50
1990s cont.
! Haskell, named after logician Haskell Curry is a standardized, general-purpose purely functional
programming language, with non-strict semantics and strong static typing. “A proof is a program; the
formula it proves is a type for the program”. Designed by Simon Peyton Jones, Paul Hudak, Philip
Wadler, et al. Used in the research community.
! Java invented by SUN (James Gosling, Mike Sheridan, and Patrick Naughton), is a general purpose OO
language with C++ syntax.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 67 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 67
51
Haskell
q s o r t : : Ord a => [ a ] −> [ a ]
qsort [ ] = [ ]
q s o r t ( p : x s ) = q s o r t l e s s e r ++ [ p ] ++ q s o r t greater
where
l e s s e r = f i l t e r (< p ) x s
g r e a t e r = f i l t e r (>= p ) x s
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 68 / 96
52
Java
p u b l i c s t a t i c <E e x t e n d s C o m pa r a ble <? s u p e r E>> L i s t <E> q u i c k S o r t ( L i s t <E> a r r ) {
i f ( a r r . s i z e ( ) <= 1 )
return arr ;
E p i v o t = a r r . g e t F i r s t ( ) ; // T h i s p i v o t c a n c ha ng e t o g e t f a s t e r r e s u l t s
// P a r t i t i o n
f o r (E i : a r r ) {
i f ( i . compareTo ( p i v o t ) < 0 )
l e s s . add ( i ) ;
e l s e i f ( i . compareTo ( p i v o t ) > 0 )
more . add ( i ) ;
else
p i v o t L i s t . add ( i ) ;
}
// R e c u r s i v e l y s o r t s u b l i s t s
l e s s = quickSort ( l e s s );
more = q u i c k S o r t ( more ) ;
// C o n c a t e n a t e r e s u l t s
l e s s . addAll ( p i v o t L is t );
l e s s . a d d A l l ( more ) ;
return less ;
}
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 69 / 96
53
Java refers to a number of computer software products and specifications from Sun
Microsystems, a subsidiary of Oracle Corporation, that together provide a system
for developing application software and deploying it in a cross-platform environment.
Java is used in a wide variety of computing platforms from embedded devices and
mobile phones on the low end, to enterprise servers and supercomputers on the high
end. Java is used in mobile phones, Web servers and enterprise applications, and
while less common on desktop computers, Java applets are often used to provide
improved and secure functionalities while browsing the World Wide Web. Writing
in the Java programming language is the primary way to produce code that will
be deployed as Java bytecode, though there are bytecode compilers available for
other languages such as Ada, JavaScript, Python, and Ruby. Several new languages
have been designed to run natively on the Java Virtual Machine (JVM), such as
Scala, Clojure and Groovy. Java syntax borrows heavily from C and C++, but
object-oriented features are modeled after Smalltalk and Objective-C. Java elimi-
nates certain low-level constructs such as pointers and has a very simple memory
model where every object is allocated on the heap and all variables of object types are
references. Memory management is handled through integrated automatic garbage
collection performed by the JVM.
The Java platform and language began as an internal project at Sun Microsystems
in December 1990, providing an alternative to the C++/C programming languages.
Engineer Patrick Naughton had become increasingly frustrated with the state of
Sun’s C++ and C APIs (application programming interfaces) and tools. While con-
sidering moving to NeXT, Naughton was offered a chance to work on new technology
and thus the Stealth Project was started. The Stealth Project was soon renamed
to the Green Project with James Gosling and Mike Sheridan joining Naughton. To-
gether with other engineers, they began work in a small office on Sand Hill Road
in Menlo Park, California. They were attempting to develop a new technology for
programming next generation smart appliances, which Sun expected to be a major
new opportunity. The team originally considered using C++, but it was rejected
for several reasons. Because they were developing an embedded system with lim-
ited resources, they decided that C++ demanded too large a footprint and that
its complexity led to developer errors. The language’s lack of garbage collection
meant that programmers had to manually manage system memory, a challenging
and error-prone task. The team was also troubled by the language’s lack of portable
facilities for security, distributed programming, and threading. Finally, they wanted a
platform that could be easily ported to all types of devices. Bill Joy had envisioned
a new language combining Mesa and C. In a paper called Further, he proposed
to Sun that its engineers should produce an object-oriented environment based on
C++. Initially, Gosling attempted to modify and extend C++ (which he referred
to as “C++ ++ –”) but soon abandoned that in favor of creating an entirely new
language, which he called Oak, after the tree that stood just outside his office.
(Source: Wikipedia)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 69
54
2000s
2000s: Clouds. . .
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 70 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – note 1 of slide 70
55
MapReduce
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 71 / 96
56
Interpretation of Paradigms
record
Descriptive
declarative
The principal programming paradigms
programming
XML, "More is not better (or worse) than less, just different."
Data structures only S−expression
Turing equivalent + procedure v1.08 © 2008 by Peter Van Roy
Nondet. state
Unnamed state (seq. or conc.) Named state
More declarative Less declarative
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 73 / 96
Shooting Yourself
How to Shoot Yourself In the Foot Using Any Programming Language:
! C: You shoot yourself in the foot and then nobody else can figure out what you did.
! C++: You accidentally create a dozen clones of yourself and shoot them all in the foot. Emergency medical
assistance is impossible since you can’t tell which are bitwise copies and which are just pointing at others and
saying, “That’s me, over there.”
! Java: After importing java.awt.right.foot.* and java.awt.gun.right.hand.*, and writing the classes and methods of
those classes needed, you’ve forgotten what the hell you’re doing.
! Haskell: You shoot yourself in the foot very elegantly, and wonder why the whole world isn’t shooting itself this
way.
! Lisp: You shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage
which holds the gun with which you shoot yourself in the appendage which holds the gun with which you shoot. . .
! Smalltalk: You shoot yourself in the foot and your foot sends doesNotUnderstand: Pain to your brain.
! XML: You can’t actually shoot yourself in the foot; all you can do is describe the gun in painful detail.
(Sources: http://www.toodarkpark.org/computers/humor/shoot-self-in-foot.html and http://thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html)
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 74 / 96
57
Programming Languages as seen by Fans
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 75 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 76 / 96
58
A Brief History of Networks 77 / 96
Unfortunately, this is the topic for another lecture, please ask Prof. Hoffmann for next year’s Xmas lecture!
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 78 / 96
213.251.145.96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 79 / 96
59
A Brief History of Applications 80 / 96
Important Applications
Warning: The following choice is ridiculously subjective!
Mathematica
MS BASIC gcc
Visual C++
WordStar Emacs Photoshop
Micro vi VisiCalc TEX Mosaic
DBMS Sendmail Apache RSS MapReduce
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 81 / 96
60
A Brief History of Challenges 84 / 96
Different Disciplines
Engineering Science
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 85 / 96
61
Speaking Different Languages – Example II
software engineer: Haskell does not have side effects?
computer scientist: Haskell is a pure functional language!
software engineer: ?
computer scientist: Sigh, a pure functional language does not have any side effects, so it was
designed!
software engineer: So I cannot change state?
computer scientist: You do not understand - there is no state!
software engineer: So, please – how do I implement input/output?
computer scientist: You have to use monads!
software engineer: For goodness’ sake, what is a monad?
computer scientist: A monad is a monoid in the category of endofunctors, what’s the problem?
software engineer: WTF?!
We teach computer science, but the industry desperately needs (software) engineers [Par97]. The effect is
roughly the same as it would be if you assigned a physics Ph.D. to design electrical equipment!
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 87 / 96
62
How to deal with Complexity?
Politically correct answer:
Software Engineering!
The truth is:
Outlook 90 / 96
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 91 / 96
63
Appendix 92 / 96
References
[Neu45] John von Neumann. First draft of a report on the edvac. IEEE Ann. Hist. Comput., 15(4):27–75, October 1945.
[Par97] David Lorge Parnas. Software engineering (extended abstract): an unconsummated marriage. In Proceedings of
the 6th European SOFTWARE ENGINEERING conference held jointly with the 5th ACM SIGSOFT
international symposium on Foundations of software engineering, ESEC ’97/FSE-5, pages 1–3, New York, NY,
USA, 1997. Springer-Verlag New York, Inc.
[RT74] D. M. Ritchie and K. Thompson. The unix time-sharing system. Communications of the ACM, 17:365–375,
1974.
[Sho97] Peter W. Shor. Polynomial-time algorithms for prime factorization and discrete logarithms on a quantum
computer. SIAM J. Comput., 26:1484–1509, October 1997.
[Tur01] Alan M. Turing. Collected works of A. M. Turing. Mathematical logic. Elsevier, Amsterdam, The Netherlands,
2001. Edited by R. O. Gandy and C. E. M. Yates. Including prefaces by Solomon Feferman.
[Wit22] Ludwig Wittgenstein. Tractatus Logico-Philosophicus. Kegan Paul, Trench, Trubner & Co., 1922.
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 93 / 96
Credits – I/III
! c
Stonehenge: !2009 David Ball – www.davidball.net
! Al-Chwarizmi: John L. Esposito. The Oxford History of Islam. Oxford University Press, copyright expired
! c
Da Vinci: !IBM
! Pascaline: !
CC 2005 David Monniaux
! Leibniz: Page of the Article “Explication de l’Arithmétique Binaire”, 1703/1705, copyright expired
! c
Steampunk: !2007 Jake von Slatt
! c
Power (Jacquard) Looms: !2009 Lutz Marx
! Zuse: !
CC ComputerGeek, public domain
! c
Alan Turing: !1951 National Portrait Gallery, London, http://www.npg.org.uk/
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 94 / 96
64
Credits – II/III
! Grace Hopper: public domain
! Sliderule: !
CC Creative Commons Attribution-Share Alike 3.0 Unported
! Moore’s Law: !
CC Creative Commons Attribution-Share Alike 3.0 Unported
! Unix: !
CC Creative Commons Attribution-Share Alike 3.0 Unported
! MacIntosh: !
CC Creative Commons Attribution-Share Alike 2.5 Italy http://www.allaboutapple.com/
! PC: !
CC Creative Commons Attribution-Share Alike 3.0 Unported
! Android: !
CC Creative Commons Attribution-Share Alike 3.0
! Quantum Computing: !
CC Smite-Meister, Creative Commons Attribution-Share Alike 3.0 Unported
! c
Programming Languages !1999-2010 Éric Lévénez http://www.levenez.com/lang/
! Bletchley Park: !
CC Matt Crypto, public domain
! 1950s: !
CC 2006 Hans Weingartz http://www.pass-weingartz.de/hw.htm CC-by-sa 2.0/de
! c
Twiggy: !2001-2005 www.twiggylawson.co.uk
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 95 / 96
Credits – III/III
! Thompson Ritchie: public domain
! Berlin Wall: !
CC Unknown photographer, Creative Commons-Lizenz Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported
! Bill Clinton, Yitzhak Rabin, Yasser Arafat at the White House: public domain
! c
Clouds: !2008 Jörg Schäfer
! c
MapReduce: !2004, Jeffrey Dean and Sanjay Ghemawat, Google Inc.
! c
Principles Programming Paradigms: !2007 Peter Van Roy http://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng.pdf
! Engineers: http://s882.photobucket.com/albums/ac30/Pvt_Hawkins/
! c
Einstein: !1921, Ferdinand Schmutzer, copyright expired
c
!Jörg Schäfer http://user.fh-frankfurt.de/~jschaefer/lectures/ A Brief History of Computing – 96 / 96
65