Andy Cormack takes a good look at computer programming languages. Some are designed for their ease of use, while others have different applications, such as processing mathematical equations or crunching data. Then there are those that are closer to the actual language of the computer, namely assembly languages and finally machine code, the ultimate building blocks of any operating system. Here then, are Andy’s top ten programming languages of all time, and why they should be in the top ten.
With so many programming languages in the world today, it’s a pretty impossible task to narrow this list down to just ten. Do I include the most perceivedly “instrumental”, which in itself, is open to some amount of subjectivity? Do I pick the forerunners in each language’s respective niche or speciality?
What I’ve tried to compile here is a list of them somewhere in between those questions, and also perhaps some of my choices are down to personal bias. Either way, here’s my picks (with a little cheating in some cases, combining multiple languages into one) and some background to them.
While there are many places before or after this point that I could begin, I felt Fortran was an appropriate one. Fortran, named so as the combination of the words to describe the intended use of the language, “Formula Translation”, is an Imperative programming language. Imperative programming languages are those that focus on describing how a program operates, as opposed to a declarative programming language, which instead focuses on what the program needs to do without the specifics of how.
Fortran is a language suited specifically for mathematical and scientific computation purposes, and was originally designed and developed in the 1950s by John Backus and IBM for both scientific and engineering applications, with its first real appearance in 1957, almost exactly 60 years ago from the time of writing this.
It has done so well in this area that it managed to cement itself early in its life as the “go to” language for computationally heavy applications such as fluid dynamics and weather pattern prediction. It’s an incredibly efficient language that is very popular for that very reason. It is also typically the language used to write programs to benchmark the world’s fastest supercomputers.
There have been many revisions to Fortran over the years, and while its use certainly can’t be compared to its heyday in the late 1950s and beyond, it continues to be a language in use today. Fortran 2008 is the most recent standard of the language, building on top of previous, more major revisions to the language like Fortran 2003, which introduced numerous new features. There is also another minor revision coming in the form of Fortran 2015, currently under review, with a release planned in “mid 2018”.
COBOL, another imperative programming language, was originally designed by a rather lengthy list of people compared to many other languages on this list: Howard Bromberg, Howard Discount, Vernon Reeves, Jean E. Sammet, William Selden, and Gertrude Tierney.
The language’s name is an acronym of “COmmon Business-Oriented Language” and, as you might imagine, is a language heavily used in business.
It is primarily used in financial and administrative systems for companies and governments alike, and is still used in many older mainframe computers. Unlike Fortran, however, its popularity has been in decline for some time, with most up and coming programmers shying away from the language, and many of the old mainstays that had mastered the language retiring, leading to many old COBOL systems being rewritten in more modern languages.
Also unlike Fortran, it has a few important predecessors that lead to COBOL: FLOW-MATIC, designed by Grace Hopper at Remington Rand in 1955, COMTRAN, designed by Bob Berner in 1957 and FACT, designed by the company Honeywell in 1959.
Grace Hopper, a pioneer in computer programming, designed FLOW-MATIC, as well as popularised the idea of machine-independent programming languages; the idea being that with the constant iteration and evolution of computing, most languages would come and go within a few years due to the chips and architecture they were built on becoming obsolete, this also lead her to developing one of the first compilers.
FLOW-MATIC was the first programming language ever to use English-like statements to express operations in code, as well as the first to make a distinct separation between the description of data and the operations performed on that data – these features were a major influence on COBOL.
COMTRAN (COMmercial TRANslator) was designed by Bob Berner at IBM as a forerunner to COBOL, but was aimed at business instead of science. I won’t list all the parts of the language that made it into COBOL, but a couple of primary examples are the picture clause, an element that defines the length of data, not dissimilar to a dictionary defining words, and paragraphing, namely the division of code into paragraphs.
Finally FACT (Fully Automated Compiling Technique), was developed by Honeywell International, another main contributor to the shaping of COBOL. Some of the main elements that COBOL incorporated included the assignment of values at declaration, the qualification of data using IN or OF, error checking, and data sorting.
While COBOL itself and the languages listed above that contributed to its core architecture are mostly in disuse or decline these days, they are cemented in place as a prominent part of computing history.
Designed by John Kemeny and Thomas Kurtz in 1964, BASIC (Beginner’s All-purpose Symbolic Instruction Code) had a huge impact on programming and its public perception. The premise of the language was to put an emphasis on ease of use, bringing in a wider audience to programming, outside of the, up until this point, typical programmers coming from a scientific or mathematical background. The primary reason for this was that most computer use at the time typically required the use of custom software written for the specific goals you had in mind, which BASIC intended to help change.
BASIC, though not typically in use today, had many iterations over the years, including Microsoft’s Visual Basic, a language that, along with the Integrated Development Environment (IDE) it was compiled in, was a way of coupling Windows user interface elements with code in a relatively beginner friendly way.
Visual Basic was also not Microsoft’s first foray into the BASIC language either, Quick BASIC or QBasic was an IDE for a variation of the BASIC language that was developed by Microsoft and featured in MS-DOS and early versions of Windows up until Windows 98 and ME.
It was however most commonly used in home computers in the 1970s and 1980s, and was responsible for a generation of computer programmers who cut their proverbial teeth learning to code on their computers. Computers such as the BBC B, the Commodore VIC 20 and 64, the ZX80, ZX81 and ZX Spectrum. Happy days!
Pascal was designed in 1970 by Niklaus Wirth. Its main goals were to make an efficient language that fostered positive programming practices via the use of structure in both the code itself and the data programs written in it utilized.
Of course, we can’t talk about Pascal without talking about ALGOL (ALGOrithmic Language), or more specifically ALGOL 60, the language that Pascal’s structure was based on. Wirth had worked on proposed revisions to the ALGOL language previously, but the changes he proposed weren’t implemented, which most probably lead him to develop Pascal.
While Pascal isn’t in much use these days, its influence can be felt in many subsequent languages, not least of which are Java and Google’s Go language.
6. The C Family
The programming language C was designed by Dennis Ritchie at Bell Labs between 1969 and 1972 and is one of the most widely used programming languages to date, as well as one of the most famous “older” programming languages from a pop culture standpoint.
This section will primarily focus on C and C++, but first we have to talk about the predecessors that led to their inception.
Let’s take a few steps back to 1963 when CPL was born. Developed at the Mathematical Laboratory at the University of Cambridge as the Cambridge Programming Language initially and then later upon publishing the language jointly with the University of London, it was retitled slightly to the Combined Programming Language. CPL is another language that was heavily influenced by ALGOL 60, but refocused not on being small and simple, but broadening its use to wider applications than just scientific calculations.
BCPL is next, designed by Martin Richards in 1966. As you can imagine, this is a language whose design was heavily influenced by CPL. BCPL (Basic Combined Programming Language) was originally designed to write compilers for other programming languages, then quickly fell into disuse, though its stripped down successor, simply called B, was the language that C would be based on.
B, was designed in 1969 by Ken Thompson and Dennis Ritchie. B, having been derived from BCPL, shared many similarities and would settle into a feature set and structure that Ritchie would take in order to form the basis for C.
C itself was designed as a general purpose language, and with its burgeoning feature set and efficiency improvements found wide ranging appeal from programmers. C had been structured in a way that did a good job of mapping code to efficient machine instructions, bringing acceptance from many places that were still typically coding directly in assembly language until this point, due to the computational efficiency benefits of working directly with the hardware.
C was also the language of choice for rebuilding the Unix operating system for the same efficiency reasons. In spite of the relatively simple low-level capabilities of the language, C managed to be very system agnostic, compiling to a variety of computer platforms with relatively minimal alterations to code, which also helped bolster its popularity.
Unlike many languages on this list, C is still heavily used to this day, though many of you might say “but C++ surely has more use than C these days”, you might be surprised at the systems that are still written and maintained in C, and for completely logical reasons. A good example of this is Git, an extremely popular open-source version control system, and I’ll let Linus Torvalds, the developer behind it, explain why in a fairly expletive filled tone:
“… the only way to do good, efficient, and system-level and portable C++ ends up to limit yourself to all the things that are basically available in C. And limiting your project to C means that people don’t screw that up, and also means that you get a lot of programmers that do actually understand low-level issues and don’t screw things up with any idiotic ‘object model’ crap.”
The basic premise is that low-level programmers who can write efficient code in C tend to frown upon some of the iterations and “features” of C++ that tend to bog down projects and also, again to use Torvald’s words, “a lot of substandard programmers use it, to the point where it’s much much easier to generate total and utter crap with it“.
That being said, the C++ language designed by Bjarne Stroustrup in 1983, does certainly have many positive aspects as well as the more negative connotations that Torvalds holds for the language. C++ was created to basically bridge the gap between the growing popularity of Object-Oriented Programming patterns and the low-level efficiency that everyone knew and loved from C.
Because of this blend of the two sides – high-level abstraction and low-level hardware manipulation – C++ found wide spread popularity in many different projects. Servers, desktop applications, performance critical programs such as those used in space probes, and much more. The most popular of all that you’ve probably experienced in one form or another though is its prolific use in video game development.
Developed by Guido van Rossum and released in early 1991, Python is a general purpose language and also our first on this list that’s known as an Interpreted language. Interpreted languages are those which execute instructions directly from the written human readable code without compiling them prior to runtime. The interpreter is basically a real-time compiler that executes the program as it runs.
Python also has a readability design philosophy, and so ditches the curly braces synonymous with previously mentioned languages like C and C++, having more in common with that of ALGOL, where white space indentation and new lines have more significance to the interpreter. This philosophy also spills over into the way lines of code are written, focusing on writing fewer lines of code, thanks to a syntax that facilitates it.
Python has been quite an instrumental modern language, forming the backbone of quite a few big name projects and applications, including the likes of Youtube, Dropbox, Instagram, Spotify, Reddit, and many more. It has also formed one of the backbones to the development and proliferation of a new generation of young programmers who use it to program the Raspberry Pi computer.
Now that we have smashed past the barrier of past languages, towards the more modern end of the spectrum and the dawn of the internet, it’s time to dig into some of the languages that shaped the modern internet as we think of it today. Any example of that wouldn’t be complete without PHP and (My)SQL.
Perhaps somewhat on the side of unpopularity with programmers these days, due to a multitude of reasons some of which are listed to a great degree on the website Webonastick.com, it is inarguably still one of the most prominent and popular languages on the web even today. Sure, it may not be in “fashion” anymore, but even at the time of writing this, PHP is used on roughly 83% of websites where a server-side programming language can be identified.
The reason for its popularity is rooted in the fact that it was basically the first server-side language of the web, allowing all kinds of dynamic interactions on websites that were previously impossible. Combined with the fact that it was easy to integrate with server databases, especially the already popular open-source SQL based MySQL, it had everything developers needed to get started.
That’s not to say that there isn’t light at the end of the tunnel for PHP however. The latest iteration of the language, PHP 7, has taken many strides in the right direction to improve overall performance and security.
SQL, designed by Donald Chamberlin and Raymond Boyce, and despite being a language dating back to the mid 1970s, is up here in the more modern languages because of its heavily integral part in PHP’s legacy. Of course, I’m referring to MySQL, the open-source relational database that uses the Server Query Language that PHP so closely associates itself with. Developed by Michael Widenius and the rest of his company MySQL AB, back in 1995, with the “My” part of the name coming from Widenius’ daughter of the same name.
MySQL, with the help of PHP, together cemented themselves at the core of many websites, and still make up a large percentage of the total web to this day.
Java was designed by James Gosling at Sun Microsystems (now owned by the Oracle Corporation) in 1995. The main draw that lead to the sheer explosion of popularity of Java was its primary design purpose, “Write Once, Run Anywhere” (WORA). Basically, it was built from the ground up to be as system friendly as possible, freeing developers up from the choice of platform to then focus on coding better programs instead.
Java has a lot of syntactical similarities to C and C++, though the language lacks the low-level access that those languages thrived upon. Java is very much a high-level language, abstracting away the hardware in favour of simplicity, shifting focus away from manipulating the system’s memory directly.
The designer, Eich, was lured to the project under the pretence that he’d get to make a programming language similar to Self and Scheme, languages that very much interested Eich at the time. While that certainly wasn’t exactly a false statement, certain sacrifices were made to lure Java programmers over as mentioned earlier, implementing Java friendly syntax such as class and the new keyword.
One such example would be that you can pass functions as arguments to other functions, making for some very different design patterns and altering the whole way you can work with the language, when you compare it to more rigid languages.
System programming languages such as Rust are designed to take over where C and C++ left off, and is gaining such a foothold that this may end up being numbers 5, 4, 3, 2 and 1 in any future top ten list, or top five I should say. Other emerging languages such as Crystal and Ruby are beginning to come into their own. Elixir, which is a functional programming language specifically implemented for web applications, holds a lot of potential in terms of friendliness of the code structure, scalability and some of the tools supplied for implementing the code itself. As always, there are subcultures of programmers out there that are beginning to evangelise about the next big thing and why we should use it, and sooner or later, those that shout loudest with the biggest results will no doubt be heard.