Commonsense Computing: Episode 1
In preparation for writing the introduction/motivation section of a research proposal I’m reflecting on some previous work in assessing naive understanding of computing concepts. One of the articles recommended to me by Sally Fincher at ICER was the Commonsense Computing series. The first paper in that series looked at students naive concepts of sorting.
First let me say I approve of the work and most of the methodology that was applied. I’m in the middle of my own process for writing research proposals which are a combination of drawing on similar work and also exposing weaknesses in that work with motivate your own work. This blog is not meant to be critical, just observant of some of the things in the paper I feel were important for me to think about.
First of all, their selection of students (first day of a computer programming class) may already introduce a bias into the student’s answers. Because students have already enrolled and showed up to a class which is generally understood to exist in a computational setting, that may have shifted the student’s perceptions in that direction. Is that necessarily a bad thing? I dont know, after all we teach them these concepts in a computational setting. One of the things I’m hoping to explore in my own work to help provide a measurement of how much the questions get answered by “what they think is the right answer, or what the teacher wants to hear” is the idea of attachment strength. If anyone knows of an article that talks about attachment strength to a model I am looking for a good citation for the paper. (as well as a little help in designing that part of the assessment)
The second to last paragraph in the introduction states “The results suggest that beginners can describe algorithms, but their models of the machine and instructions differ from those of many instructors. In particular, the results suggest that instructors should guide students to understand a virtual machine in which numbers are primitive objects …” This lead to a note in the margin that reads: Are the students’ models “wrong” or just abstracted at a different level? Why should we guide them towards a NEW model rather than providing insight into their own?
The paper states in a couple of places that one of the goals of this work is to inform better instruction based upon the findings, but the largest instructional change recommended was to shift from while loops to do-until loop structures. Any intuitions expressed by the student that appear to represent a different level of abstraction were labeled as a misconception and it was recommended that the instructor work to move the student to the instructors way of thinking. While this is probably the correct response in most cases, I’m wondering if it is right in all. Are there cases when a misconception is based upon a different level of abstraction where we should simply introduce students to the concept at their abstraction level and then progress to a deeper one over time? I guess this is one of the broader questions I hope to address in my work. hm.. Any comments would be much appreciated. Even if they are based on naive models ![]()
August 20th, 2009 at 3:19 pm
Thanks for checking out the paper. We owe Sally!
As documented in the paper, the problem was also given to non-majors in a non-cs course. Those taking the CS course gave more algorithmic, readable responses, so it does seem likely that being in a CS course pushes you to a more computational approach.
However, I feel confident the paper does not intend to describe any student models as being “wrong” and the models students provide are never labeled misconceptions. In fact you’ll notice that the word misconception appears only eight times and is used strictly when quoting or describing the work of others. The models described by the students are preconceptions, and there is a very big difference. Misconception suggests the conception is wrong and needs replacement while preconception lives in the world of constructivism and simply sees the conception as prior. The question of the commonsense work is what are these preconceptions, and how might they and the knowledge of them be leveraged?
I think you’re correct in noting that the students are focusing at a different level of abstraction (which either dictates or is dictated by the model of computation they appear to have). Of course, to be successful in the programming course, one must come to have some ability using the particular model related to the language of the course.
With experience using this work, I can say a bit more about teaching implications. I use this in my course to generate discussion about models for computing, levels of abstraction, and sets of instructions. These three all interact, so of course whatever gets used to program will impact and be impacted by these considerations. We talk about the looseness of the English language and how that is hard to replicate reliably (you can have them try each other’s solutions, for example). Along with various types of statements and control structures (implicit and explicit in their solutions) this allows us to begin a discussion of variables (almost always implicit in their solutions) and then types, which are truly bizarre.
So I never see myself as leading them to a “correct” model but rather the model that happens to be used at this point because we had to make some choice about how to describe solutions to the problems we’ll work on. It might be a new model, but the point isn’t about being new, and it isn’t supposed to replace anything. Rather it’s about being useful in this context — and since they’ve written instructions for a model already, often times they’re really adapting to this model. (I also encourage students to continue writing their solutions in English if it helps, and then we discuss how to translate that to the model of the programming language.)
–gary