C is an important programming language. It was created more than 30 years ago by Brian Kernighan and Dennis Ritchie and it is still used a lot especially to write systems software.
The Linux kernel, for instance, is written in C.
C is the new Assembly and this makes it an important language to master if one wants to be a proficient computer scientist.
In my opinion, there are two reasons why C is the new Assembly.
The first reason is portability. Assembly code is not portable and C is. Remember, C was invented around 1973 to write UNIX in a portable way. It is more sensible to learn C than to learn, say, IA-32 Assembly code especially it your time is limited.
Secondly, programming in Assembly is rarely done today because modern processors are superscalar and therefore reorder instructions. As a result, what you write is not what is being executed (or, more precisely, the order may be different). As far as I know, it is more efficient to use a good optimising C compiler (like gcc) than trying to manually optimise Assembly code on modern processors.
C allows someone to really understand how a Von Neumann computer works. And this is crucial to become a good problem-solver.
<rant>
At the University of Mauritius, the first language a student learns is C++. More precisely, it is a limited version of C++ where all the new features are ignored (STL(!), templates and generic programming for example). During the first year, the students only does procedural programming along with a little bit of object-based programming when doing the data structure module.
In my opinion, C would have been a much better choice. Sure, printf is not as easy to use as cout but C is so much simpler to learn. And, personally, I find it more elegant.
I really think that a first year University student should know all of C (and not a small subset of a more complex language). They should really understand what a pointer is and how recursion works.
Building a strong foundation in programming is important for someone who intends to work as a programmer for years and years.
The C Programming Language should be used as a textbook along with another good book on Data Structures.
One immediate benefit is that students learning graphics or systems software would have fewer problems using the standard libraries which are mostly C libraries (UNIX system calls, the pthread concurrency library, OpenGL, etc.)
Finally, instead of learning the syntax and semantics of a language, it would be much more interesting (not to say beneficial) to learn how to solve problems. One possibility is to teach students to solve the kind of problems given during the ACM Inter Collegiate Programming Contest (the easy ones at least…)
</rant>
Opinion?
(Addendum: While reading this post, I realised that another possibility is to teach C to make the student know how a computer works and, in parallel, use a higher-level programming language like Scheme to learn about how to build data structures. Opinion?)