Doubtful. I think web development, mobile and enterprise are the biggest development domains by headcount, and neither has to normally touch C or C++.
And that's fine, why does one have to understand an ancient language when they can interact perfectly fine with machines by using Python, Swift, Java etc?
That's why I included Java, C# or Javascript. If you can read those languages you can read C.
And it's not the language what they need to understand. C in itself is a fairly simple language, that's why I said that any person with experience in that family of languages would be able to read it straight away. What one should understand is how the computer is doing what you ask it to do. What does "create an object" mean, what is a "reference to an object", what are the heap and the stack, etc. These are concepts that are extremely useful and, as the parent comment said, almost required to know in order to be a full programmer and be able to understand what happens when you create your programs.
Any JavaScript or C# programmer will understand the ifs, elses and fors, but that doesn't mean they'll understand what the C code does or whether it's correct - two essential aspects of reading code.
I've been doing C++ for more than a decade and had two tough experiences lately:
* I had to review a C project of several thousand lines. It's impossible for a human to understand if memory management is done correctly without weeks of deep analysis, so I had to resort to tools.
The logic of the code is also hard to make out because of the memory bookkeeping.
* I was reading the open source code of a Linux program and had to dig deep into a couple of system topics and read the documentation for half a dozen syscalls to make sense of it.
For me, C is one of the hardest languages to understand, you're always zoomed in at 10x, looking at all the insignificant details of memory management, working with strings and arrays, etc.
> Any JavaScript or C# programmer will understand the ifs, elses and fors,
I think that's what the parent comment meant with "reading (normal) C". The language itself is simple, because it only has the ifs, elses, and fors. Of course, given the simplicity of C the projects end up being complex because they have to manage a lot of things that other languages do for the programmer, but that is outside the scope of the language (i.e., you don't need to resort to the language manual to understand it).
In other words, the discussion is not that everybody should be able to dive deep into C projects and instantly know what's happening, and know all syscalls and everything. The discussion is that a programmer should know what is memory management, what is a system call, etc, which is practically synonymous to being able to read normal C.
If you can read those languages, you can probably tokenize C fairly well, and parse a decent proportion of it. But only understand maybe a small fraction.
>And that's fine, why does one have to understand an ancient language when they can interact perfectly fine with machines by using Python, Swift, Java etc?
If the interpreter or VM used by any of those languages is written in C, someone still needs to understand it. Not to mention that it doesn't hurt to understand the internals of your chosen language if you want to make the most efficient use of it.
Where someone should be a C pro, not the local JS guy that dabbles in C and can "read" it.
Doesn't hurt to know the internals, but one's time's limited and better spent on other endeavors. If I wouldn't be doing embedded I wouldn't touch C with a 3m pole, nor would I need to :)
In fact my life's mostly C free nowadays and I'm quite pleased with that.
Because (1) those are written in that ancient language, so you're not a complete engineer if you don't understand the workings of your tool, and those tools come with disclaimers which make every issue your fault. (2) integration with tons of C libraries or libraries with C API's is a reality.
One of the biggest fallacies I see spread on forums is the statement that the age of a language or a program is an indication of its failings and a need to be replaced. Typically spoken by amateurs and other hobbyists.
You're likely correct, but most of that code's either been written long ago and is now in maintenance mode or if it's new code it's very specialized and irrelevant for 99% of the developer population. Do I care what some internal chip fw is written in? Not really, but it's probably C and it's probably full of security vulnerabilities. Such is life.
There's also those that misguidedly use C when they shouldn't (e.g to speed up Python code). It's unfortunate, but such is C's siren song - mesmerizing one with promises of speed only to be dragged into the depths of undefined behavior.
6 of the 8 things you list are C or C++ which is, essentially, C with benefits--most of the code in C++ is identical to C except for interfaces--classes/inheritance/and all that. AI/ML are a small slice of the programming pie that is performed by people who wouldn't use C at the top level but you ignore the fact that, when speed is needed, C is used even there.
I'd go into this more but I don't feel like explaining these things to people ad nauseum. C is one of the most used languages around the world, in new projects, too, and nothing you've said changes that.
No need to explain anything. Where are the new C projects? :)
Some of the things I listed are C++, which is a different language, which kept evolving unlike C and also unlike C is in demand today for all sorts of hot domains. The two can't be mixed.
Redis comes to my mind which is actively developed and can be considered one of the new projects that is powering lot of new stuffs ... Also SQlite, Postgres which are very actively developed and again being used in much of the newer stuffs either directly or indirectly ...
But in a way, you may be right ... all the critical new lower level programs like web servers are now mostly written in Go, Rust and C is not favourably considered for them ...
And that's fine, why does one have to understand an ancient language when they can interact perfectly fine with machines by using Python, Swift, Java etc?