Programming is a complex problem-solving domain, requiring the coordination of different types of knowledge and skills. The present study investigates expert and novice programming problem solving by analyzing talk-aloud transcripts and the code generated. Based on this analysis a set of basic goal and step components used by novice and expert programmers are identified, which will inform on the generation of cognitive models in the next phase of this research.