Ahead of the CSTA Conference, I met up with a long time friend and we sat around chatting and solving all of the ills of the world. If only anyone would listen to us.
The conversation eventually got around to problem solving with computer science. Most computer science teachers will tell you that it’s the ultimate discipline for having students solve problems. You see so much of the current thinking about visible thinking, collaboration, testing hypotheses, etc.
Then he made an interesting observation. Do we, in fact, teach problem solving?
I thought it was an odd question. Isn’t that what we do?
Then he pushed on. We both agree that the best computer science book ever written was Oh! Pascal! Just reading it made you want to program and solve more difficult problems. But that’s not how many courses work.
Courses, and most textbooks, teach about the structure of the language. So, you might have a unit or a chapter on the FOR structure or the IF structure or …
Then, to reinforce the learning, the student will see and then write a number of programs using that routine so that they can prove they understand. The common wisdom is that you have to do that in order to understand how it works. But is that really problem solving? In the context that it’s usually applied, there’s no question about “how” the problem should be solved. You just spent classroom time on the unit. And, for the most part, the solutions that are submitted are much the same.
But what about the big project where the student evaluates everything – the tools, the interface, the data, the logic, and comes up with a unique solution that solves the problem?
I think that it speaks volumes to the concept of the major project given towards the end of the course. But should there be more of this sort of thing?
It’s also a chasing your tail concept too. Students can’t write the program until they understand the constructs of the language.
If nothing else, it does give you pause to think.