This year I’ve been making a concerted effort to learn C. I’ve toyed with it a number of times over the last few years, but never studied it in a focused way.
At the moment my goals are to be able to create or improve Linux drivers for bits of hardware that don’t work, and to be able to fix bugs in C based Linux apps, of which there are a lot.
I’m working through the K&R book and really enjoying it. I love the exercises. First I make a good attempt at completing each exercise entirely on my own, with only the language features introduced so far. Then I compare what I’ve done against more seasoned solutions using the K&R2 Solutions site. I’m glad I took this approach; the latter step in particular is teaching me ways to reduce redundant code and write more optimally.