What Does It Take to Make Change in CS Education?

This started out as a comment on Mark Guzdial’s blog post What changes CS Education? which you of course must read. No really. I’ll even wait. Back? OK a key summary jumped out at me:

My first pass analysis suggests that, to make change in CS, invent a language or tool at a well-known institution.  Textbooks or curricula rarely make change, and it’s really hard to get attention when you’re not at a “name” institution.

I tend to agree that to effect change in CS education you have to have a tool or language from a name institution. Would BASIC exist today if it hadn't been invented at Dartmouth? Probably not. But even that pedigree hasn't been enough to keep it going as a main stream first CS language. Why? That I’m not sure since I firmly believe that Visual Basic .NET is as good an object oriented programming language out there (better than C++ or Java – again my opinion) and much better as a teaching language (again an opinion I am aware many do not share – but what do they know? :-) ) There is probably some industry influence though.

What I have observed, or think I have observed, is that many ideas come first in industry and win over academics before or at best in parallel with industry. I go way back to structured programming which was the up and coming paradigm when I was an undergraduate. It seems to have started in industry because existing code at the time was a mess to debug and maintain. There was some resistance to it in industry in some circles because it required some re-learning. Educational institutions seemed to welcome it quickly. I saw it very quickly come to dominate the curriculum at the university I was attending. As students graduated they brought this paradigm into industry and it took over every where. So I saw what seemed as a circular path where an idea started on one side, moved to another and then won in both sides.

When PASCAL came out I had been working in industry for a while. A number of new hires had come to work in my development group and had been well trained in PASCAL. It soon became a dominate language in our team. IN this case PASCAL started in education and because it was good, or perceived as good, industry started adopting it and that drove more acceptance in academia.

With C++ we saw a reverting to what I saw in structured programming. IN spite of being developed at the influential Bell Labs C++ and object oriented programming was slow to be adopted in industry. While many people loved the idea they were not ready for a new paradigm. A lot of C++ programming was C programming using a C++ compiler. That is until academics saw the real potential and started teaching it for real. Now you’d think academia was following industry when that is not quite the case.

SO what if you want to make a change now? Tools are critical. Alice came from Carnegie Mellon and was an early entry into that particular model of development. Scratch is from MIT and has come along later. Scratch is rapidly growing but would it be doing so if it were not from MIT? Frankly I doubt it. Not that it isn’t any good – to the contrary I love it. But rather because many educators would not look beyond the differences between Scratch and Alice if the name MIT were not attached. I wonder if we are missing good, perhaps even great, tools because they are not from name institutions? Could be.

How about industry in all this? Well some parts of industry are name institutions. Bell Labs certainly was in its day. Microsoft Research is an interesting hybrid of a semi-academic institution that is part of a for profit company. Kodu is certainly getting a good look these days. While the graphics are amazing and the tool looks like it has huge potential coming from Microsoft Research clearly gets people to look at it. But clearly it is harder for a commercial development to make it into academia that it is for a tool/language developed at an academic institution in general.

Java did some from industry but in many ways it was the right tool at the right time. C++ while being very powerful tends to still be somewhat dangerous with memory management being only the most obvious pitfall. Garbage collection, while not a new idea, when joined with object oriented programming was a natural adoption for academia. C# and VB have the same attributes but there is inertia – what is the added value in changing languages away from Java? Probably more of an advantage for professional programmers than for student programmers. (Though I will continue to say that I think VB is a great first language be cause I have been a fan of BASIC for over 35 years.)

So what is the next educational change? I think it is probably the sort of programming that Alice, Scratch and Kodu provide. Make it visual and pretty. Remove the syntax issues from the equation. I think there are some limitations in these tools that make a transition to a more traditional language a requirement sooner rather than later. Variables are one big issue I see for example. So is programming solutions beyond those limited domains. Despite the popularity of Java I don’t see that as the logical next (or first real language depending on your view) because it is just too complicated a next step. More likely is a dynamic language like Python or perhaps a very simple language like Small Basic. Small Basic has a disadvantage of not coming from a name institution (it’s from Microsoft but not from Microsoft Research – people make a distinction) though as well as being a late comer. Python has more fans and already much more support material.

I could be wrong. The Alice team is spending a lot of time and effort making the move from Alice to Java easier. And CMU is still a big name institution. What I’d really like to see is a tool that takes the Alice/Scratch/Squeak paradigm of programming and expands it to allow for programming more solutions in more domains. Add data base support for example. make it easier and faster to create and use variables. Better parameter support. Break through the walled gardens. Let people create web applications, cell phone applications, and support more means of IO. Make it less necessary to move to more conventional languages as soon as currently Where would that take us?