History of computing

Writing about the history of computing is challenging because of the complexity of any one computer, the speed with which computer technology has evolved, and the many different types of computers that have been built. Further, since computing reaches into so many different industries (such as telephony, automobiles, or cameras) and has spawned a huge industry for the making of hardware and software for computers, it is difficult to know where such a history should stop.

This article is organized in sequential order, to present the major events in the development of general-purpose computing devices, including the basic evolution of their hardware components and software concepts. The article is organized by decade. Technologies appear, not in the decade in which they were first imagined or in which experimental versions became available, but in the decade in which they became widely accepted.

Early devices (ancient times)
Long before the arrival of mechanical computing, ancient civilizations devised various methods to calculate and keep track of numbers.

Salamis Tablet (300 B.C.)
A very early counting device, the Salamis Tablet, was used by the Babylonians to track numbers in their society.

Abacus (300 B.C.)
The abacus, a mechanical aid to performing arithmetic, dates back many centuries and is still in use in various forms.

Mechanical computing (Renaissance to 1900)
The human longing for mechanical help in performing complex computations existed for a long time before technology was advanced enough to realize a practical solution. These are some of the attempts to create computing machines before technology was sufficiently advance to make that very feasible.

Codex Madrid (Da Vinci)
On 13 February 1967, the "Codex Madrid", written by Leonardo Da Vinci, was discovered in the National Library of Spain by Dr. Roberto Guatelli. Inside the Codex Madrid was a drawing for an elaborate mechanical computational device. Guatelli noticed that a similar construct appeared in Da Vinci's "Codex Atlanticus". A prototype of this machine was created in 1968, and was observed that it exhibited traits of a ratio machine. One revolution of the first shaft(10^1) invoked ten revolutions of the second(10^2), repeating until the last shaft which rotated at a rate of ten to the power of 13. Whether this was a true computational device was under some debate. Previously been displayed at IBM, the exhibit was removed due to a non-consensus, and is presumed to be in one of IBM's storage facilities.

Pascaline (1642)
An early mechanical computational device is the Pascaline, created by Blaise Pascal circa 1642. The Pascaline performed simple addition and subtraction. The concept of the pascaline came about from the carrying of places by gear rotation. Functionally, the machine worked by increasing values on a single cog, which ranged from values 0 to 9. Upon the next rotation, a series of cogs would rotate the next gear over one iteration to read 1 while the first cog would reset back to 0.

