“[C has] the power of assembly language and the convenience of … assembly language.”
One of my great loves is the C programming language. To be quite honest, it’s not the first (or second, or third, or…) language that I learned. What I have come to love about it isn’t that it’s amazingly simple, or very object oriented (naturally, but this is a discussion for another day), or that it’s got the newest and best of anything. Far from it. On the other hand, much like the rest of how I view the focus of my environment, I like to have a clear sense of what a program is doing. C, and in particular ANSI-C, has a very precise rule set that leads to high portability and easily digested source.
Part of the reason to prefer C is its age. Since it’s inception which was over 30 years ago, it’s yet to be marginalized or trivialized. It’s still the basis for Unix and Unix-like operating systems. It’s the foundation of the Linux kernel, which is the most widely known open source project that I am aware of. Most of the GNU toolkits are C. As such, C has been analyzed and scrutinized in extreme depth for quite some time now. If you have a general idea of what a program should do, then C has practically been adopted as the “scientific language” for computer programming.
As I had mentioned previously in regards to the speed of binary execution, C puts you much closer to the hardware than you see in many more “modern” languages. You’re dealing with individual bits, pointers, and bytes. This in and of itself doesn’t exactly make for faster programs so much as it helps the programmer to be more able to optimize the individual program for a particular purpose. Where other languages can obscure how the data is being manipulated, C doesn’t provide such abstraction which leads the programmer to always be thinking about what is going on at a machine level.
Finally one of the major reasons is that with the amount of programs, and in particular FOSS programs, there is a monolithic pile of research material. There are endless “how-to’s” and tutorials and books about everything C. The only excuse for not understanding something is a lack of study. The C programming community is enormous. As such, the understanding of the language grows, and the projects that are created in C continue. For OSS projects, the probability of being written in C is very high. If a new programmer wishes to be involved at a coding level with these projects, then C is obviously a requirement.
New languages arise and fall. Some are better suited for specific purposes than C. Still, I think that C will live on for many years to come. I still have tons to learn about it myself, and will continue to do so. As I learn new techniques with it, the possibilities of what can be done continue to grow. Part of the depth and community of such a simple language might be the reason for its continued use, but the speed of execution doesn’t hurt.