I have a secret to tell. A computer program is actually nothing more than a long string of text.
It turns out that there is a device that does a superb job of creating strings of text. That device is called a computer.
I once inherited a problematic program to fix.
I realized that the customer wouldn't be happy with a simple rewrite.
I knew exactly how to rewrite the code. I also knew that I might make a mistake while writing the code as the previous programmer had done.
So, I decided to take a different tact.
Instead of writing the code, I wrote a program to write the code.
Both the customer and myself were happy with the product as the computer written code was free of the typos that hampered the original program.
The fact that writing programs to write programs was so easy made me believe that the computer industry would develop advanced methods that would let programmers examine complex programs from the high level definition of business rules to the actual machine code on the machine.
Programs that Write Programs
The idea of computer programs writing other computer programs is not that unusual.
For that matter, high level programs were designed to write low level code.
The very first computer programmers were developed by engineers who encoded their programs directly into the circuitry that they created.
This code leaned heavily on the symbolic logic developed by George Boole (1815–1864). Boolean logic, of course, is an abstraction of Aristotelian analysis.
I mentioned Aristotle (384–322 BC) to emphasize that computer programming is based on ideas which philosophers have discussed since antiquity.
A Roman Senator named Cicero (106 BC-43 BC) developed a curriculum called the Liberal Arts. The core of the Liberal Arts is called "The Trivium." The three legs of the Trivium are "Grammar," "Logic" and "Rhetoric."
Grammar refers to the structure of the language. Logic refers to the structure of ideas. Rhetoric refers to the art of communication.
Computer languages are grammatical structures that we use to execute logical statements on a computer.
Rhetoric refers to the art of communication. People use computers to communicate ideas through a variety of devices including computer print outs and web pages.
Personally, if I were to design a curriculum for teaching computer science, I would include courses on the history of philosophy and mathematics.
There are very few people interested in the connection between classical logic and computer logic.
So, I will jump a few thousand years to the evolution of computer languages.
History of Assembly
The first computer scientists directly programmed the circuitry of the computers. People call this machine code.
In 1947 Kathleen and Andrew Donald Booth wrote about a language to represent machine code the work "Coding for A.R.C."
Wilkes, Wheeler and Gill used the term "assembler" in their 1951 work titled "The Preparation of Programs for an Electronic Digital Computer." In this system, programmers would write code in a higher level language. Programmers would then run a program to assemble the high level code into machine code.
NOTE: Since Assembler assembles machine code, there were different assemblers for different machines.
Evolution of FORTRAN
Many early programs followed the path of FORTRAN.
John Warner Backus (1924 – 2007), who later admitted that he did not like writing low level machine code, proposed the creation of a Formula Translating System in 1953. FORTRAN allowed programmers to writer higher level formulas. They would run a program that translated the formulas into machine code.
IBM published the specifications for FORTRAN in 1956 and delivered the first FORTRAN compiler in 1957. Yes, the program is spelled in upper case because the computers of the day did not support lower case.
The original version of FORTRAN used a block structure and had commands for punching cards and spinning tapes.
The second version of FORTRAN introduced procedural programming which provides a more structured version of blocks with return variables.
Later versions of FOTRAN allowed programmers to compile to assembly. When machines started including lower case, FORTRAN changed its name to Fortran. The Fortran Language still exists with a number of open source compilers.
Evolution of COBOL
While working on the UNIVAC computer for Remington Rand, Grace Brewster Hopper (1906 – 1992) noticed that business users were uncomfortable with the mathematical intense languages used for coding.
In 1953 she proposed the creation of a language that used common English words. Her first proposals were rejected but in 1955, her team began working on Business Language version 0. The language had the name B-0 for short.
For reasons that aren't quite clear, they changed the name from B-0 to FLOW-MATIC.
The Conference/Committee on Data Systems Languages met in 1959 with the goal of creating a computer language that could run on different systems. CODASYL used FLOW-MATIC as the base for a new business oriented language called COBOL (COmmon Business-Oriented Language).
COBOL is a procedural language that has a more intuitive language than FORTRAN. COBOL did not support structured programming as well as FORTRAN.
Evolution of C
Digital Equipment Corporation produced the Programmed Data Processor-1 (PDP-1) in 1959. The computer included a text editor, a debugger and the game "Spacewar!.
Weighing it at just 1,600 pounds, the PDP-1 could be considered the first portable computer ... for people who owned tractors.
In 1967 Martin Richards created the "Basic Combined Programming Language" (BCPL) as an update to to the Combined Programming Language (originally called the Cambridge Programming Language). The program ran on the PDP-10 and other mainframe computers.
BCPL used curly brackets {} to denote blocks and used double slashes for comments.
In 1969, Ken Thompson and Dennis Ritchie developed the B language based on BCPL for use on the UNIX operating system developed by Bell Labs. The PDP-11 was a primary target for the design as it had adopted the ASCII character set.
The team updated B to C and eventually wrote the UNIX kernal in C.
The C programming language has terse, but human readable code. C used a compiler that would compile the program into an object code (similar to Assembler). The program would then assemble the object code into an executable program.
The C programming language allows for a certain amount of cross platform development. Programs that use the standard library and avoid OS specific calls might compile on different operating systems.
With a handful of new languages in hand, the world braced for a revolution in the development of microprocessors.
Getting Back to the BASICs
In 1963, John G. Kemeny and Thomas E. Kurtz of Dartmouth College wanted to create a language for training future programmers. They created a languaged called Beginners' All-purpose Symbolic Instruction Code or BASIC for short. The early code was optimized for time sharing programs for the main frame computer in the computer lab.
Evolution of the x86 Architecture
In 1968 Gordon Moore, Robert Noyce, et al founded a start up in Santa Clara, Ca to produce Integrated Electronicsnamed which they named Intel.
While working for Fairchild's Semiconductor in 1965, Moore made the bold prediction that the number of components on a semiconductor would double every year for the next several decades. Noyce was a chemist and recognized as a cofounder of the Integrated Circuit.
While Intel concentrated on producing DRAM for mainframe computers. They introduced a 4 bit processor dubbed the "4004 CPU" in 1971. This 4 bit chip sold for $60. While it had the makings of a personal computer, they marketed it for things like calculators.
Intel introduced the 8008 processor designed for use in the Datapoint 2200 programmable terminal by Computer Terminal Corportation. NOTE: Intel did not market the 8008 as a CPU, just as an unassuming component in a terminal.
Intel introduced the 8080 as an upgrade to the 8008 in 1974.
Intel released the 8086 in 1979.
In 1981, IBM chose the "x86" processor and its assembly language for use in the IBM Personal Computer making Intel the dominant player in the personal computer.
The x86 architecture and assembly language continue to be a dominant player in the computer market. Microsoft and Intel created a near monopoly in the business computer world with many people calling the combination of Microsoft and Intel "Wintel."
MS-DOS was written in an Assembly language designed for the x86 family. It was extended with a version of C that compiled to Assembly. The original Windows ran on MS-DOS. The operating system used a combination of Assembler, C and C++.
Bill Gates realized that he could gain a monopoly in the PC space and bought MS-DOS.
The evolution of the x86 processor included:
- 8086 released in 1976 with 40 pins.
- 8088 released in 1979 with 40 pins.
- 286 released in 1982 with 40 pins.
- 386 released in 1985 with 132 pins.
- 486 released in 1989 with 168 pins.
- Pentium released in 1993 with 273 pins.
Notable competitors include chips and assemblers designed by Advanced Micro Devices, Inc. which was founded in 1969.
The Rise of Microsoft
In 1975, Bill Gates and Microsoft was developing a version of BASIC for the Altair 8800 computer by Micro Instrumentation and Telemetry Systems (MITS) which usew the Intel 8080 chip.
IBM was completing the design of its Personal Computer in the early 1980s, the IBM legal department that IBM would likely be sued if they produced a monolithic architecture. So, they decided to outsource a few key components of the PC.
An operating system is really just the language that sits between the user and the hardware. IBM saw that operating systems were a dime a dozen at the time, IBM sought to outsource the OS.
Bill Gates was hoping to license his BASIC program to IBM. On learning that IBM wanted to license an operating system.
Realizing that the person who controlled the language could control the world, Gates set forth on a quest to acquire an operating system.
Gates knew of a company called _ Seattle Computer Products_ which had developed a product called QDOS or the "Quick and Dirty Operating System" which was designed by Tim Paterson.
Microsoft purchased non-exclusive rights for an updated version of QDOS called DOS-86 in December 1980 $25,000. Microsoft then bought exclusive rights for DOS-86 in 1981 for $50,000.
The Operating System is just a language that sits between the user and computer. Realizing that operating systems were a dime a dozen, Seattle Computer Products was happy with the deal. Little did they know that Microsoft would be able to leverage the IBM monopoly to create its own monopoly.
Java and Its Virtual Machine
The programming world is quite messy. There are a large number of computer programs developed for specific machines that have a difficult time communicating.
Developers at Sun Microsystem realized the problem. In 1991 James Gosling, Mike Sheridan, and Patrick Naughton began working on a project called Oak. Oak would compile bytecode for an abstract virtual machine. One could implement the virtual machine on different hardware.
Don't tell anyone, but this virtual machine is really a language. It is a codex that one can situate between the coder and the machine language.
Sun Microsystems changed the name from Oak to Green and then from Green to Java.
The syntax of Java was based largely on the syntax used for C++. Both programs are dependent on a layer between the high level language and the machine.
Netscape and JavaScript
Released in 1993. Mosaic was one of the first popular web browsers. Programmers who wanted to create a more dynamic product left to create Netscape Corporation in 1994. Netscape formed a collaboration with Sun Microsystems to create an embedded version of Java for the Netscape Browser in 1995 called LiveScript.
Due to the popularity of Java, Netscape renamed LiveScript to JavaScript. JavaScript interfaces with an abstract model of an HTML web page called the "Document Object Model" or DOM. The DOM is a language that describes HTML pages.
It is common for an HTML page to include JavaScript. The JavaScript then extends the HTML on the page. It is a wonderland of languages within languages.
In 1995, Microsoft created a program called JScript. JScript interacted with Microsoft's "OLE Automation" technology. JScript had a tighter integration with Windows environment.
The Java Applet structure was another interesting. An applet consisted of Java Bytecode that would run on a virtual machine launched by the browser. I preferred Applets to JavaScript ... but the technology was insecure.
Summary
The point of this article was to point out that the primary languages in the early days of the computer industry were closely related to the machines.
In the earliest days, programmers directly coded programs into the machine.
A later generation of programmers developed a level of languages that we call assemblers which are a little bit easier to understand than machine code.
Some languages like the first version of FORTRAN compiled to machine code. However, it became common to compile to an assembler and then to machine code.
The C language compiles to assembler. Each platform has a different assembler. There is a good chance that C written for one machine could compile to another.
The ideal is to have high level languages that can compile and run on different hardware.
I started the article by pointing out that it is incredibly easy to create a language that writes a computer language. There are now thousands upon thousands of such languages in the world.
People use a variety of terms such as IDE (Integrated Development Environment) and Framework to refer to programs that write programs.
Most of the programs that write programs were designed to empower the coder. A few were designed to limit the code. For example, Rust places restrictions on coders to reduce memory errors.
Most of the languages were designed with good intention. However, often sees power players in the computer industry using languages to establish or extend a monopoly.
There has been conflict between people who want to develop languages that empower the people and those who use language to control people. The game has been ongoing since antiquity. The manipulators seem to win more often than not.
Image Credit
I generated the image of a scary looking computer chip from Night Cafe. I verified the names and dates used in the post with hundreds of web searches including Wikipedia, Google, Gemini, and other online encyclopedias.