Charles Babbage (early 1800's)
It would take Charles Babbage (26 December 1791 – 18 October 1871) was inducted as a Fellow of the Royal Society to develop the first real successful automatic calculating machine. In 1821, Babbage developed the Difference Engine No. 1, which was a functional machine designed to compile mathematical tables based on polynomial calculation. . The difference engine's physical algorithm was based on a mathematical technique known as the Method of Differences, which Babbage contributed work on. Unfortunately only a fragment of the machine would ever come to fruition due to various financial disputes and accusations of fund mismanagement from the British Government. More importantly, the machine was never fully developed due to Babbage's realization of a more advanced machine called the Analytical Engine. Like the pascaline, both the Difference and Analytical Engines relied on series of cogs and gears to compute values.

Functionally, the Analytical Engine was capable of various algorithmic operations that were broken down into basic algebraic operations. Two cards would be used to program the system: the first would detail what operations were required to be performed, and the second would contain the values to be operated on. In this sense, the Analytical Machine was much like a computer, having an input (the algorithm as described on a card), a processor (the machine), an output (the result), and memory (using a storage method--the cards themselves). Babbage's associate Ada Lovelace was arguably the first computer programmer, designing algorithms for the Analytical Engine.

Hollerith and punched cards (1884)
Herman Hollerith (Buffalo, NY, February 29, 1860 – Washington, D.C. November 17, 1929) attended the City College of New York and graduated from the Columbia School of Mines in 1879 with an engineering degree. After graduating, Hollerith took up work with the United States Census Bureau, and was appointed Chief Special Agent. Hollerith's contribution to computing was inspired by his work at the USCB, especially from Dr. John Shaw Billings who suggested that there should be a way to process the large amount of census data by some mechanical means. In 1884, Hollerith worked to develop a way to tabulate census information through the use of punch cards. Eventually, he recognized that cards could be used as storage medium for census data. His experiments lead to a process by where a pin would go through a hole in the card to complete an electrical circuit. His system by which cards could be read and tabulated on a mechanical counter through a circuit completion was called the Hollerith Electric Tabulating System. By 1890, the machines were improved so that a simple keyboard could be used to tabulate data instead of entry by hand.

Switches
The discovery of electricity, along with the invention of electronic switches, including the solenoid and the switching vacuum tube, were necessary prerequisites to the invention of electronic computers.

Switching algebra
Boolean algebra, invented by George Boole in the 1850's, is an algebraic system consisting of only two values, and it was destined to become the basis for describing digital logic circuits used to build electronic computers. The realization that "switching algebra", as boolean algebra came to be known by computer designers, could be used to describe logic circuits was a major conceptual breakthrough first documented by Claude Shannon (1916-2001) in his 1937 MIT master's thesis. Shannon's thesis created a stir in the world of electronics when it began circulating in 1938, though Shannon was better known in later years for founding the field of information theory.

Computational theory
Much work on the theory of computation was done in the 1930s. Alan Turing and Alonzo Church both came up with new techniques to solve the halting problem, inventing the Turing Machine and lambda calculus respectively.

1940s: The first electronic computers
Prior to World War II, the word computer generally meant a person who computes. But during the war, the first electronic computers, machines that perform numerical calculations far faster than humans, were developed. With the notable exception of the Zuse Z3, which was developed in Germany in relative isolation, the first electronic computers were mainly the result of secret military projects funded by the British and U. S. governments.

Zuse Z3 (1941)
German engineer Konrad Zuse built the Z1 computer between 1936 and 1938. German patent applications provide evidence of Zuse's development of a mechanical memory device in 1936, used in the Z1. . Zuse built the Z2 sometime between 1936 and 1939, and the Z3 from 1939 to 1941. The German government was not supportive of Zuse's work, and evidence of the Z3's existence was discovered by Allied forces only after the end of World War II. All photographs of the Zuse Z3 were destroyed by allied raids during the war. Zuse's constructions incorporated advanced concepts, including the implementation of the binary numeral system. Having survived the war, Zuse built another computer in Switzerland, and later was the first designer to propose pipelining the computations of a computer processor. In 1949, Zuse formed Zuse KG, where he worked until 1966. Zuse's Z3 is now recognized as probably having been the first general purpose electro-mechanical computer.

Atanasoff pre-computer (1942)
Between 1937 and 1942, Dr. John V. Atanasoff and graduate student Clifford Berry, of Iowa State University, worked on a prototype electronic computer that introduced key design ideas but which never completely realized as a general purpose computing device. Some of Atanasoff's ideas may have been communicated to John Mauchly, who later assisted in the development of the ENIAC.

Colossus (1943)
Britain's Colossus project produced a series of about ten electronic computers used by British code breakers to read encrypted German messages during World War II. The first Colossus prototype was initially completed by engineer Tommy Flowers in 1943 at the Post Office Research Station, Dollis Hill, with input from mathematician Max Newman and a few others. It used the binary numeral system for calculations, utilizing vacuum tubes and very fast optical punch tape readers. By 1944, the project moved to Bletchley Park and lasted until the end of the war. Shortly after, in 1946, Winston Churchill gave official orders to have the machines destroyed

Harvard Mark I (1944)
For decades after World War II, it was widely believed that the IBM Automated Sequence Controlled Calculator(ASCC) (completed in 1944 and later called the Mark I) was the first electromechanical general-purpose computer. The idea for the Harvard Mark I automatic digital calculator was conceived by Howard H. Aiken, then a graduate student from Harvard University with a Ph. D. in theoretical physics. The machine was a hybrid of mechanical and electronic technology, performing calculations through a series of small gears, electro-mechanical counter wheels, and switches. Input occurred via punched cards, paper tape or through manually set switches to indicate the values to be processed. The output was generated by an electric typewriter or punched into additional cards. The successor to the Mark I, the Mark II, would still used relays, but also featured an electrical memory and a system of 'constant' values that were referenced during run-time.

ENIAC (1946)
At the University of Pennsylvania's Moore School of Electrical Engineering John Mauchly and J. Presper Eckert proposed the Electrical Numerical Integrator And Computer to the U.S. Army Ordnance Department's Ballistics Research Laboratory in 1943, and then served as its main designers until construction was finished in 1946. It was a military project justified by a need to compute ballistic trajectories, and was one of the earliest general-purpose, programmable electronic computers. ENIAC's computations used the decimal numeral system, instead of the binary numeral system used by most subsequent digital computers. The ENIAC was not able to store its own program in memory; it had to be programmed by setting switches on function tables and by changing the wiring. Considerable human effort was required to reprogram it.

UNIVAC and EDVAC (late 1940's)
The designers of ENIAC jointly formed the Eckert-Mauchly Computer Corporation in 1946, which was bought by Remington Rand in 1950. In 1951, this company delivered the first U. S. commercial computer, called the UNIVAC, to the United States Census Bureau. The UNIVAC was a stored-program computer, like its non-commercial sister the EDVAC. The Electronic Discrete Variable Automatic Computer was funded by the U.S. Army Ballistics Research Laboratory and was built at the Aberdeen Proving Ground in Maryland. EDVAC was build by the University of Pennsylvania's ENIAC designers Eckert and Mauchly, and by John von Neumann and some others. The EDVAC was the first computer to implement the stored-program concept. The idea was first published in Von Neumann's 1945 report First Draft of a Report on the EDVAC. Although its design predates the UNIVAC, the EDVAC did not become fully operational until 1952. Competing fiercely with IBM, the company eventually built 46 of the earliest commercial computer systems.

1950s: Hardware and the first compiler
In the decades after World War II, computers grew rapidly in usefulness while decreasing in size and cost, spawning a huge and complex industry to create hardware and software for them. But in the 1950's, they were still huge and expensive and available only to a few people.

Assemblers
Need a paragraph here with pointers to existing or future articles about specific project, products, companies or technologies.

First compiler

 * see also Fortran

Need a paragraph here with pointers to existing or future articles about specific project, products, companies or technologies.

1960s: Batch operating systems
The 1960s brought an era of commercial corporate use of computers for the first time. Groups of people used punched cards or paper tape to write programs, and then a computer operator would take the pile of stacked cards that build up and submit them as individual jobs to a large computer.

Multics

Multicians.org has a huge amount of info waiting to be mined on Multics

DARPA and the early networks
Some of the critical key concepts included the concepts of packet switching from Paul Baran and Leonard Kleinrock, and of interconnected heterogeneous networks, first called catenets, by Louis Pouzin and Vinton Cerf, with J.R. Licklider providing project direction and government support. These concepts led, by the 1980's, to the Internet.

Time-sharing operating systems: the birth of UNIX and C
Need a paragraph here with pointers to existing or future articles about specific project, products, companies or technologies.

Mini-computers: hardware gets smaller
Need a paragraph here with pointers to existing or future articles about specific project, products, companies or technologies.

Computer programming languages
During the 1970s, a variety of new programming languages emerged - the C programming language being the one which is still widely used in system programming. In addition, a variety of higher level languages emerged: Charles Moore's Forth, the logic programming language Prolog, and the beginning of the competitive process to develop Ada was started, which would later become the language used for military and aviation programming. The Lisp dialect, Scheme was also created, which would later become the language used in Structure and Interpretation of Computer Programs, the introductory programming course for MIT undergraduates.

Many programming languages also became more standardized, with the American National Standards Institute (ANSI) publishing specifications for COBOL, Fortran 77 and MUMPS.

Personal computers
The "big three" (Apple, Commodore and Tandy-Radio Shack); the IBM compatible PC and Microsoft MS-DOS

The Internet
Need a paragraph here with pointers to existing or future articles about specific project, products, companies or technologies. (Note: HTTP / the Web is specifically excluded from this decade, because the WWW came later)

Dial-up internet access for the masses
Many small companies, and some large ones such as CompuServe, sell dial-up internet access accounts to the public. Suddenly, anyone could get online and have email, although email systems were not always compatible with each other. Combined with the availability of home (personal) computers, internet usage grew astronomically.

The World Wide Web
In 1992, Tim Berners-Lee published the HTTP protocol and the HTML language, and the first web browser (Mosaic) became available. These led to what is now called the World Wide Web (or just WWW).

Object-oriented programming
Experimental computer programming languages based on object-oriented concepts were developed decades earlier, but in 1992, James Gosling and his team at Sun Microsystems began developing its Java platform which soon took the programming world by storm. Java provided an alternative to C++ for many, and is now widely used for programming on both the server and the client, as well as being taught as the first language for many students on computer science programs. Java is now a mainstay for enterprise computing. Java, like many languages before and since, uses a virtual machine architecture - the programmer writes in the Java programming language, which compiles to byte code, which itself runs on a virtual machine that abstracts away the underlying platform. The idea is that it supposedly makes it simpler to write cross-platform applications, although in practice, this is rarely as easy as the early Java hype made it sound. Java's popularity spread widely, with Java variants appearing on mobile phones (JavaME), the enterprise server (JavaEE) and on web pages (the brief phenomena of Java applets) - to the point where some people started criticizing Java's dominance.

There are also a wide variety of new programming languages appearing during the 1990s, often aimed at absolute beginners. Microsoft created Visual Basic which worked both on it's own and as part of the Office applications. 'Scripting' languages also became extremely popular: the Macintosh platform had AppleScript introduced, which has a "natural language" syntax designed for non-programmers (and which many programmers find cumbersome ). Python was a significant development, providing a simple scripting language that anyone could start using, but which had advanced object-oriented features. Ruby became popular later, offering some of the same benefits.

Open-source software
After a decade of failed attempts to make the popular Unix operating system run on low-cost Intel hardware, Linus Torvalds released the Linux operating system. Seeds planted in the 1980's by Richard Stallman's Open Software Foundation finally took root, and the open source software movement really took off, having a disruptive (and arguably positive) effect on the entire software economy.

XML, the universal translator
Another step on the road to operating system (platform) independence, the text-based standard XML for self-describing data had a huge impact. As major programming languages such as Java and C developed XML parsers, these languages could finally exchange information with each other, and much more.