Well, it's an interesting question!<p>I started learning C almost 30 years ago and while I have learned a lot of other languages: C++, Java, Scheme, Dylan, NewtonScript, Visual BASIC, some Haskell, a little Forth, various assembly languages... recently I received training in LabView.<p>I keep winding up using C again. I spent today writing C code that runs on an embedded board. Simple code, really, running on an embedded processor with very little RAM. There's still a need for this. I have most of modern C++ available on this platform. It is technically C++, but I'm not using any classes or templates, so it looks for the most part very much like C99.<p>As someone who is well-acquainted with C's weaknesses as well as strengths, I would honestly like it if I could migrate all my work to something else. I really like functional languages and I really like strict type safety. I am looking forward to using Haskell on embedded systems and think it will have a niche there. I'm looking forward to expressing embedded state machines in FRP (functional-reactive). However, these things are still relatively limited and experimental. As for Rust and Go, etc., it's still a chicken-and-egg thing, I think. And I'm not sure they are really suited for _small_ chips -- what's the minimal runtime? Can you get rid of all garbage collection at runtime? And remember that practical issues of tooling are _huge_. They tend to swamp theoretical elegance and even sometimes efficiency by a large margin.<p>So, I guess the answer is "I don't know." C still has a niche. At some point it may truly be unnecessary. As to whether it is worth studying or investing your time understanding, I would say the answer is almost certainly yes. The C runtime model is still the dominant one; C is still the language used to build most of the tools that other languages are built on. If you need to understand what is going on at the low level, just above assembly language, and programmers still do, they still need to understand C.