Evolution of Programming Languages

 Gordon Lau 劉偉中

Gordon Lau 劉偉中

2021-10-20

"Why are there so many programming languages?" You probably asked this question when you first learned programming. It is downright confusing to see so many programming languages are around, as if they are designed intentionally in this way to confuse newcomers. If you are asking any of the working professional programmers out there, many of them are going to give you contrasting opinions: "Java is dead","Real programmers code in C++", "Ruby is a toy language" or "You are stupid if you don't code in Python".

As explained by Paul Graham's article Beating the Averages, Programming Languages are not merely seen as tools. They also influence the way programmers think about their code. Naturally, most programmers have a strong opinion on the choice of programming language, which unsurprisingly they prefer the one that they use every day.

As a programming mentor, I need to answer this question to my students on a daily basis, preferably in a clear and brief manner. It is surprising to me that there are no good existing infographic that explains how programming languages evolve to become what it looks like now. Therefore, I decided that it is a brilliant idea to create one by ourselves.

programming_languages_family_trees.png

This infographic is intended to be as simplistic and beginner-friendly as possible, since it is going to be a total mess if we are trying to put every single programming language that ever existed in this infographic. If your favorite programming language is not in this image, it is most likely because of the constraint of space instead of its relative significance.

The difficulty of creating such infographic stems from the fact that programming languages are not isolated. Each programming language influences other languages, which in turn influences others.

Let's start our journey.

1950s: The dawn of programming languages

1950s_lang.png

1950s was the dawn of programming languages. Before this decade, people programmed in machine code instead. In 1957, the first programming language, FORTRAN(Short form of Formula-Translation), was created to facilitate numerical calculation and scientific computing. Fortran is still used to program numerical computation nowadays. Cobol is a business-oriented programming language created in 1959 to solve common business application challenges. Cobol's strength lies in writing and updating ledgers and table records. Lisp was created in 1958 by the American computer scientist John McCarthy as a mathematical notation for lambda calculus. It was later widely adopted for research of artificial intelligence.

Both Fortran, Lisp and Cobol can be regarded as one of the first programming languages created. And they serve distinctively different purposes:

  • Fortran: Designed for Scientific computing and numerical calculation
  • Cobol: Designed for Business Application Development
  • Lisp: Designed for Artificial Intelligence Research

1960s: Structural Programming and Ease of Learning

1960s_lang.png

In the next decade, we saw the next wave of programming languages. The most iconic one here is the Algol language family. Algol is a typical design-by-committee language, as it was designed by committees of American and European computer scientists. The second language of Algol family, Algol 60, which was created in 1960 as the named suggested, was proven to be one of the most influential language of its era since it paved the foundation of future programming languages development. Most modern programming languages C, C++, Java, Python, JavaScript drawn ideas from Algol 60.

Algol language family's decision is later named as Structural Programming which is a paradigm aiming to improve the readability and clarity of programming. It pioneered multiple concepts which profoundly influenced the latecomers.

  • The extensive use of control structure, including both selection(if/else, switch) and repetition(while/for loop).
  • Abandonment of goto keyword. goto was later widely regarded as an antipattern in programming as a result
  • Lexical block Structures that groups related lines of source code together
  • Subroutines to pack related source code as a unit.

Basic was another influential programming language created in this decade. Contrary to Algol, which was created by a group of computer scientist, Basic was created by only two people, John Kemeny and Thomas Kurtz. They pioneered the use of computer in college educations. Since their aim was to create something that is easy to learn for non-mathematics and non-science students. Basic was designed with ease of learning in mind, making it a comparatively easy language to learn in that era.

1970s: The Classical Period of Programming languages

1970s_lang.png

