In this post I want to write while I am using C++.
When you google any variation “C++ & beginners”, besides beginner materials you find, most of the links are filled with c++ hate stuff. To protect myself this stuff getting into my head and demotivating myself I have decided to write down why I am focusing on C++ right now.
Basics for me mean the following. (Not necessarily in the listed order).
- Computer organization from programmer’s point of view. While it is possible to program without knowing the low level details, I believe that one has to know what is going on behind the scenes. In order to be really effective one needs to know how to fix things when they go wrong, or at least why they break.
- Data structures and algorithms. These are the basics of computer science and programming.Even if you are good at designing software, without good understanding of data structures, algorithms and their space and time complexity, one will never understand while when you write two programs that apparently do the same thing, one runs for 2 seconds and the other one for 2 days.
- Linux. I am tired to feel helpless when I install Mono or stack and things break. In order to be able to fix them, I need to understand how things work. Besides that, being the most common open source Unix clone, if you play with its source code you can learn a great deal about how computers and operating systems work in general.
- Web – it is everywhere. Besides that, when you learn languages like Haskell, F#, Clojure and others, most often than not, real world examples deal with web programming.
So why C++?
- Arguably, for the time of writing there is no better language for doing low level stuff than C. C++ has most of C language as a subset, and by learning it you will be able to read and write C code too. So, after learning some C++, programming C will be relatively easy.
- For now, it is the language to use in competitive programming. Why would I do competitive programming at 30? Well, you can definitely learn algorithms from a book – but to become good you need practice. And I feel that writing code is more fun and beneficial than writing pseudo code. First of all – it forces you not to miss important details, second you get interactive feedback. For now, competitive programming websites seem the best way to practice coding algorithms and data structures.
- It is popular in scientific programming. If I want to get some “real experience” I can not limit myself to book examples. Hence I need either to participate in open source projects or do some programming related stuff in my university. Most of professors in my university I’ve talked with and I might work with later, use C++ for high performance stuff.
- It is the most popular language in graphics programming. And I am really interested in it.
So, it has the 1,2,3 in my list covered. For 4 I will need to learn basic JavasSript sometime later.
As for the language itself – I do not think it deserves the hate it gates. While it is less fun that F# or python for now I do not feel that it is that bad. So for next few months I need to stop worrying about learning the wrong language and just code. After I get my basics covered, I will need to think what I want to do next.