Monday, December 4, 2006

Problems with Programming (Big-Picture)

Teaching programming should be teaching teaching.
But it's not.

Programming currently requires much more skill than just communicating information logically. It requires:
  • translating ideas from concepts and formulations natural to humans to those natural to the machine. [The machine makes very little attempt to work with ideas the way humans do.]
  • communicating these unnatural concepts in an unfamiliar and cryptic code.
  • knowing lots of details about how things are done internally. [Programming has slowly been getting better on this count.]
At best, current programming environments provide means to navigate the code and show its operation line-by-line.

Worse, the idea of programming today limits the realm of logical manipulation to just what can be expressed as following a sequence of instructions. There is no concept of a concept, only what to do with it on a low level. What if we could logically manipulate
  • mathematical expressions - showing each step in a derivation for a textbook, for once!
  • laws - allowing politicians and normal citizens to explore what the effect of a law is in a certain situation
  • sciences - finally teaching a computer physics or chemistry, not just how to run the numbers behind it
  • language - besides the obvious application to translation, a computer being remotely able to manipulate language is a great help to language learners
  • techniques of engineering or other fields - say that someone has taught the computer the technique of least squares (in general); when I am trying to solve a problem that requires some sort of approximation, it offers the least squares technique to me, complete with how to actually do it and the conditions and assumptions I have to make
  • documents - beyond grammar checking to does this even make sense (and of course much better grammar checking also, with some help from rational annotation, which I'll get into later -- bug me if I don't)
That's just the beginning of the list. I'd venture to say that the kind of thing that will approach general instruction/teaching of a computer would not be called "programming", though for me the development starts there. I welcome suggestions for better names.

Next: Communication and Clarification.

~Ken

No comments: