How we Teach Introductory Computer Science is Wrong:Rebuttal
The original 1985 Sweller and Cooper paper on worked examples had five studies with similar set-ups. There are two groups of students, each of which is shown two worked-out algebra problems. Our experimental group then gets eight more algebra problems, completely worked out. Our control group solves those eight more problems. As you might imagine, the control group takes five times as long to complete the eight problems than the experiment group takes to simply read them. Both groups then get new problems to solve. The experimental group solves the problems in half the time and with fewer errors than the control group. Not problem-solving leads to better problem-solving skills than those doing problem-solving. That’s when Educational Psychologists began to question the idea that we should best teach problem-solving by having students solve problems.
This paper then goes on to explain how programmers should now be taught like this.
This would seem to suggest the the best programming course would be a slide show of common programming problems and example code that solves them. I however have a problem with this, I think this method of teaching will turn out really really good code monkeys, NOT programmers. I would like to refer back to the FizzBuzz test for those of have not heard me personally rant about it :-
Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.
Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? The majority of comp sci graduates can’t. I’ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.
I think this is the problem. In that first study where students where shown how to work out algerba problems, they will now work out those problems much faster than any other student. However I believe if they are shown problems that varry from these even by a small margin they will begin to fail very fast. This I believe is what the FizzBuzz test begins to pick up on, we as undergrads are never really show a problem that looks like the FizzBuzz, so only those programmers who know how to solve orginal problems can do it.
I believe they are really 3 kinds of Porgrammer:
- Code Monekys: adapt solutions they have seen before, to simler problems.
- Programmers: Can create new solutions to problems within the logical structure they understand.
- Hackers(Uber Programmers): Can adapt the solutions within logical stucture they understand to solve problems in unexpected ways.
Taking the approve mnaterial into account I believe you train :
- Code Monkeys: by showing them code, and they will then be able to stick together that code with other bits and solve simple problems.
- Programmers: by making them solve problems them self’s, and even better get them to work on private projects, even if they are crazy and will never work they will learn skills in doing them.
- Hackers(Uber Programmers): im not sure how you train these, other than sets them problems they should noty be able to be solved, and see what happens
There is room in the world for all of these kinds of programmers be be aware, of which type you are creating becase Code Monkeys can solve alot of problems but to produce somthing great you nearly always need a Programmer or a Hacker.