I’ve been a member and moderator of XtremeVBTalk, a discussion forum about Visual Basic, for several years now. At first I asked a few questions, but I soon realised that answering them is a lot more interesting and educational, so I’ve mostly been doing that. I especially like answering questions that I almost know the answer to, but not entirely – I know where to start but not where it will end. (Those are the educational ones.) The other interesting category is open-ended questions about fundamental principles and approaches – the kind that asks, “How would you approach this problem” or “How would you start thinking about this”.
That site has done more for my education and development as a programmer than any other resource out there. In fact, if it hadn’t been for XVBT, I am pretty sure I wouldn’t hold my current programming job. I might have gotten there by some other route in the end, but it would certainly have taken a lot longer.
Answering other people’s questions, and reading even more questions, I can’t help noticing that some people there have no business programming. The whole enterprise is obviously doomed from the start. Some of them stick around for many months, and there is no perceptible improvement in the quality of their posts. Their questions are not ignorant – which would excusable. Worse: they display such a fundamental lack of understanding of the basic principles of programming that I don’t even understand how they think. I’ve tentatively come to conclude that to them, programming appears to be a combination of (1) imitation (= copy & paste), (2) random attempts at changing things without understanding why they do what they do, or knowing what effect they expect the change to have, and (3) simply crossing their fingers and hoping. Basically they appear to treat computers as black magic, unpredictable and unfathomable, rather than as dumb machines.
I found an interesting article a month or two ago, that talks about this – The camel has two humps, by Dehnadi and Bornat. The authors gave students a multiple-choice test asking them to predict the results of very simple Java programs, focusing on simple assignment. The code for a typical question looked like this:
int a = 10; int b = 20; a = b;
Their intention was to “observe the mental models that students used when thinking about assignment instructions”. The test was administered twice – before the start of a programming course, and in the middle – and correlated to results on examinations.
Some quotes from the article:
We expected that after a short period of instruction our novices would be fairly confused and so
would display a wide range of mental models. We expected that as time went by the ones who
were successfully learning to program would converge on a model that corresponds to the way that
a Java program works.
We could hardly expect that students would choose the Java model of assignment […], but it rapidly became clear that despite their various choices of model, in the first administration
they divided into three distinct groups with no overlap at all:
- 44% used the same model for all, or almost all, of the questions. We called this the consistent
group.- 39% used different models for different questions. We called this the the inconsistent group.
- The remaining 8% refused to answer all or almost all of the questions. We called this the
blank group.
It turns out that the consistent group generally succeeds in their exams, and the inconsistent group performs poorly. Notably, some students moved from the inconsistent group to the consistent one during their course, but no one moved in the opposite direction.
And finally the important bit – why is this so? This is the part that I found really interesting, because it matched my own observations so closely:
It now seems to us, although we are aware that at this point we do not have sufficient data, and so
it must remain a speculation, that what distinguishes the two groups is their different attitudes to
meaninglessness.
Formal logical proofs, and therefore programs – which are formal logical proofs that particular
computations are possible, expressed in a formal system called a programming language – are
utterly meaningless. To write a computer program you have to come to terms with this, to accept
that whatever the problem seems to mean, the machine will blindly follow its meaningless rules and
come to some meaningless conclusion. In behaving consistently in the test, the consistent group
showed a pre-acceptance of this fact: they are capable of seeing mathematical calculation problems
in terms of rules, and can follow those rules wheresoever they may lead. The inconsistent group,
on the other hand, looks for meaning where it is not. The blank group knows that it is looking at
meaninglessness, and rejects it.
I recommend you to have a look if you’re interested in programming and/or education at all. It’s a well-written article and easy to follow, since presents both the methodology and results very clearly. And at only 13 pages it’s quick to read.
Leave a comment