Which development language should I learn?

We are not going to start yet another flame war about which language is better, faster, or more successful. This usually only leads to sterile discussions among fanatics. However, those who are feeling attracted to the development world, may find interesting a bit of information from those who have been in this profession for some time.

To quote Bjarne Stroustrup, there are only two types of programming languages: those that everyone criticizes and those that no one uses. To complement this, the birth rate of languages does not seem to diminish over time and each person and their cat want to design a language to unify all the others.

“A ring to rule them all…” (Source: Wikia)

So we rest with yet another language that needs to be unified in a future language and the cycle restarts. In such unique panorama, a person who is just starting to scratch the world of software development has to feel overwhelmed.

Each programming language was created within a specific context, to solve a certain situation or to be used by a group of people with common interests. The first question to find a language to learn would be: What would I like to program? and complemented with which language would give me more opportunities?

Let’s start at home: If I am going to get started in the world of data analysis and deep learning, I would choose to learn Python. There are many reasons, among them, the power of the NumPy and Pandas libraries, the ease of the language to create prototypes, the wide market that it opens and the number of companies that use it. The reference library for artificial intelligence at the moment is TensorFlow and although it is written in C ++ for performance reasons, it has more Python users than of any other language.

Now, if what I’m interested in is programming devices for the Internet of Things, developing operating systems or contributing to the most popular and widely used open source projects, without a doubt I have to learn C/C++. To achieve this, two fundamental barriers must have to be overcome: the first has to do with the historical burden they have on their shoulders and the second, with the monumental volume of information that must be known before being productive. I should not feel discouraged by the challenge. The rewards are proportional to the effort required. It is like knowing well the mountain to climb before taking the risk.

South face of the Yerupaja peak, Peruvian Andes (Source: Wikimedia)

If I want to design an operating system from scratch, I would choose Rust. It gives me the power and performance of C but prevents me from making programming mistakes that could cause serious problems later on. Rust proficient programmers are in very good demand in the marketplace and their salaries are increasing rapidly.

If I wanted to program an application for a mobile device, I would learn Dart to be able to use Flutter. It makes the development of applications much easier and allows them to be generated for Android, iOS or for the web from the same source code. In addition, they are close to provide applications binaries for Windows, Linux and MacOS in just the same way. It is not an additional layer on the operating system where it works. It generates the necessary structures to operate in each system as if it were programmed in the platform’s native language. Despite being very new compared to its competitors, it already has libraries available for almost any need. After having programmed user interfaces in many languages, including Assembler, I can easily recommend Flutter because it has certain concepts from its design that allow to obtain results with simplicity that would be more complex to achieve in other languages. The market’s appetite for programmers who know Flutter is growing rapidly, and all indications are that the trend will continue.

If I wanted to develop for the web, I should start with a good grasping of HTML and the DOM. Then I should get to know the power behind CSS and only then, I would start learning Javascript for good. I would refrain from starting by the popular library of the day. They come and go out of fashion like fashion and exist thanks to the flexibility of Javascript. There are many, some very useful like D3 and ThreeJS. But that’s a topic for another post. Now if I want to publish pages that look modern, curated and professional, I have to use WordPress. This has nothing to do with technical prowess. WordPress created an ecosystem that involves the different specialties that are required to generate a page of certain impact, including publicists, designers, writers, translators, influencers, among others. Here, the development is just one component among many others and, perhaps, the least decisive. There are several technologies superior to WordPress from a technical and performance point of view but none have achieved a market penetration even close, nor have they generated the entire ecosystem that moves around WordPress.

In the case of a web service, such as a REST API or GraphQL, it would learn Go. Goroutines facilitate parallel programming to take advantage of multi-core processors. It’s a language that being easier to learn than C/C++ and Rust competes with them in performance. It has many libraries, with a development environment that greatly simplifies the compilation and maintenance of the project, it is in great demand in the market and the salaries are among the best for developers. But, if I had already learned Javascript, an alternative for a fast and reliable API is to use Vert.x web framework with GraalVM. Most of the development effort required to accomplish the task is already there.

Air Traffic Controller (Source: jobmail.co.za)

If I have to develop a critical system, that requires absolute reliability, that can never stop, not even to update or that can be hot updated without losing data, that is capable of recovering from failures, including hardware failures, so I have to learn Elixir to be able to use OTP. Elixir is a language created on top of Erlang virtual machine, a functional language created by Ericsson in the 1980s to support the international interconnected telephone network. OTP is the platform that contains the code that allows you to continue operating despite damage or that allows you to update part of the code without stopping the system. That is, most of the work and complexity is already resolved and available for use. And it’s a very mature code, battle hardened, that has proven its performance and reliability for many years.

There are many other fields to work in software development, but I think I have covered the most popular and in demand in the market, with the exception of databases, but these deserve a separate article. If I didn’t mention a particular language, it doesn’t mean that it’s not worth learning or that it’s not a viable option for the job. There are many language popularity ratings that track how popularity changes over time. In addition, there are certain projects that have so much code in a specific language that changing it is not feasible even if a new language could bring a lot of advantages.

What I can assure you, in virtue of the gray hair in my head, is that using the aforementioned languages, ​​the required mission will be able to be fulfilled, with less effort and, hopefully, with a better retribution than by using an alternative language.

Final note: this field is a constantly changing landscape. This article is constantly changing in order to reflect the evolution but maintaining the same spirit: a practical guide for someone that is approaching programming for the first time.


Leave a comment

Your email address will not be published. Required fields are marked *