?

Log in

No account? Create an account

Previous Entry | Next Entry

learning how to program computers

I happened upon a blog from a high school CS teacher who mused on whether it was possible for a test to determine whether someone might have a difficult time learning how to program computers, or find it impossible. Apparently, two Middlesex University (London UK) researchers have developed such a test that they feel is highly predictive.

I have very little experience teaching people how to program computers who have no other similar skill, so I can't really speak to the validity of the research. However, I share the belief of the teacher that everyone who wants to learn how to program should be able to do so provided that they're taught properly (and don't have some kind of learning disability). I also appreciated one of the comments in the blog that speculated that the test might measure someone's model of reality and that it might be a better indicator of a vocational preference.

Comments

( 4 comments — Leave a comment )
figmo
Aug. 8th, 2006 06:26 am (UTC)
I tried to take the test but the description made no sense to me.
gregbo
Aug. 9th, 2006 03:55 am (UTC)
The way I understand it, the test is trying to identify common misunderstandings that people might have about programming, and if these misunderstandings remain after retesting.

It raises some interesting questions, however. Assuming there's something to these tests, what is it that the people who repeatedly get the answers wrong are thinking? For example, in the "swap" questions (a = b; b = a;), I can see how some people might actually think that the values are exchanged at first. But after seeing the answers, and having them explained, if they're still answering the questions incorrectly, what are their minds trying to do? Is there something that can be learned from this about how to better present certain concepts?
jessiehl
Aug. 8th, 2006 08:03 am (UTC)
To me, this is fascinating, because I've had great difficulty learning to actually write programs, even while I always seemed to do well at understanding the sciencey concepts behind them. Some languages cause me more problems than others to write - after a full term of 6.001, I still couldn't write Scheme worth a damn, but my abilities with C and C++ have improved slowly but substantially, and I enjoyed the small amount of Assembly coding we did in 004. Teaching myself C really helped my C++ - I guess it helps when I'm using a language that makes it obvious what the computer is doing, rather than one designed to implement concepts like graphs and trees and lists.

When I tried to get help from the 001 LAs, I always seemed to confuse them, because I could explain the scientific concepts that I was supposed to be implementing in a project with little difficulty, but when they'd then ask "Okay, now how do you code that first step?" I'd stare blankly at the screen while thinking "Well, if I knew that, I wouldn't have called you over." To me, this seemed like a problem that many people would have, but it wasn't, which was why the LAs were confused...most of the people who asked them for coding help had to be walked painfully through the concepts involved, but once they got that, they started magically (from my perspective, anyway) generating code. My apparent deviance from the norm led to a lot of frustration for both me and the LAs. The one "different" LA was chmrr, who was frequently the only one in the lab who could help me.

The Middlesex paper talks about how no matter what the method of teaching, a substantial number of people fail to get it. This doesn't strike me as terribly surprising, but I think the issue is not so much that one group of people can learn to program and another can't, but that each group has different cognitive barriers to programming, and teaching both groups (or whatever number of groups) with the same method is probably going to result in one group or the other failing. The reason most of the LAs couldn't help me in 001 was that I had different cognitive barriers than most of the students who needed help, but they were using methods of help with me meant to overcome those others' barriers rather than mine. The Middlesex researchers might do better to create a test that figures out where an individual's barriers are, and what methods of teaching best serve different groups of individuals.
gregbo
Aug. 9th, 2006 04:36 am (UTC)
Abelson, Sussman, and some of the others involved in 6.001 like to defend the use of Scheme (and LISP-like languages) as better for teaching introductory CS concepts than languages like Java or C because it is possible to represent complex data structures, etc. in terms of lists, and there aren't a lot of idiosyncratic things to keep track of (such as data types, pointers, special I/O directives, etc.). In some ways, this can actually be difficult for someone who has programmed in that type of language before, because they're coming in with a mindset (cognitive barrier?) that has already formulated ways to express certain types of concepts and solve certain types of problems, so they have to unlearn those techniques.

When I have more time I may expand on 6.001 (the MIT class) vs. 6.001 (the methodology).

There are some who feel that math education has slipped in the US due to unqualified teachers. They cite examples of how young kids in early grade school possess intuition about higher mathematical concepts such as topology, but poor teaching causes this intuition to be lost – replaced by rules that haven't been properly explained and thus are misapplied. I've heard of tests that attempt to find out how people don't understand certain types of math concepts but none have asserted that there are people who can't learn these concepts at all.
( 4 comments — Leave a comment )