  Novice programmers often struggle with problem solving due to the high
cognitive loads they face. Furthermore, many introductory programming courses
do not explicitly teach it, assuming that problem solving skills are acquired
along the way. In this paper, we present 'PCDIT', a non-linear problem solving
framework that provides scaffolding to guide novice programmers through the
process of transforming a problem specification into an implemented and tested
solution for an imperative programming language. A key distinction of PCDIT is
its focus on developing concrete cases for the problem early without actually
writing test code: students are instead encouraged to think about the abstract
steps from inputs to outputs before mapping anything down to syntax. We reflect
on our experience of teaching an introductory programming course using PCDIT,
and report the results of a survey that suggests it helped students to break
down challenging problems, organise their thoughts, and reach working
solutions.
