Programming Languages
Language Features
To describe a computer language, you can enumerate its features. These are characteristics or attributes that can be compared. Some languages look similar to each other and create a family. Here are the most significant features.
| FEATURE | DESCRIPTION | DETAILS |
|---|---|---|
| Syntax style | Different syntax styles can create a so called language family. | C, Algol |
| Programming paradigm | Is the programming style or concept. | Procedural, Declarative, Object Oriented, Logical, Functional |
| Execution mode | The way final program works | Interpreted, Virtual machine or Compiled |
| Type system | Data types can be defined during design time or run-time | Dynamic/ Static/ Gradual |
| Scope Model | How sub-programs and functions store local scope variables. | Dynamic (stack)/ Static (hip) |
| Parameters | The way we can use parameters in procedures and functions | Optional parameters, Variadic parameter, default values etc. |
| Dispatch | The way we identify a function | Function overloading/ Signature |
| Exceptions | The way we deal with errors | Exception handling (try) or not |
| Memory management | The way we allocate and free memory during execution | Manual / Garbage Collector / Reference counting |
| Character set | The characters we can use for keywords operators and constants | ASCII / Unicode |
Language Classification
Computer languages can be categorized by the complexity and purpose in [1-5] generations:
A: Close to machines
- 1GL – First Generation:
- 2GL – Second Generation
B: Close to humans
- 3GL – Third Generation Language
- 4GL – Fourth Generation Language
- 5GL – Fifth Generation Language
We have organized programming languages into 6 categories, each containing the top 5. This was a research project I conducted in 2017 using Google+ surveys. I will try to update this ranking every year using Twitter since Google+ is no longer available. Follow me and vote when I post articles about it. Find the Twitter link in the bird icon at the bottom of this page.
A: Modern Languages
These are very modern languages. We advise beginners to start with one of these languages. Our recommendations consider criteria such as readability, quality of documentation, features, and performance. We do not prioritize popularity, community, or business perspective. We focus on teaching computer science concepts and fundamentals of programming when we recommend these languages:
- Go – a garbage-collected, fast compiler language;
- Rust – Mozilla's native language;
- Dart – a modern, general-purpose, mobile-friendly language;
B: Scripting Languages
Scripting languages are easy to learn because they are more or less interactive. This is a huge advantage over compiled languages. It is a good approach to start with one of these languages, though it may be even better to learn some of these languages second. You can understand most programming concepts with any of these languages:
- Julia – a scientific, fast language better than Python;
- JavaScript – the default language for the web;
- Ruby – a language created for dynamic website backends;
- Python – a very popular dynamic language;
C: Traditional Compiled Languages
Traditional languages are amazing teaching tools. We study these languages to understand the history of computing. We study old features that influence our thinking. We like to discover and reconsider long-established features. Learn these languages if you are interested in low-level system programming and advanced computing.
- Assembly – second generation language;
- C/C++ – third generation compiled languages;
- C# – default language for Microsoft Visual Studio;
- Fortran – fast language created by IBM;
- Ada – very robust language designed for the US Army;
- Java – open source language created by Sun and maintained by Oracle;
Historic Languages
Languages that are more than 40 years old are considered traditional. That is before the Internet was born – the golden age of classic computer languages: { Fortran, Lisp, Simula, Algol, Pascal, B, C, C++, Forth, Scheme, ML, Smalltalk }. Two of these languages remain very influential: C family and Algol family. Functional languages are derived from Lisp, and object-oriented languages are derived from Simula.
Ace-1945 Computer
design by Alan Turing
Traditional Languages
The following computer languages are less than 40 years old. Let's review some of them. You may find a language that you can learn to create your next project. I will update this list from time to time with new languages I find worthy.
| Year | Name | Homepage |
|---|---|---|
| 1983 | Ada | http://www.adacore.com/ |
| 1986 | Erlang | https://www.erlang.org/ |
| 1990 | Haskell | https://www.haskell.org |
| 1990 | Ruby | https://www.ruby-lang.org/ |
| 1991 | Python | https://www.python.org/ |
| 1993 | Lua | https://www.lua.org/about.html |
| 1995 | Racket | https://racket-lang.org/ |
| 1995 | Java | https://www.oracle.com/java/technologies/ |
| 1995 | JavaScript | https://www.ecma-international.org/ecma-262/6.0/ |
| 2001 | Scala | http://www.scala-lang.org |
| 2009 | Closure | http://clojure.org |
| 2009 | Go | https://golang.org |
Emerging Languages
These languages are not yet mature but show promise. We will research these languages in our programming classes. If you wish, you can learn these languages on your own, but only if you are not busy working to raise a family or living a busy life.
| Year | Name | Homepage |
|---|---|---|
| 2011 | Dart | https://www.dartlang.org |
| 2011 | Elixir | https://elixir-lang.org/ |
| 2012 | Julia | http://julialang.org |
| 2014 | Rust | https://www.rust-lang.org |
| 2014 | Swift | https://swift.org |
| 2014 | Hack | http://hacklang.org |
| 2014 | Crystal | https://crystal-lang.org/ |
| 2016 | Nim | https://nim-lang.org/ |
| 2016 | Kotlin | https://kotlinlang.org/ |
| 2016 | Zig | https://ziglang.org/ |
| 2018 | ELM | https://elm-lang.org/ |
| 2022 | Carbon | https://github.com/carbon-language |
Future Development
There are many computer languages, and learning them all would take a lifetime. The languages with the strongest position in the software industry are: Fortran, C, C++, Objective-C, and Lisp. New computer languages are created because old computer languages cannot be fixed.
Once a computer language is used in production, it must remain unchanged for support. If it changes too much, it becomes a new computer language. This is what happened to Niklaus Wirth's languages. They evolved too quickly: Pascal, Modula, Oberon. All brilliant, all forgotten.
For developers, it is very difficult to switch from one computer language to another. Every new computer language promises to correct issues from other languages. Some languages introduce new paradigms that are even more difficult to grasp.
Bob Martin
The next video is about 1 hour and 20 minutes long. If you have the time, I highly recommend this speech about the future of programming languages. This video is very popular – it has over 23,000 views. I enjoyed watching it; it is very informative and fun!
Sage Opinion
Prediction: In the future, programmers will avoid regulations and create disruptive, new, open-source programming languages. There will always be rogue programmers. Rogue languages will be learned quickly by smart individuals who need jobs and will become influential because they will work better. Governments do not like to spend money on technology, so they will choose open-source languages that cannot be regulated.
AI is designed to replace programmers. However, English is not a good programming language. So far, AI has failed to produce executable, meaningful software. We have done our best to create tutorials for learning the fundamentals of programming. If AI manages to create software without using programming languages, then in the future we will no longer use traditional programming. That is likely to happen next century.
Read next: Operating Systems