C really is fantastic language to learn. When I learned it, I also came from the scripting language world (Python, PHP). Having that as a base, then learning C, lead to revelations about how those scripting languages are created, and how the data structures I took for granted in a scripting language are actually implemented.<p>From what I understand in formal CS courses, you learn from the bottom up, but learning from the top down was much more enlightening for me.
C programming is still alive and well is many parts of our profession. The biggest reason why is that even though c++ _can_ do memory management like C most of the time programs implemented in it don't and you can really start to loose a grasp as to what your asking the computer to do when you abstract away where your putting all the stuff your unknowingly asking it to make.
For those who hit a wall with C when it came time to learn pointers, I'd like to plug a YouTube video I made that people seem to really like.<p><a href="https://www.youtube.com/watch?v=IkyWCOUY8V4" rel="nofollow">https://www.youtube.com/watch?v=IkyWCOUY8V4</a><p>The terminology may not be completely accurate (although I did try very hard to not say anything incorrect), but I honestly think it does a good job of showing you how to actually use pointers. I know the resident C experts will probably find something wrong, but I've received tons of comments and emails from people saying they finally "get it". It's something I'm proud of.
Well now I feel old. When I was in high school, CS was a required course for graduation and it was taught in C++ (that being the pedagogical language of the APCS exam). It wasn't even that long ago (late 1990's).
I learned C as first language. I haven't used it for any real-world work, but it was fun way to get into programming. K&R told me not just C but how to program, then I read TUPE which told me how to effectively use the best development environment, Unix.
Quote below from <i>Learning C the Hard Way</i><p>"<i>For Windows users I'll show you how to get a basic Ubuntu Linux system up and running in a virtual machine so that you can still do all of my exercises, but avoid all the painful Windows installation problems.</i>"<p>A bootable Ubuntu USB stick with persistent storage might be easier to get started with? Can be created from a Live CD.<p>Interesting idea.
Re Valgrind: Last time I worked through CTHW, I couldn't use Valgrind because of missing OS X 10.8 support and I felt like I was missing a lot by not using it. I'm tempted to go back and work through it again, this time with a VM.
Spending some time learning C, ML and Scheme is well worth it. Virtually all modern languages derive from these three languages - and all 3 of them are internally consistent enough to be beautiful.
I know learning C might seem a bit of a waste of time, but given Obj-C, C++, Python and Ruby can leverage it for performance it's not a bad thing to learn.