Should You Learn Code Against the Metal in 2019?
A higher number of people these days than perhaps a decade ago believe that languages like C or C++ are dead. Many in academia have increasingly abandoned C and C variants into the future in favor of Java or Python because of many of the headaches that might clash against the beginning programmer who is just trying to get a program to print some words and numbers. To a large degree, I suppose I agree with all this... sort of.
In my own experience, I skipped getting a Computer Science degree from a university because I made a lot of incorrect assumptions early on before my career really started rolling. First, I figured that I would be bored to death writing code, which I later discovered that that was not true and my personality type is a pretty solid match for the job. Second, I assumed that programming and 3D animation would be overly competitive, resulting in people far better than I taking all the best jobs. That was not true either: the massive growth of software developer job openings combined with the relatively few number of people who seek those jobs has created a lot of opportunity for folks like me.
But if I were to have pursued Computer Science, I think that I would have liked to have started with a 'real, low level language' like C or C++. In fact, when I sat down to learn C one night, I discovered that it is remarkably simple in its concept and design, especially for an already experienced programmer. I can literally only imagine what that might have been like to see following writing Assembly code.
There is nothing inherently wrong with starting students on higher level languages. I agree that they often should begin there because for most people they will not have a lot of use for knowing deep details about how the machine works when their primary goal is simply to automate some work.
One can easily create processes that are way faster than a human using even really bad code. And, as much as I hate to admit it in a way, that's fine and good. Really, it is, because we now legitimately have the new problem in society of individuals automating away their own jobs. Individuals who take their situation into their own hands and write scripts or programs that change their situation in some major way is something I look at as a major positive.
There is a significant difference between the subculture of people who are in non-IT positions doing that, however, and people who deem themselves professional software developers. You would hire a professional coder to make sure a job is done right, in theory. Someone who spends all day, almost every day, writing code that has a lot of demand put on it by users or circumstances, hopefully can do the job better than individuals who are automating away their tedious spreadsheet or email tasks.
Ultimately, what I would suggest for anyone reading this who is wondering if they should learn the 'compiled' languages like C or C++ that are in line with tradition is that if you have moderate experience, yes: it is time to learn C or C++. If you are still new to programming or just barely getting started, the answer is no, do not start with C or C++.
The reason is that you are unlikely to leverage the wicked capabilities of compiled languages when you have little to no experience coding. Once you realize what bottlenecks you are up against and have familiarity with the basics of modern programming like functions, variables, data types, conditionals, loops, and hopefully a little bit about parallelism: you have what you need to start tapping into the magic of compiled speeds. This is all assuming that you have use for compiled speeds.
Is there anything that says you could ignore this advice? Yes, you could. If you do, you are likely to make things more difficult for yourself than things need be. Still, you could ignore the advice and even find success. After all, many have, and many will continue to.
Hopefully this helps you make some important decisions for your career as you press on in to 2019. The truth is that for many developers, having bleeding fast performance is not a priority to them. As someone who loves efficiency and blazing fast computation: that does make me sad. For businesses who care about being cutting edge, for professionals in software development who want to be the best at what they do: they should attempt to go as far as they possibly can with their razor sharp technical expertise.