Whether you know or not what type of project you want to work on, there are a number of criteria to consider when choosing your first programming language.
Aging and modernity of a language
Today, we no longer program as we did in 1980, as you can imagine. Programming languages have evolved over the years. Indeed, the way in which we program has evolved: this is what we call programming paradigms.
As you can see, many languages allow this paradigm: it is the best known and most popular at the moment.
Another paradigm that is gaining popularity these days is functional programming. The principle is to code a sequence of functions (in the mathematical sense of the term) that will not create edge effects. Such a paradigm can be used in almost any programming language. It is simply the way in which the language is used that will matter.
Community and popularity
If you want to get an idea of the most popular languages of the moment, you can take a look at the StackOverflow 2019 survey on the subject.
You can also refer to the TIOBE index which lists the most popular programming languages each month based on different sources of information. Learning a popular language will allow you to enjoy all the benefits of an online community. It is not easy to learn a new programming language, learning it alone is even harder. Having a community ready to help you is a major asset to learn a programming language quickly.
The more popular the language, the more resources you will find to learn it: books, blogs, video training, podcasts, conferences, Slack chat channels, YouTube channels, etc.
Frameworks and libraries available
Another effect of choosing a popular language is the richness of its environment.
To create a modern application, a framework and libraries are frequently used. A framework is a development framework: it is used to structure and guide the software architecture of your application.
A framework allows to quickly creating very complex applications while maintaining a flexible and easily maintainable software structure.
A library is simply a set of code written by a third party that can be reused in your own applications. A library makes it possible to facilitate development by not reinventing the wheel and to extend the possibilities of the programming language used.
For example, the Python language does not allow you to create basic graphical interfaces. But by using the PyQT library, you can use the Python language to create programs with a graphical interface.
The larger and more active the community around a language, the more choices you will have in the frameworks and libraries available to develop your application.
Ease of learning
It is not easy to learn a new programming language, some are more difficult than others to learn. There are so-called low-level languages and high-level languages. Low-level languages such as Assembly or C allow you to create highly optimized programs that are close to the hardware on which you are running it.
With these languages, you have to manage the use of memory yourself, for example, which can be complicated for a beginner.
On the other hand, high-level languages allow applications to be developed without regard to hardware considerations. Tools (such as the crumb picker for example to manage the memory) allow you to realize these very technical aspects for you.
The developer’s tools
For some languages like C, you will have to compile your program first before you can run it. The C language is a so-called compiled language.
This requires installing a compilation chain and having additional technical knowledge that must be acquired before even starting to program. It’s pretty frustrating.
Second, code editing can be greatly facilitated by the use of a code editor. This tool will allow you to create source code faster and cleaner and to navigate easily through it compared to a simple text editor.
There is a wide choice of source code editors that support one or more programming languages.
Type of final project
Last but not least: your project. Some projects require the use of a particular language to be developed. This is the case, for example, for native mobile applications on Android or iOS. This is the case for websites that always end up producing HTML/CSS.
For all these special cases, I have summarized your possibilities in several sections below.