A few days ago I saw this Instagram short. One of many like it that I’ve seen over the years, listing popular coding languages.
I hate these kinds of lists. Popularity has not and never will be an appropriate measuring stick for the quality of a language. People do this all the time because they think “hey, if it’s popular, it must be good”. Or “hey if it’s popular, I can get a job” or “if it’s popular, I can get help from others, and learn it quickly.”
In the corporate world, the quote changes quickly to “hey, if it’s popular, I can find talent for it easily.”
This is a stupid way to prioritize your use of languages. Real programmers can learn a new language. All you’re doing is hiding in the popularity. You’re basically saying “I don’t care if I hire good talent, I just want some schmuck who can convert my thoughts into a half-working piece of technology in this particular language”.
But that’s not what this post is about. This post is intended to dispel the belief that C is somehow worth investing our talent pool and our own mental energies into. The short answer is that it is not.
One of the commentors on the post said…
C is also called the universal assembler. If you really know C you can then program in any language.@mdpffm
This is a relatively inaccurate paraphrasing of what actually was said about C. So I had to post a corrected version of this comment or else I wouldn’t sleep at night…oh wait I don’t sleep at night, anyway. Well, I had to post it, anyway.
Here’s the correct version:
C is given the tongue-in-cheek name “portable Assembly language”, not “the universal assembler”. It is intended to put it in its place. People should not be coding in C any more. It is a language riddled with problems.@amdphreak
to which I received the usual ignorant reply:
@amdphreak its fast though. and low overhead. you are in full control. memory management is tedious though and its not as trivial when doing object oriented programming of course. what other issues?@distress_cycle
to which I replied,
@distress_cycle There are better languages with similar performance, some of which are even faster than C. Rust is one. Nim is another—it just compiles down to C. Haskell can best C when compiled with GHC (Glasgow Haskell Compiler). So–no, there’s no reason to use C directly. It was always bad. People just put up with it long enough to build on top of it. Realistically, it should have been replaced by a Functional system language, for example Standard ML.@amdphreak
All of our system languages could have, and should have, been replaced by functional languages. Functional languages provide a much clearer interface to handle the bulk of the processing tasks that are the daily grind for systems programmers. In mathematical terms, Functional languages are optimal for the largest subset of all of the possible types of programs you can write. In Functional programming, there is a Purely Functional subset of that subset of problems where all that is required is to transform data from domain A to domain B. While it is true most computational problems are within the realm of pure functions, in real-world situations, you need to change/mutate the value of variables. These mutations, known as “side-effects” of a computation, are supposed to be a much smaller “surface area”, so to speak, of the entire process of designing programs. They are to be treated with utmost paranoia by the programmer. Mutable state is what the programmer should dedicate all of their attention to keeping mental track of, to know what their code is changing about the assumptions that go into the next decision they make as programmer. If mutable state is disregarded for even a moment, the programmer is setting himself or herself up for writing a bug.
Currently, the Rust language has attracted quite a following, thanks to its “borrow-checking” system that allows the compiler to handle the task of inspecting code for memory-management-related bugs. This is a big step in the right direction.
Linus Torvalds, the creator of the Linux kernel, has approved Rust as a primary language for developing Linux kernel modules (drivers). This will greatly improve the reliability of drivers on Linux and breathe some fresh air into the systems development industry.
At this point, it is pretty troll for anyone to say “C is great.” In fact, it’s so troll that the CTO of Microsoft’s Azure department, Mark Russinovich, has openly told his developers to stop using C and use Rust instead.
God, I love it when I’m vindicated.
C is like the Kardashians. It’s popular for being popular. It has no other intrinsic value to society.
I appreciate the fact that these heads of industry can finally agree with me on something. It has been a long time coming. People have ignored my advice and poo-pooed my criticism about the stagnation in the industry for many years. Mark Russinovich was originally hired by Microsoft because he criticized them openly in the 1990s. I could only hope that Microsoft would do the same thing today and hire me. Although I don’t really like their business model, Satya Nadella has impressed me as CEO.
But, now I have to ask myself, are they catching up to me, or am I just getting slower? ….Nah, that can’t be it…