Making computation concrete and easier to learn
I’ve mentioned before how much I enjoy the Computing At Schools online forum. I got involved in a discussion about how to teach teachers programming, and the question was raised: Why do we have to teach programming? Shouldn’t we just teach concepts? Neil Brown (in a blog post that I highly recommend reading) suggested, “We teach programming to make it concrete.” One of the commenters suggested that memory is very concrete. I disagreed, and am sharing here my response (for those who don’t yet belong to CAS), with editing and expansion:
Concreteness and abstraction in computing are difficult to define because, really, nothing in computing is concrete, in the Piagetian sense. Piaget talked about concreteness in terms of sensory input. I’ve heard before that “memory is concrete — it’s really there.” Can you see it? Can you touch it? Sure, you can “see” it in a debugger — but that’s seeing through a program. Maybe that memory is “made up” like any video game or movie special effect. It’s no more “real” than Yoda or Mario. We can sense the output of computation, which can then be Piagetian-concrete, but not the computation itself.
Uri Wilensky (who was a student of Seymour Papert) has a wonderful paper on concreteness. He redefines concreteness as being a quality of relationship. “The richer the set of representations of the object, the more ways we have of interacting with it, the more concrete it is for us.” Uri gives us a new way of measuring abstract-concrete in terms of a continuum.
- Memory is really pretty abstract for the novice. How many ways can a newcomer to computing view it, manipulate it? It might be really concrete if you know C, because you can manipulate memory in many ways in C. You can construct a relationship with it (to use Uri’s term). From Scratch or Python or Java, memory is totally abstract for the novice. There’s no way to directly manipulate it
- We did Media Computation because images and sounds are concrete. We get sensory input from them. So, computation to manipulate images and sounds gives us concrete ways to explore computation. We can’t see the computation, but as we change the computation and get a different sensory output, we can develop a relationship with computing.
- Threads are hopeless abstract. You have to be pretty expert, and know how to think about and manipulate processes-as-a-thing before threads can become concrete.