[reference - 什么塑造了今天定编程世界]
- 1822: Charles Babbage designed The Difference Engine (差分机)
- 1843: Ada Lovelace designed the first algorithm on The Difference Engine
- 1928: David Hilbert proposed a challenge "Is there a way to justify whether a mathematical problem is decidable?"
- 1936: Alonzo Church and Alan Turing answered the deterministic problem by Lambda Calculus and Turing Machine respectively (Defined computability)
- 1938: Konrad Zuse made Z1, the first electrically driven, programmable
- 1945: Konrad Zuse developed the first high-level programming language, Plankalkul
- 1945: stored-program computer EDVAC report became the first draft of von Neumann Architecture > binary; storage devices are separated from CPU for data and instructions storage; 5 logic units
- 1949: Maurice Wilkes proposed a microprogram design > partition a complex instructions into a series of simple instructions, known as microcode (in later definition, it is called function)
- 1951: Maurice Wilkes and his team invented an assembler to avoid working directly with binary
- 1957: John W. Backus and his team in IBM invented Fortran and an efficient Compiler, also added Comment for readability
- 1958: John McCarthy, the father of artificial intelligent, invented Lisp. It soon became the most favorite language among researchers
- 1960s: The concept of software became important (Before that, only hardware was considered as engineering, computer and programming was merely considered as mathematical theory)
- 1963: Donald Knuth started to write his masterpiece The Art of Computer Programming, or TAOCP. He invented TeX for math formatting on computer and vector font programming language METAFONT
- 1964: IBM launched Type-029 key punch (80-column punch cards became an industry standard) > The keyboard interacted with punch cards, then punch cards were fed into computer for execution
- 1964: John G. Kemeny and Thomas Kurtz wanted to promote programming to non-STEM students and invented BASIC (It was the default language for the early portable PC. Microsoft still supports it today as VB.Net)
- 1966: The first network-based database management system DBMS was developed by GE. The first hierarchical database management system IMS was developed by IBM, supported by NASA's moon landing project
- 1967: Simula 67 was invented in Norway as the first Object-oriented Programming Language with concepts like class, object, inheritance, virtual method, etc.
- 1968: Edsger W. Dijkstra published Go To Statement Considered Harmful
- 1969: 29th, Oct. first message was sent via ARPANET. Four computers at 4 universities in the US were connected with network. Internet was invented
- 1969: Ken Thompson invented B language in order to develop Unix. Later Dennis Ritchie modified it and invented C programming language
- 1970: Unix Epoch Time > Started from 1970-01-01 00:00:00
- 1970: Niklaus Wirth in ETH Zurich invented a programming language for pragmatic purpose Pascal. His famous quote was "Algorithms + Data Structures = Programs"
- 1970: Edgar F. Codd in IBM thought hierarchical database lacked convenient query capabilities. He then published a paper "A relational Model of Data for Large Shared Data Banks". IBM started System R project to study the feasibility of relational databases
- 1970: Alan Kay joined an investigation of Personal Computer and Human-Computer Interaction. The experimental prototype called Alto had Graphic UI (GUI) and mouse. Although it was not massively produced, it later inspired Apple and Sun for their micro-computer
- 1971: Wirth published a paper "Program Development by Stepwise Refinement" on ACM, and proposed the term structured programming. He suggested beginning not with an executable program but a highly abstract design, then gradually refining it into concrete code
- 1972: Alan Kay and his team in Xerox PARC developed the second OOP language Smalltalk which had a different dynamic messaging mechanism from Simula
- 1973: The fourth version of Unix was re-built with C. Until today, the OS kernel is still predominately using C (Over 98% codes for Linux Kernel is written with C)
- 1973: Inspired by French CYCLADES network, Robert E. Kahn and Vinton Cerf started to design a new and reliable data transfer protocol. By 1973, they finished the first version of TCP
- 1974: Ken Thompson and Dennis Ritchie published "The UNIX time-sharing system". However, due to the anti-monopoly restriction of AT&T, which is the affiliated institution of Bell Lab, Unix could not be commercialized. This coincidence led the birth of BSD, GNU and Linux eventually
- 1975: In the 60s, IBM invested the development of System/360, it was a big success but required 5000 man-years for its OS/360, which was also called "the most horrific software development project in history". The project manager of OS/360 Frederick Brooks published The Mythical Man-Month to discuss the project management of a large teams
- 1976: With the invention of Diffie-Hellman key exchange, D-H and RSA algorithm, asymmetric cryptograph was finally achieved
- 1979: Glenford J. Myers first differentiated Debugging and Testing, and software testing became a separate subject
- Later 1970s: The use of Integrated Development Environment, IDE gradually emerged
- 1981: IBM launched IBM PC and became the mainstream. The era of Personal Computer (PC) started
- 1983: TCP/IP became the default protocol of ARPANET
- 1983: IBM PC went into China. However, DOS could not handle Chinese characters. Researcher 严援朝 (Yan Yuanchao) led a team to make DOS support Chinese, called CCDOS. 严援朝 opened all CCDOS source code and later inspired Japanese researchers to solve their similar issues
- 1983: Richard M. Stallman started project GNU and advocated the software freedom. Later, he publish GNU Manifesto
- 1984: Under the influence of Smalltalk, Objective-C was invented as a language to "add OOP to C" (Until Apple invented Swift in 2014, Objective-C was the most important language in Apple eco-system)
- 1985: Bjarne Stroustrup integrated some features of Simula language into the compiler of C to enable a new language that are suitable for large scale software development. This was the birth of the first version of C++, which is a complex language supported multiple programming paradigms
- 1987: Larry Wall wanted an easy tool and invented a new programming language called Perl which does not require to compile and can easily to connect a series of small tools on Unix to complete a complex task. However, since Perl was grammatically flexible, it was hard to read and became one of the "write-only" languages. Nowadays, it is gradually being replaced by Python
- 1988: Alan Cooper demonstrated his under-developing GUI to Bill Gates. Later this became Visual Basic which allows user to do software development simply by dragging components
- 1989: Sir Tim Berners-Lee in CERN made the first web server, the first web browser, URL, HTML and HTTP. That denoted the birth of World Wide Web, WWW and network became important to the general public rather than profession only
- 1980s: GUI became popular. Apple launched Lisa in 1983, Amiga 1000 iin 1985. Windows 1.0 was also launched in 1985
- 1980s: From the 80s to 90s, Unix War became a huge challenge of commerce, law, software patten, etc. The only positive consequence might be the birth of POSIX standard
- 1990: Guido van Rossum made a personal project for his Christmas holiday, but soon it became a widely accepted new programming language > Python. Unlike Perl, one of the Zen of Python is that "it is the best to have only one way of doing one thing"
- 1991: Linus Torvalds published his personal project to the web > Linux. It adopted GPL license and provided a reliable OS kernel for GNU project. Nowadays, most of the network services, cloud services cannot be running without Linux
- 1991: Phil Zimmermann wrote the first cryptograph app for personal use > PGP. Since the length of its private key was greater than 128 bits, which was greater than the US cryptograph app regulation, the US government conducted a crime investigation on him. He published all the source codes of PGP as a book, then lawfully protected his works with the 1st amendment of American constitution. Therefore, source codes became parts of the "free speech"
- 1995: James Gosling designed a new language in Sun which was suitable for smart electronic devices. In order to be easy, safe, portable, and good performance, he made it running on a virtual machine and manage memory dynamically via Garbage Collection, GC. The language was Java and its virtual machine JVM. In 2008, when Android emerged, Java became its default language, and fulfilled its original goal > embedded to smart devices
- 1995: 行広 松本 (Yukihiro Matsumoto) started an important programming language from Asia, called Ruby. His philosophy, unlike other programming languages, was "Programmer Happiness". In 2004, David H. Hansson made a web framework Ruby on Rails, RoR open source, which once dominated the web startup world
- 1995: Brendan Eich was assigned a task to provide a scripting language for client side of the browser which should "be like Java". He, as a fan of functional programming, only used some basic grammar of Java and added tones of features of functional programming. That was the birth of JavaScript, a language that actually has nothing in common with Java. In 2007, Atwood stated a famous law > "Any application that can be written in JavaScript, will eventually be written in JavaScript"
- 1995: In the early age, people used C, C++, Perl, etc. with many customized frameworks or scripts to set up websites. Rasmus Lerdorf ended it with "Best Language Even" > PHP, which became the standard of web community. "Linux + Apache + MySQL + PHP" was once considered as the web development stack. Nowadays, only Linux remains unchanged, while the other three have many variations and alternatives. PHP's influence still remains on Internet, for example, people can still use WordPress as a flexible template for web development
- 1999: At the beginning of Internet, the roles of each computers connected via the network were fairly equal. However, gradually, asymmetry was developed between client and server sides. In 1999, the concept of Peer-to-peer network, P2P emerged. Client side began to take more responsibility again. Till today, there are new P2P products coming out every 10 years (from BitTorrent to Bitcoin and other Blockchain technologies)
- 2000s: In the late 90s, many apps had their web version. However, JavaScript was bad at acquiring data, Microsoft added XMLHttp plugin for their browser, and other browsers followed. By the beginning of 2000s, dynamically acquiring data became popular under a name Web 2.0. As more business logics could be done on browser, Frontend Development became formally a job title
- 2001: In the late 90s, the second software crisis occurred. Because of lack of effective development management to cope increasing complexity and scale, many large projects were facing delay, failure and quality under expectation. In 2001, a group of developers gathered in Utah, USA, and published Manifesto for Agile Software Development to revolve software development process
- 2003: LLVM was built as a powerful infrastructure for compiling. Its modularity and complete intermittent representation, IR made it way more powerful than similar products. A bunch of new languages were born because of it, like Swift, Rust and Julia
- 2005: In order to satisfy the version control of Linux kernel, Linus Torvalds designed a tool called Git
- 2008: GitHub was on as a server of Git projects
- 2008: As Apple launched their first iPhone SDK, Google launched their Android 1.0 SDK, the competition of mobile system was on
- 2009: With the usage of network environment and multi-cores of CPU, programming languages were either effective but hard to learn like C/C++, or easy to learn but not effective for hardware and web resources. Robert Griesemer, Rob Pike and Ken Thompson designed a new language called Go. It was based on goroutine and channel from the CSP theory to resolve the problems of concurrency and messaging. Also, it came out at a time when the trend of Cloud Computing and Containerization were just beginning
- 2010: Graydon Hoare invented Rust which has similar philosophy as an old programming language in the 1980s called Ada. Unlike other languages, Rust provides a safe memory management mechanism without GC, plus an easy and safe multiprocessing mode. It reaches the performance of C++ program, making it an alternative to C/C++
- 2013: Docker standardized the concept of containerization and sandbox. It truly achieved "build it once, run it everywhere". Docker unified the environment of development, testing and production. Kubernetes is an open source container system from Google, which allows automatically deploy containers. It started a "cloud-oriented" way of development
- 2014: In 2010, Steve Jobs published Thoughts on Flash and made HTML5 a popular topic. 4 years later, HTML5 was published as a new standard of web apps (with fewer restrictions and more standardization)