I refer to the 1970s as the classical period because multiple languages created in this decade truly stood the test of time. The most notable examples are C and SQL. C was designed by Dennis Ritchie to be the language of the then-newly created Unix Operating System. Both C and Unix went on to become incredibly important creations in computer sciences. C is still widely used as the programming language in development of operating system kernel and embedded system. Its simplistic design gives programmers the ultimate control on the hardware that they are working on. Both Windows NT kernel, Mac's Darwin kernel and Linux kernel use C as their principal programming language. C-family languages includes most commonly used languages ranging from C++, Objective-C, Java and JavaScript, with Python being a rare exception.

SQL is another language that enjoys an uncontested longevity since its inception. It was created by IBM's computer scientist Raymond Boyce and Donald Chamberlin as a domain specific language for managing data in relational databases. Since relational database is still an integral part of modern full-stack development, SQL is still immensely popular after over 40 years.

Pascal seems to be foreshadowed by C-language family nowadays. It actually was the primary programming language in college-level programming languages in the 1980s, which was later replaced by C and C++.

Among the aforementioned languages, Smalltalk is niche by comparison. However, it brought valuable innovations to the programming communities, notably the concept of graphical programming interface and the paradigm of object-oriented programming. Smalltalk's author Alan Kay is widely regarded as one of the fathers of Object-Oriented Programming. It revived the dynamic typing from Lisp which acted as the inspirations for modern dynamic languages as well.

1980s: C's descendants: Era of Object-oriented programming languages

1980s_lang.png

The concept of Object-Oriented Programming was becoming mainstream among the programming community in the 1980s. However, the most popular programming language C back then was a procedural language. There were many attempts to make C object-oriented. C++ and Objective-C were the only two remained.

C++ added Object-Oriented programming to the performant C-language, arguably improving its maintainability for a large codebase. It went on to become a solid candidate for system programming and development for application with critical performance requirements. It is also one of the few programming language that essentially supports all different paradigms of programming, be it procedural, functional, object-oriented and generic programming. As of time of writing, C++23 is the next upcoming standard.

Objective-C found its niche in macOS . It was the primary development language for application on macOS. Since iOS was released in 2007, it was the primary language to develop iOS apps until the language Swift was released in 2014 as a replacement.

Perl was an interesting exception in that era. When it was a consensus that C++ or C were needed to do any serious programming, Perl was regarded as a scripting language instead. Perl was special because it is a dynamic typing and interpreted language, making it one of the first general-purpose scripting language to be adopted by the programming communities. It was thus widely used in system administration due to its flexibility.

1990s: The Golden Age of programming languages

1990s_lang.png

In the 1990s we saw a new batch of programming languages being created, this era's languages still dominate the ranking of most popular programming languages nowadays. The big 3 of programming languages: Java, JavaScript and Python, all came from this decade.

Python was created in 1990 as an intuitive, beginner-friendly language. It was famed the runnable pseudocode with its superb readability. It went on to gain adoption in the scientific computing communities which made Python the best scientific programming language with all the data science library like numpy, pandas and tensorflow.

Java was developed by James Gosling at Sun MicroSystem in 1995. It was designed with cross-platform capabilities in mind. The cross-platform promise gave Java advantages over its predecessors C++ and C which requires individual compilation for each platform. Java strongly encouraged object-oriented programming styles, which means that Java's creators choose not to implement many features C++ already offered, for the sake of clarity and readability.

JavaScript was created in the same year as Java. It was originally intended to be the scripting language to be used by the Netscape Navigator. Its author, Brendan Eich, created JavaScript in only 10 days. JavaScript's object system is interestingly prototype-based instead of class-based. The language had undergone drastic changes as JavaScript was becoming more and more mainstream. Server-side JavaScript runtime Node.js was released in 2009 which enabled the possibility of full-stack JavaScript development.

PHP powers 80% of the website in the world. It was created in 1995 as a server-side text preprocessor. It is ubiquitous thanks to WordPress, which is the most popular content management system in the world.

Ruby was created by a Japanese programmer named Yukihiro Matsumoto. Its author took many inspirations from Python and he tried to create a genuine object-oriented language. Ruby was widely adopted because of the popularity of the framework Ruby on Rails which pioneered the philosophy of Convention over configuration.

