Sometimes I am not quite sure whether a statement is obvious or not obvious at all. In such cases I try to take the view that if it was that obvious, I wouldn’t need to comment at all. Take the statement “Coding is not debugging”. Of course it isn’t. But to read what some people have written you could be forgiven for thinking that an ability to write good code automatically confers the ability to be good at debugging. Well, like the old Porgy and Bess song has it, it ain’t necessarily so.
I don’t intend to look into the reasons why one doesn’t guarantee the other, but to set out what I believe is irrefutable proof, albeit in a common sense way.
Why programming skills don’t imply debugging skills
If an ability to write (code, poetry, fiction, whatever) meant being able to ‘debug’ then authors wouldn’t need copy editors or proofreaders. A wonderful book I am reading at the moment, called
would not have needed to be written. It’s full of dreadful mistakes that would-be published authors make in their writing. Interestingly, I came across an article a few days ago in which the author said something like:
“This technology has developed through various backgrounds to become the ubiquitous offering it enjoys today.”
Eh? I think I can just about work out what he or she was attempting to say, but it would have been much better had they gave given it to someone else to proofread before publishing it.
Why debugging skills don’t imply programming skills
I can use a similar analogy. If being able to point out what’s wrong with a piece of work implied that you could have written that work or something similar, then by the same token film critics ought to be able to make a Hollywood blockbuster and book reviewers should be able to pen something that will soar to the top of the bestseller lists. I know a lot of critics and reviewers give the impression that they think they can, but we only have their (implied) word for it!
Again, I apologise if this is all obvious, but I think I’ll say it anyway. Pupils have to be taught how to write code, and also be taught how to debug code. They have to be given opportunities to do both, and be presented with problem-solving scenarios for both, and given opportunities to debug code written by others, not just their own.