Code As Object - Lecture 1

What is code?

What is code?

Code is a way for humans to communicate with computers in order to produce a result.*




* I made this definition up. Literally everything in this lecture is contestable, which we'll talk about more as we continue.

What is a computer?

To answer that question we'll look at the history of computing.

The history of computing is a huge topic. I'm streamlining this history based on what I think is relevant to a class about code. Check the class site for a slew of links and book suggestions if you want more history, and more discussion of how the history of computing is complicated and problematic.

On that note, remember that everything in this lecture is contestable. I've done my best to make sure this is all factually correct where possible.

Here we go.

The Jaquard Loom - 1801

Luddites - 1811


Later interpretation of machine breaking (1812), showing two men superimposed on an 1844 engraving from the Penny magazine which shows a post 1820s Jacquard loom.

Charles Babbage - The Difference Engine - 1822
Charles Babbage - Analytical Engine - 1822

The Analytical Engine incorporated an arithmetic logic unit, control flow in the form of conditional branching and loops, and integrated memory, making it the first design for a general-purpose computer that could be described in modern terms as Turing-complete.

Ada Lovelace - 1833

Ada Lovelace - 1833

Ada Lovelace - 1833

The operating mechanism can even be thrown into action independently of any object to operate upon (although of course no result could then be developed). Again, it might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine. Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent.

1936

Allan Turing proposes the idea of a Turing machine

PowerPoint is Turing Complete

ENIAC - 1943
First large scale general purpose electronic computer in the United States. Arguably the first Turing complete computer.
ENIAC used vacuum tubes (thermionic valves). ENIAC Tubes

Around the same time in England, Colossus, a series of computers specifically designed to do codebreaking was created. Powerful and used vacuum tubes, but technically not Turing complete, having been designed to solve specific problems.

Also, the Z3 was a German electromechanical computer designed by Konrad Zuse in 1935, and completed in 1941. It was the world's first working programmable, fully automatic digital computer. The Z3 was built with 2,600 relays, implementing a 22-bit word length that operated at a clock frequency of about 4–5 Hz. Program code was stored on punched film.

For more on this, read PROGRAMMING THE ENIAC: AN EXAMPLE OF WHY COMPUTER HISTORY IS HARD By Leonard J. Shustek

Von Neumann Architecture
1945

Von Neumann Architecture II
Manchester Baby
21st June 1948
The world's first stored-program electronic digital computer successfully executes its first program.
Machine Language

Although it looks meaningless to most humans, this pattern of ones and zeros contains all of the commands and data required to complete the task. For example, when the microprocessor encounters the bit pattern: 00000011 11000011, it interpreters it as a command to take the 16 bits stored in the BX register, add them in binary to the 16 bits stored in the AX register, and store the result in the AX register. This level of programming is called machine code, and is only a hair above working with the actual electronic circuits.

Assembly Lanugage

Since working in binary will eventually drive even the most patient engineer crazy, these patterns of ones and zeros are assigned names according to the function they perform. This level of programming is called assembly, and an example is shown in Table 4-4. Although an assembly program is much easier to understand, it is fundamentally the same as programming in machine code, since there is a one-to-one correspondence between the program commands and the action taken in the microprocessor.

Kathleen Booth is usually credited as inventing/developing assembly language while working on ARC at Birkbeck College.

FLOW-MATIC - 1955

Direct precursor of COBOL

Grace Hopper

Quick Wikipedia recap of the next 50 years.
Programming Paradigms