I have been asked all too often which programming language to learn first. And I’ve heard almost the same number of different opinions. Java or C++? Python or C#? Or maybe C?

High-level programming languages like Java offer the big advantage that the entry hurdle is very low. You can quickly put together a functional application that does what it’s supposed to do. The extensive ecosystem allows you to make rapid progress and concentrate on the functionality of your software. But that’s exactly the point that advocates of programming languages like C or C++ criticize. These are generally referred to as " more difficult “, which is due to the lack of abstraction of different system concepts. The most common example is probably memory management. While in C the developer himself is responsible for the allocation and release of memory, in Java this task is abstracted from the developer. Although this is an enormous convenience for the developer in later working life, there is a lack of knowledge about what is actually happening in the background for many developers who have only worked with such languages so far.

One often hears the argument that the processes in the background are not so important and that people should concentrate on the functionality of the software. But that’s the critical point: Once the basic concepts have been understood, the developer will be more careful with objects and will think twice about whether instantiation is necessary or whether access is also possible via already existing objects. In the end, this way of thinking has a direct effect on the performance of the application. Even if current computers are more and more difficult to bring to the limits of their load, this does not mean that this is a goal to achieve.

At this point I would like to point out again that this article is specifically about learning programming. The later application is on a different page. With regard to the learning process, however, it makes sense to start from scratch and thus understand the most basic principles. Who should be familiar with the details of a programming language and the internal mechanisms, if not a computer scientist?

During my studies I also started with high-level programming languages (and didn’t touch any of them during my studies), so after my studies I had to invest some time to really understand the different concepts. Since you might feel the same way, I’d like to show you what I think is the best way to get started in programming.

I don’t think you should start with Java or C# directly, but also not with C. The reason is quite simple: With C as the first programming language you make slow progress and possibly lose the desire to learn quickly. But Java, C# or the like hide essential concepts and are therefore also not suitable for beginners. I think the best solution is the combination: Start with a simple programming language, with which you can make fast progress and see early what you can achieve. But don’t stay too long at this level and then switch to a challenging language like C or C++. Here you will learn the different concepts like variables, memory allocation, collections and so on. Once you understand this, you can eventually switch to higher level abstraction languages.

If you find this concept interesting, I recommend CS50, Harvard University’s computer science course, which you can take online for free.