Evolution of Programming Languages
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.
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 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
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
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
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
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
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
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 byMicrosoft
that is known for its Component Object Model(COM). It was specialized forGUI
software development for Microsoft Windows. It was also widely used inMicrosoft Office
in the form ofVisual 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.
留言
閱讀更多
Dart vs JavaScript vs TypeScript
2019-02-17
隨著Flutter受到開發者的重視,Google於2011年推出的Dart又重新進入大家關注的視野之內,不過除了Flutter以外,其實Google的開發者早在2016年也推出過Angular Dart,讓開發者以Dart開發網站應用,不過由於Angular Dart對比TypeScript版Angular文本長期不足,因此沒有引起太多關注。Google推出Flutter,可以說為大家對Dart的信心注入了一劑强心針,大家又重新開始關注這個已有8年歷史的程式語言。 本文想介紹的是,就是到底Dart有何特色?與JavaScript比較,又有何優劣?由於TypeScript開始於前端日漸盛行,我們亦可以趁機比較一下三種語言的異同。
軟件工程師成長手冊
2019-04-29
筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。
SQL首部曲:NoSQL? No! SQL!
2019-10-08
由本篇開始,接連四篇都是與SQL有關的文章,會想寫SQL的原因,是因為SQL在現今軟件開發及數據科學佔有舉足輕重之地位,卻總是在背後默默無名,從未見得到像其他新興技術之關注,有見及此,筆者決定介紹SQL之特點,順便破除一些對使用SQL上常有的誤解。
Node.js終結者?青出於藍的Deno(一)
2020-08-06
有編程經驗的人,都一定會聽聞過Node.js,Node.js基于Chrome的V8引擎開發,本身能夠運行JavaScript,在前端開發(Frontend Development)、後端開發(Backend Development)、Android及iOS開發(Android & iOS Development),都有Node.js的蹤影,更帶起全JS開發的潮流,也就是大家常常在Youtube上看到的MEAN Stack(Mongodb,Express,Angular,Node.js),也是以Node.js為中心發展起來的。