This was my first year programming (well, most of my time ended up being spent troubleshooting hardware

) in the FRC, and I had a
blast. I've loved computers since I first touched one, but until getting involved with this competition my interest in programming had been waning (something about the low-level "clean slate" of C interests me oh-so-much-more than my wanderings with PHP ever could).
I'm now eager to improve my skills for next season, since I took a "learn-as-you-go" approach this season, combining my marginal PHP experience with copious Google / CD searches.
However, I'd like some guidance from those who've been along this path before as to what would be a good approach to expanding my knowledge, both in terms of general programming and more robotics-related topics (navigation, noise filtering, etc).
Would it be worth my time to start out with a basic C book and work up from there? Should I dive right into data structures and algorithms? Should I work on improving my mathematics knowledge -- if so, in what topics -- discrete mathematics? calculus? Are there any specific books anyone can recommend? What would be a good platform to develop on? -- I'm thinking of buying an
Arduino board.
Any guidance would be appreciated. If you'd like an idea of my current skill level, I know basic syntax and have delved some into bitwise operations and pointers, but have little else to go on aside from broad-but-thin conceptual knowledge of many CS topics.