Top 5 Programming Languages to Learn in 2016

It's a new year in a world that's moving faster than ever. This means it's important to keep up to date on technology, and young people who would have not been programmers before need to learn to code. There are various lists of programming languages by popularity of demand but they are too broad to read at face value. I've seen many people fail to learn a programming language when they had nothing to apply it to and were simply learning how a language works. It's a bit like learning a foreign language by reading a dictionary. The following list are my choices (not necessarily in order) for what languages you should decide to learn if you don't know one already.

1. JavaScript

JavaScript is everywhere. You don't need any extra software to start using it because everyone has a browser. You can open most browsers and start hacking and running some JavaScript (e.g. Chrome's Developer Tools). Every web browser runs JavaScript making it the biggest computer language platform in the world. It might take you an hour or so to get Python and a basic code editor installed. Getting Java and its tools and an IDE will be even harder, and the same for C#. You may need to go to a store and buy software to get started. But JavaScript can be written directly in the browser you're using to read this blog, and there are a number of web-based tools that you can use to do more advanced JavaScript coding still without installing or buying any software.

JavaScript was made to be easy to pick up and used universally, not just by computer scientists. It's got some gotchas for people coming from other programming languages though, being a Prototype-based object oriented scripting language.

Besides small amounts of plain JavaScript and jQuery being sprinkled onto web pages, there are a number of much more advanced frameworks (e.g. Angular, React, Ember, etc.) which make you more powerful as a JavaScript developer and also more valuable in the job market.

Most importantly, JavaScript is no longer just a browser language. Using Node.js (using Google's separated V8 JavaScript engine), JavaScript code runs on servers and desktops. Not only can you create web apps using JavaScript, you can create desktop apps (e.g. by wrapping a Node.js backend with a web-view frontend) and server software. In fact, due to its performance with non-blocking I/O, it's a good choice for a lot of network server software. JavaScript used to be an auxiliary language that programmers had to also know. Now it has become a primary language, and professional programmers can get by only knowing JavaScript.

As a bonus, it can also be used to create mobile apps. In the beginning, there was PhoneGap. It allowed exactly this, writing mobile apps using only HTML, CSS, and JavaScript. But the apps it created were slow and couldn't match the features of native mobile apps (ones written in Java or Objective-C). But gradually the performance and feature gap is decreasing, not just with PhoneGap / Cordova but with Appcelerator Titanium, Xamarin (using C#, not JavaScript), and now Facebook's React Native. There is no other language that is not only a viable choice for all these platforms (desktop, web, and mobile) but also a decent language choice for them. JavaScript has major support from more Internet giants in 2016 than any other language.

2. Python

Python is an easy to learn yet popular and versatile language. It is now the #1 programming language taught in computer science programs at US universities and around the world, replacing Java for that position. This should lead to an increase in Python used in the software industry in coming years, after these students graduate and are in a position to choose what programming language they use at their companies.

Python can be used for servers / daemons, web site backends, and for lots of scientific domains: data science, bioinformatics - see Rosalind, natural language processing - see NLTK, machine learning - see scikit-learn. Python is a language that is usable by non-programmas as well as loved by programmers. Unlike other programming language specialized for scientists like R, Python can do that and also anything else. But its popularity within certain scientific domains means its the language with libraries for all kinds of non-web and non-mobile things.

There are also a number of web frameworks (and web servers - setting itself apart from PHP) written with Python but Django is the current winner, with the most community support (although not quite as monopolized as Ruby on Rails). However, the community of web developers using Python is still much smaller than PHP and as a portion of the overall Python dev community, web developers are a small portion of it compared to Ruby. Python lacks a strong CMS or content management framework like Drupal in PHP. While web might not be the strongest reason for choosing Python, it helps that Python is such an easy language to learn.

Did I mention that devops tool Ansible is written in Python?

3. Java / JVM

The original marketing copy selling Java to businesses was that Java code could be written once and then run anywhere, because Java code would run consistently on any of the Java virtual machines (JVM) which Sun (now owned by Oracle) developed for "every" platform. This turned out not to be a big deal. JavaScript runs on more platforms / devices anyways.

But Sun did manage to create a language which was able to take the zeitgeist at a time when C++ was the only language really dominating software development, in a world where smartphones and web browsers weren't yet platforms worth considering.

Nowadays, developers don't write Java to run inside little browser applets, nor on Nokia phones. But Java is the only language for writing Android apps (actually, it's a Java-like language using Android APIs instead of Java APIs, and running on the Android or Dalvik runtime instead of the JVM). And it's a common language for businesses creating software for themselves, as well as for some large open source server software. There are also a number of web frameworks for creating websites in Java. So Java can be used for desktop, server, web, and mobile apps - but not iOS.

