Partly due to the growing number of (online) training courses, learning how to program has never been easier, but this makes the question of where to start increasingly difficult.
A programming language is a set of commands, instructions, and other syntax rules used to create a program. Due to the rapid technological developments, not only the hardware on which our software runs has improved extremely, but the languages have also been significantly improved and in some cases even completely replaced.
The first viable explanation for the creation of new languages is the evolving needs of the industry. Despite the desire to have a universal language for all projects, for the moment this is not possible and therefore we must compromise between productivity, generality and performance. Due to this, as new technologies appear in the industry, new languages are created which are better taylored to this tech. Possibly the best and most recent example of the above idea is the public emergence of machine learning and data science. This newly adopted technology has called for languages such as R to be developed specifically for this type of products.
Not only do new technologies bring new languages but new companies have the same effect. As the various tech giants continue to vie for more costumer attention, they push their own languages into the market to draw consumers away from other companies. To see this, we need not look further that the largest mobile OS oriented languages Swift and Kotlin. Apple, as the best example, in its quest to restrict their buyers to their products, created their own objective-C based language which can only be used on their products and has disallowed most others from being used on iOS.
New programming techniques harbour the same effect, think of the for-loop, it used to be a while loop with a counter but then someone realised it would be better to just create a new type of loop. The same goes with every paradigm, object-oriented programming is another example, we often see that some languages are referred to as “object-oriented” while some are not. Whenever we think of a new method for solving a problem, it creates an opening for a language adapted to this method.
As well as this, as hardware evolves, new languages are developed as old ones will need to be completely rewritten to meet industry standards. Demonstrating this effect is the switch to C from B which took place in the 1970s, and although we cannot see much of this happening today, it is something that will arrive eventually, especially with the projected developments in quantum computing. Not just this, but we are actually currently very bad at “software engineering” and much of what passes in this field would not pass in other fields of engineering, this means that as we improve, we get a better idea of the tools we need and can build from there.
Another important reason for choosing a specific programming language is the speed with which you can enter the market with your new product or service to be developed. With the introduction of agile product development where "Proof Of Concepts" and "MVP's" are often built in the beginning, speed seems to be more important than quality in order to test the idea with customers and to convince investors to step in. This often results later in a rebuild with a more mature language in the scale up phase.
Furthermore, when we realise that there is a major problem with an already widely used language, it is nearly impossible to repair entirely and cleanly as we would have to change the language fundamentally and would therefore ruin multiple codebases. The only major language which seemingly does this is Swift, for which, with every update, Apple seems to make major changes. This, however has drawn mass critcism as many frustrated developpers are consitently having to rewrite large portions of their code which previously worked flawlessly.
As well as this, as the industry opens up to a wider public, the demand for more readable languages for beginners grows until it opens the door for new languages as is the case for Go and Kotlin, which gained their popularity through their simple nature and easy development. As opposed to this, Scala is widely criticised for its complex features, driving many developers away.
Resulting from the above, we live in a world with countless languages to choose from. Many of them are great, just as many of them not so much. However what is certain is that the industry is always changing and therefore, in 10 years most of them will not look the same, and some of them will have had their places taken, by more modern, productive languages.
For the next step, it is always good to have a bit of introspect. If you are a complete beginner, you should go entirely for the productivity and generality line, choices such as Python dominate this area and this is a great place to start understanding concepts for its ease of use and readability. However, if you are experienced and looking to create a large project with much more control over development, Java related languages are great choices.