C programming, the O'Reilly "Head First" way!