Novice programmers often struggle with problem-solving due to high cognitive loads and the lack of explicit teaching in many introductory programming courses. The PCDIT framework provides a non-linear, scaffolded approach to guide students through transforming a problem description into an implemented and tested solution for an imperative programming language. A key feature of PCDIT is its emphasis on developing concrete cases early in the problem-solving process, encouraging students to think abstractly about the steps from inputs to outputs before delving into syntax. This approach helps students break down challenging problems, organize their thoughts, and reach working solutions more effectively.Â
The original PCDIT framework
The revised framework clarifies the second stage as "concrete cases"
The PCDIT framework was developed based on the previous existing approaches to solve problems beginning with Polya's problem solving steps. It chooses a bottom up approach as it targets novice programmers. This means that this framework tries to develop solutions from scratch without any existing mental bank solutions. The framework is meant to be a non-linear problem-solving approach designed to assist novice programmers in transforming a problem specification into an implemented and tested solution for an imperative programming language. Utilizing this framework reduces the high cognitive loads faced by beginners and to provide explicit scaffolding for problem-solving, which is often not directly taught in introductory programming courses. For example, instead of directly writing code which requires novice programmers to think about solution and syntax at the same time, the framework starts by asking what is the input and its data type. It is more manageable step to begin a problem.
The PCDIT framework consists of five main phases: Problem Definition (P), Concrete Cases (C), Design of Algorithm (D), Implementation (I), and Testing (T). Each phase is designed to guide students through the problem-solving process in a structured and reflective manner.
Problem Definition (P): In this initial phase, students are asked to identify the inputs and outputs as well as their data types. They are then to summarize in natural language what the problem that they are to solve. This step is crucial for understanding the problem and formulating it clearly. Students are encouraged to provide detailed descriptions of the data involved and how it can be represented in the program. Thinking about data and its type are crucial for subsequent steps.
Concrete Cases (C): Before thinking about the algorithm, students develop concrete cases. This phase helps students conceptualize the abstract steps from inputs to outputs, making it easier to generalize to an algorithm later. Unlike other frameworks that incorporate test cases only later into the testing phase, PCDIT focuses on working out the abstract steps from concrete inputs to outputs early on. One of the key features about this phase is that students are to work out the process of computing the output from the input step by step using the concrete cases they choose.
Design of Algorithm (D): In this phase, students enumerate the steps they took when they work out the Concrete Cases (C) phase and identify patterns to generalize them into computational steps. These steps can be written in a mix of pseudo-code and natural language, easing the transition to actual code later. This iterative process helps refine the algorithm through multiple iterations. This is the part that moves their thinking from concrete steps to a more generalized steps for various inputs and cases.
Implementation (I): Students then map the pseudo-code of their solution to concrete code in the programming language. This phase is closely iterated with the Testing (T) phase to ensure that students regularly test their programs after completing every few lines of code. This iterative testing helps maintain motivation and productivity by tackling smaller, manageable sub-problems.
Testing (T): The Testing phase involves using the cases identified earlier in Concrete Cases (C) phase or proposing new ones to ensure the program operates correctly on all test cases. This phase is crucial for identifying and correcting errors in the implementation. Key to this step is to test the intermediate computation of their concrete cases.
You can download the template for the PCDIT worksheet from this link: https://tiny.cc/pcdit_worksheets .
You can get a feel of doing PCDIT framework by playing around with the following custom GPT: PCDIT Chatbot for Novice Coders.
Kurniawan, O., Jegourel, C., Lee, N.T.S., De Mari, M., Poskitt, C. M., 2022, 'Steps before syntax: Helping novice programmers solve problems using the PCDIT framework' in HICS 2022, 982-991. (ResearchGate).