Everyone talks about "thinking like a programmer" and "learn problem solving, not code", but it's not easy to go from those good intentions to actually teaching (or learning!) these abstract learning objectives.

This chapter contains a list of skills, exercises and resource to help you bridge the gap between good intentions and good coding.

And what is programming anyway? Before you learn it, you should have some idea what it is!