C is very important for the beginners as it teaches you to write code in most efficient way. For example memory. You can define an array of 100 items OR use link list for the same. C is very raw language as it does not provide much help to the programmer. If you can write good/efficient code in C, then you can write awesome code in java. If you understand the low level stuff then you alway prove urself to be a good programmer no matter which language u use.
My personal history of programming languages started in the early 80s. I learned Apple Basic and 6502 assembly language so I could program my Apple IIe. Shortly after that, I took a community college class that taught a somewhat more powerful Basic. Next was Pascal, then Lisp and C (at the same time at university); and somewhere around then I also picked up csh. In about 1990 I taught myself C++ from one of the first books, which predated the first Stroustrup book. Since then I've taught myself Java, Python, ksh and bash, and learned a bit of XSLT too. I've not picked up a new language in a few years. Maybe I'm getting old...
This thread seems to have two strands: One of them is "Is C used today" (approximately). The other is "Is C a good first programming language". I would say that although C is an acceptable first programming language, there are several better options. My reasons are:
- When you are first learning to program, you are not learning a language, you are learning what it means to use a language to program. The language itself is not important ... but if it makes your life difficult (or easy) that is important.
- Languages that have a write/compile/link/run loop are more complex to start using than interpreted languages that hide the compile and link phases
- Languages that make pointers first class objects are prone to subtle errors and difficult compiler error messages.
- Languages that have 'hidden' parameters (
thisin C++) confuse beginners
- Languages that require you to handle low level details (memory handling, closing open files) that do not also offer at least a simple idiom for same make the learning curve steeper than needed
- OO Languages seem to be more natural than others.
- Descriptive languages (Prolog, Lisp) are often easier for newcomers than prescriptive ones (C, Java, Python).
- Types should be very strictly enforced (Pascal, Java) or very simple to understand (Python's Duck typing) to avoid confusion.
- Although the language isn't important, I do think it is important that the language make it easy to learn current programming techniques, in particular: Object oriented programming and the ideas around 'test first'.
As I said earlier in this thread: If I were choosing, I'd use Scheme or Python as the first programming language, and only after students understand the process of programming as such would I introduce C++ which is as good as C for low level concepts, but comes with the STL which makes it much easier to use. If I were choosing...