TITLE: Day 1 at SIGCSE AUTHOR: Eugene Wallingford DATE: February 24, 2005 3:08 PM DESC: The first morning of SIGCSE brought me two fun quotes, a good idea, and a report on a new set of Java libraries for teaching. ----- BODY: After a busy week or two at home, I am now on the road at SIGCSE'05, the primary conference on computer science education. On Saturday evening, I am co-leading with Joe Bergin The Polymorphism Challenge, a workshop in which participants will learn more about dynamic polymorphism by taking it extremes on some common problems. But for the next few days I get to attend sessions and catch up with colleagues, in hopes of learning a few new tricks myself. This morning, I attended two sessions. The first was keynote address by Kim Bruce, this year's recipient of SIGCSE's award for outstanding contributions to CS education. Kim has been involved in a number of CS education projects, and his keynote talk showed how his most recent project makes it possible to teach introductory computing topics such as assignment and recursion in a fundamentally different way. His main point: We should use abstraction to make complex ideas more concrete. Alan Kay said something similar in his OOPSLA talks last fall. As a medium, computer programs give us new ways to make complex ideas concrete and manipulable, ways that before were impractical or even impossible. We computer science teachers need to seek more effective ways to use our own discipline's power to bridge the gap between complex ideas and the learner's mind. In any event, Kim used two quotes about abstraction that I liked a lot. The first, I knew:
Fools ignore complexity; pragmatists suffer it; experts avoid it; geniuses remove it. ... Simplicity does not precede complexity, but follows it.

-- Alan Perlis

The second was new but is surely well known to many of you:
A good teacher knows the right lies to tell.
Using abstractions requires telling a certain kind of lie -- and also creates the subproblem of figuring out how and when to tell the fuller truth. The second was a report of the ACM Education Board Java Task Force, which is designing a set of packages for the express purpose of using Java in CS 1. In a sense, these packages are yet another way to abstract away the complexities and idiosyncracies of Java so that beginning students can see the essential truths of computing. There isn't much new in this work, and we can all quibble with some of the group's decisions, but the resulting product could be useful in unifying the software base used by different institutions to teach introductory CS -- if folks choose to use it. I have to admit, though, that several times during the presentation I thought to myself, "Well, of course. That's what we've been saying for years!" And once I even found myself saying, "That's just wrong." I'm sometimes surprised by how little effect mainstream and academic OOP have had on the CS education community. (Perhaps it's ironic that I'm writing this while listening in on a session about the importance of the history of computing for teaching computer science.) -----