I had dinner tonight with several computer science professors. The topic of conversation turned to the question of “can everyone learn to program?” One professor is pretty sure the answer is no. He believes that some people just can’t think that way. I fear that he may be right. But we moved on to how can we make it so that more people CAN learn it? Even if we can’t teach it to everyone how to we get more people to understand programming or more broadly computer science concepts. We decided that one problem at least is that it is hard to visualize some concepts.
Recursion for one is hard to some people to picture. I know it took me quite a while. To this day my mental picture of it is cloudy but at least usable. Many concepts that computer scientists picture in their heads almost as if second nature are opaque to other people. The tools we have to create images that will help others picture these concepts too often seem inadequate. They are too hard to use or too limited in scope. After all most of the concepts we want to teach are not static. Images that don’t move do little justice to the concepts.
Honestly I wouldn’t know where to begin with an animated image of recursion. My own image is too cloudy. I suspect that others have a much better image but converting that to a useful tool is non trivial.
Other concepts lend themselves to visualization more easily. Linked lists, trees, stacks, and arrays for example. We can sort of do them using tools like PowerPoint but it sure does take a lot of work. We can draw them on the board. But as anyone who has demonstrated something like adding and removing nodes in a linked list can tell you this can get messy very quickly. I’ve always wanted to try using pieces of something (paper?) and strings (you know the fiber ones) to show links and lists but the logistics of that takes someone more handy than I tend to me.
Sometimes there are physical objects we can use. I can’t be the only one who bought a giant Pez dispenser to demonstrate stacks right? Or labeled boxes all in a row for arrays. Ideally though what I would love was something that students could actually manipulate themselves to see things work. Something they could ask themselves “I wonder what happens if I do this?” and then try it out.
We have more and more new tools for programming and implementing things. Where are the tools that help beginners picture how it works though? Are there things out there I am missing? What do you use to help students visualize the concepts?