I disagree. Without knowledge of C, you're unlikely to have read low-level networking code, for example, which is pretty fundamental to an in-depth understanding of modern software.
I do agree that C can be a pain to read, mostly because of the crazy macros that a lot of production code tends to use.
Another classic requiring C is "Unix Programming Environment" by Kernighan and Pike (old C, but still).
Writing low level networking code does not require C per se, I have done it in several other languages, and given that the causes for the Morris worm remain in the language, ideally one should use something else.
Of course it doesn’t. I mentioned using Python to write low-level networking code above (it was painful for someone used to C). I’ve also used Lua for it (better than Python).
And as I recall, you’re a fan of Ada and Rust, both of which I have used to write low-level networking code (packet parsers, network protocols, and whatnot).
That said, those languages are not typically a well-traveled entry-point into low-level network coding. C is. I’d be as happy as the next guy on HN if we all just moved to Rust, but that’s not in the cards at the moment.
Even working in front-end dev now, I benefit from understanding what's driving HTTP and WebSocket (High-Performance Browser Networking is also a great book for understanding this stuff).
https://stackoverflow.com/questions/652788/what-is-the-worst...
That said, to me, while C the language is super simple and easy to write, I always find reading it a chore. Folks using 'clever' hacks, rarely using built in types, lack of nice standard library, and so on, make it a bit of a pain to follow unless you are prepared to invest a non-insignificant amount of time. I rarely dive into such things for this reason...