But the real strength of Java might just be in the object of Sun's original marketing hype, which is the JVM. After years of improvement, this virtual execution layer which runs Java bytecode on a virtual CPU has become close to native execution performance. With this optimized virtual machine which can run a standardized bytecode, it then becomes a platform which compilers can target for languages other than Java. And so it becomes possible to "write Java code" without writing in Java. Groovy, a scripting language, which itself is a top trending language, removes much of the verbosity of Java, is one example. So is Scala and Clojure (functional programming languages). There's also JRuby and Jython which allow you to run Ruby and Python code on top of the JVM. While some of the mentioned languages are quite different from Java, they still integrate and call the Java APIs and are part of the Java ecosystem. So it's worth considering learning other languages but still taking advantage of Java as a platform.

4. PHP

PHP has a lot of haters. Language snobs love to dog on PHP due to its lack of features, inconsistencies, strange behavior, and often the users of PHP themselves. But it's a programming language that came up with the popularity of the web, and the web hasn't exactly slowed down. While people can still comment on the quality of the jobs or the projects nobody can deny the sheer quantity of both PHP developer jobs out there and the number of open source projects using PHP (WordPress, Drupal, Magento, Laravel, etc.) and the popularity and usefulness of those projects. Americans might not see it as much but PHP is a global phenomenon. And businesses have no problems hiring PHP developers - they don't need to put themselves through bootcamps.

And the language itself is improving. It even supports object oriented programming now. It's also getting faster with each major version. It has the support of Facebook.

While nobody's seriously developing desktop or mobile apps in PHP, the web is a big enough domain for software and will continue to be in 2016. Learning WordPress, Drupal, Laravel, Magento, or a number of other PHP frameworks will still be valuable knowledge. PHP has a huge community and each of those projects have their own massive communities. There is simply a massive amount of useful and free web software written in PHP. One can complain about the quality of PHP users, especially the lowest common denominator.

5. C# / .NET (CLI / CLR)

There are only a handful of Internet giants who have the need or the muscle to either invent or foster development of top programming languages: Oracle (after acquiring Sun Microsystems and thus Java), Google (adopting Python and inventing Golang), Facebook (built on PHP and thus becoming a patron of PHP performance resulting in HHVM and the Hack language), Apple (Objective C via acquisition of NeXT, now Swift), and Microsoft which, as the dominant PC platform of the past 3 decades as well as vendor of language compilers has too many to count - VB.NET, C#).

With Windows 8, Microsoft made it possible to develop Windows desktop apps using HTML and JavaScript (but using a special Windows-only WinJS API). But in general, developing for Windows meant using a Windows IDE like Visual Studio and compiling C++ or Visual Basic into Windows executables which would run with the .NET framework on top of the CLR (Common Language Runtime), Microsoft's version of a Java-like virtual machine, implementing the CLI (Common Language Interface). Other .NET languages like ASP.NET or VB.NET could also build CLR Windows apps. A large number of other programming languages could also compile to the CLR, including innovative languages and languages with '#-sharp' appended (C#, F#, J#, A#, L#, P#), .NET versions of languages (VB.NET, ASP.NET, and more), and Iron- versions of languages (IronPython, IronRuby, IronScheme)... the list goes on.

But the world has moved beyond the desktop (and Apple hopes this means we're out of the Windows-dominated world) and to the internet and into non-desktop devices connected to the internet (smartphones). We use compiled languages less and developers have more control over what environment their software runs in. Developers are choosing open source tools and languages.

Windows mobile has failed to be a contender platform in the smartphone game. Even JavaScript might be a more useful language than C# on mobile (with many ways to build iOS/Android apps with JS, and even the HTML/JavaScript-based Firefox OS for mobile which recently became just an Android shell). Otherwise it's Objective-C/Swift for iOS and Java for Android.

Still, Windows maintains a huge share in the corporate, gaming, and desktop world. And while all of those computers connect to the Web and use web apps (which are developed outside of the Microsoft/Windows ecosystem and whose developers often find it difficult or daunting to develop for Windows after making web/mobile apps), there's still a large demand for "native" Windows software, so demand for .NET and C# in particular isn't going away, just becoming a smaller share of the programming pie.

What about Ruby? Ruby on Rails is a popular web framework. It's a top choice for web developer bootcamps. This is going to lead to an increase in the supply of new Ruby developers in 2016.

What about C/C++ ? There's a lot of systems code (Unix, Linux) written in C and a lot of pre-web software written in C++. Google hopes to replace C with Golang for systems programming and that language is trending up. C++ shares market with Java and C# as well as Objective-C and Swift and all but Objective-C are going to trend up in 2016 instead of C++.