Sunday, August 5, 2007

A new teaching tool for CS

I have been teaching full-time for five and a half years. Before that, part time for a couple of years. I love interacting with students and inspiring them to learn more than they expected. It's been a wonderful experience and I wish to continue it.

My area of interest, as you can imagine, is in education. Specifically, how to inspire a new generation of students who have grown up using iPods, playing 3D video games, and chatting on the Internet. It's a different world than when I was going through the MS program.

I am interested in new pedagogical approaches to CS education, specifically in the area of programming. Introducing new students to programming, especially ones raised on a diet of the above-mentioned technologies. Today's introductory programming classes need to be interactive, graphical, and support a wide variety of teaching and learning preferences.

I've been attending the annual SIGCSE conference regularly for five years. I've heard from countless professors that today's CS1 and CS2 courses lack a compelling, rigorous programming environment for teaching and learning. BlueJ, Alice, DrScheme, and others are all good, solid attempts to bring modern IDEs and pedagogically-appropriate languages to beginning students. But they aren't enough. They all have their strengths and weaknesses. I have taught CS0 and CS1 courses with several of the teaching tools and have come to form my own opinion about what a good teaching tool should be.

I believe that what students need is a language and IDE that grows with them. Beginning students -- even those in primary and secondary schools -- can use a drag-and-drop interface similar to Alice. As they advance, the IDE can change to support more typing with less dragging with corresponding advances in program design flexibility. At its most advanced level, seasoned professional programmers could use the IDE to write production-quality programs.

It's an ambitious project, for sure. I intend to start simple and reuse existing technologies: XML, XSLT, CSS, virtual machines, and the like. In fact, the programming language specification is nothing more than an XML DTD file. The IDE is just an engine that interprets and builds correct XML files. The compiler is an XSLT engine that interprets an XML file and targets... well, anything. For starters, it would target an existing virtual machine, such as the JVM or Parrot.

In short, my idea is influenced by a well-known acronym: MVC (model-view-controller). While the MVC design architecture has been around for decades, it has not, to my knowledge, been applied to a programming language.

Model: an XML file with DTD specifying the "grammar."

View: an interchangeable view of the XML file. It could be graphical (like Alice), textual, 3D, flow charts, whatever. The view can also accommodate different user interface languages: English, Japanese, etc.

Controller: the user interface. Like the view, it is interchangeable. Users could choose a drag-and-drop interface, a more traditional text interface, or a hybrid of the two. Or even something completely new, yet-to-be-invented (but simmering in the back of my mind).

Once the prototype has been built, I imagine it would need to be tested in the classroom. A curriculum using this new language/IDE would be designed and tested against existing pedagogical approaches: BlueJ, DrScheme, Alice, Karel, etc. Quantifiable measurements would be test scores and how well the students performed in subsequent classes that used traditional programming languages.

No comments: