Skip to content

I already know how to program... and now, what language do I learn?

Share on twitter
Share on linkedin
Share on email
Share on whatsapp

Admit it: you have started reading this article to have an excuse (or what is the same, to be able to blame me) to start studying those cool things you hear in the Meetups, in the corridors of the work, or in the job offers, like Go, Amber, TypeScript, CoffeeScript, R, Scala, Kotlin, Erlang, Elixir, D, Clojure, Haskell, Swift, CUDA, Rust... and you want to find the answer here.

Did you leave me one you were hoping to see? I'm sure you did. Let me know.

The choice of a language has always been one of the existential doubts of the developer, both when it comes to learning and teaching, and when it comes to tackling a new development. We are never satisfied with what we already know (and we are grateful that this is the case).

Let no one be disappointed if he does not find the written answer; instead, we will ask ourselves more questions, and let each one find his own answer. We will start with these:

Have you ever recommended at any point in your career that someone learn a programming language?
Do you really think I could do it and have a clear conscience 10 years from now?

Nobody expects me to get wet, I already suffered predictions of languages that were going to succeed like Eiffel, LISP, Prolog, Smalltalk (be careful, there are articles out there talking about the rebirth of Smalltalk), etc.

In my first FutureBites entry, Developing software products: why do we do what we do? I posed the evolution of software development based on three questions: "what" we do, "how" we do it and "why" we do what we do. And today we start with another question. "Which"? Don't even dream of finding the answer. Let's go back to "what", "how", and, above all, "why".

What languages do you have to consider?

In addition to what our colleagues tell us, what we see in job offers, courses or specialized magazines, or what is answered in Quora, it is possible to find objective indexes such as the interactive ranking of the IEEE Spectrum magazine for 2017, or the TIOBE index that tells us what is used, and how it has evolved recently (or, as we will see, not so recently).

IEEE Spectrum Interactive Ranking

The IEEE Spectrum magazine analyzes its interactive ranking for 2017, obtained by weighting objective factors such as the number of new entries in GitHub, mentions in Twitter, doubts in Stack Overflow, publications of job offers, etc., in a generic article, in which we can see few surprises in the first positions:

Perhaps more significant is this other article oriented to the labor market published by the same author in IEE Spectrum, in which he analyzes the recent evolution of the labor market to predict the death of some classics (Ruby, VisualBasic, ActionScript) and others not so classics (Clojure, Haskell). But although he talks about the rise in expectations of languages such as CUDA and Rust, he acknowledges that his niche is still very small.

TIOBE Index

In this TIOBE article, the trends detected are updated periodically. At the time of writing this article, the evolutionary graph of the first 10 languages in the last few years was this:

We start with the bad news. If you were expecting to see something new, I'm sorry, today's not your day. The most freaky thing you can deduce from this data is that the assembler has gone up since 2016 (but that's not what you expected to read, right?).

But there is also good news, at least if we look for excuses to leave the known and look for something new. It's easy to see in the graph that most of the first swords (Java, C, C++, C#, even PHP) are in a down layer, so it's not out of place to think that maybe it's time to learn one of those languages from our cool list. If we expand with a table extracted from the same page, to see the evolution of the first 20 languages in the last year:

...and well!! We've already started to see some of the languages on the list. But, with the exception of R, the others are losing bias, even Go has been overtaken... by PL/SQL. Whattt?

To close the section on TIOBE, another piece of good news about the languages we expected to see: the article highlights that, for the first time, Kotlin is among the top 50 languages, after being named by Google as the official programming language for Android.

The first 50 languages? But what are you telling me, how many languages are there? It's easy to answer: many more than would be necessary. And many more than we could ever learn in several lifetimes.

How should you choose a language?

There are many factors that can make us choose one language over another. I am not going to go into language by language, but I will list questions about technical and objective factors that you will have to weigh up when deciding.

It has been many years now that boasting about how simple it is to make a "Hello world" is not enough to be the best language:

  • Is it general or specific purpose language?
  • Is it fast to compile and deploy? And to execute?
  • Is it multi-platform?
  • Does it stand up to the crowd, and does it do so in a simple, legible, and safe manner?
  • Do you have mechanisms to avoid programming errors?
  • Does it support the imperative, functional, declarative, object-oriented, reactive, ... paradigms?
  • Do you have coding standards that help readability, or does it give you so much freedom that your code will be unreadable to someone else (or to your future self)?
  • Do you have the support of the developer community?
  • Is it interpreted or compiled? Maybe both? Does it compile to native code, to intermediate code, or to another language?
  • Is it possible to run it on a console?
  • Is it web, mobile, desktop, backend, embedded device oriented?
  • Do you require a virtual machine?
  • Is it interoperable with code written in other languages?
  • Does it have the support of standard frameworks and libraries, native or cover, that allow you to address any future needs?
  • Is it easy to debug and write automated tests?
  • How is the learning curve?
  • What is the degree of implantation?

Remember that many of these questions, although most of them are objective, are not answered with a yes or a no, with a black or a white (as a curiosity, you may not know that Java was conceived as a language oriented to embedded devices, and look where it has arrived), and even if they are, many times the possible answers are neither better nor worse. It depends. It all depends.

But not everything depends on language. One language may be good for your colleagues, but your language may be another:

  • Is it similar in syntax to what you already know, or is it completely unreadable at first?
  • Is it supported by your favorite development environment?
  • Do you have enough time to learn it and consolidate it?
  • What's more, will you be able to apply it to real projects or ideas, so that you can consolidate it?

Why do you want or need to learn a new language?

But first... Do you really think you have to learn a new language? It's more than possible that your favorite language has evolved since you learned it and has many more capabilities than it had when you learned it, but the pressure of work has not allowed you to update yourself.

You know Java, but do you master everything you can do with Java 8, with frameworks like Spring or with libraries like ReactiveX?
If your thing is Javascript, do you master any of the multiple frameworks that were going to break it in 2017 but will be replaced by others in 2018?
Whatever your language is, have you learned to test correctly?

I can think of a thousand things to do to you. If you are still determined to learn a new language, I insist... Why do you want to invest a part of your time -and of your brain cells- in this effort? If it's because your boss told you to, you don't need this article.

  • You see every day job offers that you would apply for if you got over that language, and they are very well paid because there are few people who know it. You might be right to learn what few people have yet mastered. You're not betting your life on a passing fad, are you?
  • You are a LinkedIn addict and simply want to fill the chapter with knowledge, and have it validated by someone you barely know. Do you really need to learn a language for that? Put it straight. You won't be the first. Or because you want to add one more sticker to your existing collection on the cover of your laptop.
  • You're starting a new project, and you want the project to have that cutting-edge technology that everyone talks about but few people know about, starting with the language it's programmed in. Everything you've read indicates that your development times will be shortened, that your project will be bug-free, and that it's compatible with what you had before, but you haven't stopped at much else. Have you considered that you'll have to train your people, or that it will cost you (time and money) to find experts in this language, who logically won't be as expert, and therefore you're adding even more risk than you thought?
  • You want to enter worlds or paradigms where your current language is weak. You feel limited when doing mobile development, or front end, when analyzing data, when preparing tests, you have looked at options, but none of them convince you, you can do things, but your code becomes an unreadable boilerplate tangle.

If you've made it this far, congratulations! Surely, you will soon learn a new language. Which one? That depends on you. What's your reason? Remember that if you know why you do it, the rest always comes in addition. Perhaps if the language creators had stopped to think why create a new language, there wouldn't be hundreds (or thousands) of options. Welcome to Babel. And no, I'm not talking about this Babel.

If you have a moment, let us know in a commentary what was the last language you learned, and why you chose it. And if you're already in that learning process, all the better. You can also tell us what your impressions are about the language, its learning, and how you have improved by learning it.

Share the article

Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on email
Email
Share on whatsapp
WhatsApp

A new generation of technological services and products for our customers