In Computer Science, students are expected to be able to use a programming language to problem solve. However, the technical ability to use said language can be difficult for many novices. Simply using the incorrect keyword or making a "typo" while writing code are often the first mistakes students make. In spoken languages like English or Japanese if a novice speaker makes a mistake, such as using an incorrect article or tense, they can still be understood by listeners. In contrast, mistakes in programming languages result in the compiler or interpreter responding with an error message and refusing to interpret any further code. Thus, while Computer Science is more than programming, the ability to translate your solutions into functional code is still a very important skill that is needed for success in Computer Science.
Whether to focus instruction on learning technical or conceptual skills provides an interesting "chicken or egg" problem to CS education. Students need skills such as decomposition and abstraction, but also need to know how to implement functions. Our assumption is that once technical skills are established, then conceptual skills can be taught freely. This "technical foundation" approach is commonly seen in skills we consider more technical in nature, such as playing music, cooking, gameplay, and sports. For example, when a novice begins to learn to play the piano, they must practice finger placement, scales, and recreating simple melodies like "Mary Had a Little Lamb". They are not expected to understand music theory or create their own unique melody.
In a similar manner, Computer Science is a combination of the technical skill of computer programming and the conceptual skill of problem solving. Much research focusing on the metacognitive aspects of CS tend to look more to the problem solving skill. However, the first issues novices face in their CS1 courses are technical. Further, if students do not overcome these initial issues, they will continue to stuggle as the course progresses. Thus, we assume that a technical foundation needs to be established before conceptual understanding can be learned.
To facilitate this technical foundation, we developed the TYPOS CS Education Platform. TYPOS, named after the frequency of syntax errors made by novices, provides deliberate practice for many of the technical skills that encompass computer programming. For example, since common syntax errors are some of the first issues students have, typing exercises offer students the opportunity to practice their typing skills on a worked example of code without the need for problem solving. In our studies, self-selected students that completed these typing exercises earned higher final grades and had less build failures in projects. TYPOS also offers many of the other exercises types common in CS Education, such as Parson's Puzzles, Output Prediction, Bug Finders and Fixers, Self Explanation, and traditional Coding Exercises.
Typing Exercise Example
Rather than forcing these exercise types to compete against each other, we focus on the "path to mastery" students take. Learning is still an ill-defined domain with time as an uncontrollable variable in the process. Further, as a student transitions on their path to mastery, certain exercises types may be more beneficial. Like a piano player, at some point practicing scales is no longer necessary. This research focuses instead on the sequence of activities made by the learner that ultimately mastered a given CS topic. This is especially of interest to low-performing students who activity sequence leads to improvements. Since this sequence has been shown to result in mastery in one student, it may be beneficial to suggest it to other students struggling as well.