C is a general purpose language that can be used to write anything. There is probably more C code today than any other language just because C has been around so long. Other languages can be more productive because they have large amounts of high-level libraries already written. C++ for example has generic data structures that would be possible to write in C, however there's absolutely no justification to take the time to write them when you can use C++. Java has a huge amount of networking code already written, and other code like AJAX libraries on top of that, so while you can write BSD socket code from scratch in C, it's just not worth the time it would take. The flip side of this is overengineering is threatening the collapse of software development under its own complexity. By the time you write a Java program that uses J2EE, EJB, AJAX, Spring, Struts, Hibernate, JDBC, JPA, JDO, and everything else, and do presentation using JSP, JSF, JSTL, EL, HTML, CSS, JavaScript, jQuery, jQuery plug-ins, and everything else, the project collapses like a skyscraper being demolished. I think one more MVC library will be the straw that breaks the camel's back.