How Novice Programmers Learn to Code: A Teaching-as-Research Project
This is a guest post by Jonathan Wellons, graduate student in computer science and participant in our Teaching-as-Research Fellows program in 2009. Thanks to Jonathan for sharing his experiences in the program. We welcome contributions to the CFT blog by others in the Vanderbilt teaching community!
Most computer scientists either remember how frustrating their first programming class was, or they’ve blocked it out. Even if we do forget our own struggles, we can’t ignore the feelings of numerous students who come to our office hours, drop the class or leave their expected major. Studies have found that worldwide, barriers to learning the basics of programming lead to attrition from the major or students graduating without essential skills (McCracken et al. 2001; and Truong, Bancroft, & Roe, 2003). Learning to program is a new kind of learning for many students: On one hand they must memorize arcane keywords with inflexible syntax, and on the other they must algorithmically break problems down into tiny chunks which match the keywords. And if they leave out a comma, they’ll get an error message that looks like it was written in Martian.
Last fall, Dr. Julie Johnson and I felt we needed to find a better way to teach students programming basics. The literature is very sparse and an informal survey of our peers showed that each professor had adopted a different style. So we decided to get a fresh start on this issue. Fortunately, we were in the right place at the right time to be part of the Teaching-as-Research (TAR) Fellows program funded by the Center for the Integration of Research, Teaching and Learning (CIRTL) at the University of Wisconsin.
Under the guidance of Derek Bruff from Vanderbilt’s Center For Teaching, we attacked our research problem with qualitative research. We applied a common tool in the social sciences, grounded theory, which works a little like the scientific method in reverse by generating hypotheses from data. Grounded Theory is particularly well-suited for case like ours where there are no existing theories to work from. Rather than impose our own biases in thinking up theories, it directs us to ask open-ended questions.
I interviewed 14 students in an intro class and recorded about 50,000 words of their reflections on their own planning processes, how they adapted and if they were successful. I broke the text down into about 300 codes, belonging to 14 concepts which in turn I grouped into 5 categories. Each code reflects a specific thought, goal or experience. Concepts roll codes up into groups such as “Testing,”
“Background,” and “Plan Adequacy.” Similarly, categories bring together like concepts. Grounded Theory examines the connections between categories to derive hypotheses for further testing. Not all of this was natural for me, but fortunately the TAR fellows met weekly with Derek to share insights, challenges and progress updates. With half a dozen helpful scientific minds there to brainstorm, we started to find and make sense of patterns in the data.
Our resulting theories are input for future work of three kinds: drilling down into more specific theories, testing the theories, and enhancing teaching strategies. One of our theories is that novice programmers attempt to adapt problem-solving strategies from other domains, such as mathematics or essay composition. Another is that planning by means of pseudocode (writing an intermediate algorithm halfway between English and program code) is achievable for novice programmers. I’d love to see what we can come up to put these theories to the test and to transform them into something that will finally help more students enjoy CS 101.
You can see Jonathan’s project poster here [PPT]. He and Dr. Johnson presented their work at the 2010 International Multi-Conference on Engineering and Technological Innovation. See our TAR Fellows page for more information on that program.
Image: “I know you and Frank were planning…” by Flickr user Tim Norris, Creative Commons licensed. (That’s not Jonathan, by the way.)