Visualization Tool for CS 115
This tool was developed for use in the lab sections of CS 115. Its aim is to separate analysis from coding in students' problem-solving processes. Documentation for it (along with the tool itself) can be found at:
http://csclub.uwaterloo.ca/~hzafar.
What motivated this tool?
I found, over the course of this term, that students tended to jump into the code-writing process too soon, often before they had fully understood both what the problem was asking and what they wanted their solution to do. This led to buggy, poorly-written code and a lot of frustration -- on the part of the students, who were desperately trying to get their (at times ill-conceived) solutions working, and also on the part of the tutors, who had a hard job of trying to help students when the students themselves could not articulate what their code was doing.
To encourage better analysis of problems, I built this tool to help students brainstorm solutions without having to immediately think about what the Scheme implementation might look like. It seemed to me that having code in front of them too soon was detrimental to some students' thinking processes, especially for more complicated problems. This tool, then, allows students to think about problems in what may be a more natural way for them, also allowing them to open their thinking and be more creative with their solutions.
How can tutors use this?
This tool can be used by students themselves as a general brainstorming tool, but would also be an excellent way for a tutor to demonstrate how to break a problem down into solvable parts. By visualizing and externalizing a person's approach, this tool can provide insight into the thinking process of the person using it; in the case of a tutor, this tool can be used to teach students the kind of analysis and intuition they need to apply in order to be able to solve the sort of problems given to them on the assignments. Sometimes, it is helpful for students to compare a posted solution with their own submission, but it is often more useful for them to be able to see how that solution was constructed, what insight was required, what motivated a particular choice of functions, etc.
What's wrong with the design recipe?
Nothing at all! The design recipe is a great way to think about programming, but it is limited in that it cannot be applied to an entire program. If a student is writing a function that needs to be broken into smaller subprocesses, he/she might not realize this until the second-last step of the design recipe, when he/she actually starts to write the code and perhaps sees that it is too complicated to be inside a single function. The student must now step back and analyze the problem to figure out how to break it down, but at this point, he/she is already immersed in the code, and, as I have pointed out earlier, might not be able to think clearly and openly about a problem because of this.
What this tool allows for, which the design recipe lacks, is the ability to let the student design their entire solution before writing any code. Once they have designed a general "map" of what they want their solution to look like, they can then go ahead and design each separate function in their solution, using the design recipe, function templates, etc.
--
HumaZafar - 28 Apr 2009