2000s: Web 2.0's languages: Concurrent Languages

2000s_lang.png

In the 2000s, here came the age of web applications. Web applications like Gmail, Youtube and Facebook were getting more and more powerful. The programming languages created in this decade had a strong emphasis on the capability of handling concurrent programming. Concurreny had been around for ages, but the wave of Web 2.0 applications made this trait more important than ever.

Scala was created with the premise of creating a better Java with advanced type inference and concurrent support. Type inference reduces the boilerplate of writing static languages. It would be a game-changer, since Java was constantly criticized for being bloated. The concept of type inference is so important that it affects most of the programming languages in the decade to come.

C# was also created by Microsoft as a Java alternative. It borrowed ideas from both Java and C++ and tried to create a language with the best of both world. It was the most popular language for Microsoft .Net platform. It powered the development of most Microsoft Windows desktop applications and Windows Server-based Web application. The game engine Unity also made use of C# as their primary scripting language.

Despite Java popularity in the previous decade, Go surprisingly was not trying to be a Java replacement. It was created by Google as a system programming language just like C++. It was designed with simplicity and clarity, making the compilation time of Go program much shorter than that of C++. Go also introduced the concept of Communicating Sequential processes as its concurrent execution model.

At the same time, the dynamic programming languages was gaining a lot of traction in this decade. Ruby became a serious candidate for Web Development with its framework Ruby on Rails. Python's Django and PHP's numerous frameworks were used as well. Although the languages mentioned in the infographic were mostly static languages, it is reasonable to call this decade the age of dynamic programming languages.

2010s: Static typing making a comeback: Type inference Languages

2010s_lang.png 2010's languages were characterized by the comeback of languages with static typing. All four languages mentioned in the infographic TypeScript, Rust, Dart and Swift supported type inference out of the box.

Rust introduced the ownership system, which enables automatic memory management without garbage collection. It is a major breakthrough in memory management technique since garbage collection. It also borrowed functional programming concepts like pattern matching and immutable data. Rust thus became a contender to C++ for system programming and real-time software development.

Typescript was designed by Microsoft in 2012 to bring static typing and type inference to JavaScript. TypeScript's author Anders Hejlsberg plays a major role in developing C#, Delphi and Object Pascal. Typescript was designed to be a strict superset of JavaScript which means that any JavaScript code is fully compatible with Typescript. It was an important characteristic because it enabled developers to adopt Typescript gradually in their existing JavaScript application.

Dart was initially designed by Google as a drop-in replacement for JavaScript development in Browser in 2012. The adoption had been low since there are many other contenders in the same era such as Typescript. The language got a second life when Google announced that Flutter, which is a cross-platform mobile application development framework in 2016, used dart as its development language.

Swift was created by Apple as a replacement of decades-old Objective-C. Unlike Objective-C, it followed a lot of design decisions rooted from the C-language family. Nowadays, Swift is the primary language of development for MacOS and iOS.

Honorable Mentions

Here are some programming languages that we would like to include, but we have not included in the end:

  • Kotlin: A JVM language designed by JetBrains. It was adopted by Google as the primary language of Android Operating system in 2019, further boosting its popularity.
  • Visual Basic: Visual Basic was created by Microsoft that is known for its Component Object Model(COM). It was specialized for GUI software development for Microsoft Windows. It was also widely used in Microsoft Office in the form of Visual Basic for Applications.
  • Solidity: Solidity was created in 2014 for implementing Smart Contract

What's next?

Predicting the future is always a difficult task. We can be sure that new programming languages will emerge as more novel programming concepts are implemented. One interesting example is Quantum Programming Language. They are created to write program for quantum computer instead of traditional transistor-based computer.

留言

延伸閱讀

Node.js終結者?青出於藍的Deno(一)

SQL首部曲:NoSQL? No! SQL!

軟件工程師成長手冊

Dart vs JavaScript vs TypeScript