Some Media Computation Teaching Resources

August 19, 2011 at 8:46 am 13 comments

Some too-long-delayed to-do items from the last few weeks:

A complete set of the Media Computation Data Structure book slides is now available at  Each individual chapter is there, along with a ZIP (15Mb) of all of them, all in PPT. I revised all of these when I taught with the book this last Spring, but then I updated them (based on my experience teaching with them in the Spring) this Summer.

I have now uploaded all the “video quizzes” from the data structures class I taught this last Spring, with links to the relevant videos for each, to  (If you want access and don’t know the key phrase, please drop me an email.)  Most of the questions in the PDF’s of each video quiz include my answers or a model answer.  Not all of these answers were correct (sorry!), and I annotated where I know I made mistakes.  These can serve as examples to others who might be interested in trying this.

Entry filed under: Uncategorized. Tags: .

Stanford on-line AI course draws 58,000 — but is it real? Rising grades in UK A-Levels, but not so much computing

13 Comments Add your own

  • 1. Alan Kay  |  August 19, 2011 at 9:25 am

    Hi Mark

    (After taking a peek at Chapter 14 on simulations)

    I know you know what comes next …

    First, I think the examples and the sequence of them is very good.

    Second, this is one of many many arguments why Java is a very poor choice here. These are all much simpler than they appear in Java. And just as bad, there is nothing in the barnacles that Java presents that has any merit whatsoever — they don’t add beauty, and and they are not needed for functionality.

    Third, they should all be programmed from scratch by the students. And could be if a better language and environment (such as you have used in the past was employed).

    Fourth, in a better language and environment these examples (with a few more before them) would be a direct lead in to objects and could be done right in the beginning (as e.g. they are for 5th graders and Etoys).

    Fifth, why wouldn’t the Greenfoot people start with a clean preprocessor for Java that hides what is unnecessary and recognizes that the form of a programming language is as much a user interface issue (especially for beginners) as the rest of the choices made. This illustrates the profound misunderstandings of personal computing by a much too large segment of computer people today.


    This leads to an idea about “reverse filtering”. The students who feel this is somehow “gunky” and decide to drop out of the class (or out of CS itself) are the very ones you want to have continue. They are the only ones that have enough critical processes to deal with and improve our illformed field.

    • 2. Mark Guzdial  |  August 19, 2011 at 9:45 am

      Hi Alan,

      I suspect that we both could go on at length about the problems in the current state of affairs. The issue of “reverse filtering” is interesting, but is unlikely to be happening in this instance, because CS majors don’t take this class (unless they did badly in the first class, and then they take this as a half-step to the traditional Java course). Our CS majors see no simulations at all. Simulations are not a required part of any computer science program with which I’m familiar. This class is my attempt to get some of this critically important material into the curriculum somewhere, especially for future scientists and engineers. I make a Faustian deal to use Java, because all we teach are C-like languages now.

      This was much easier to teach in Squeak, but then, students didn’t value the language. What students want today in computer science classes is a pass into the community of practice of well-paid programmers. They want to do what they see the majority of computing professionals doing, which is program in C-based languages.


    • 3. Michael Kölling  |  August 19, 2011 at 10:52 am

      > Fifth, why wouldn’t the Greenfoot people start with a clean
      > preprocessor for Java that hides what is unnecessary and
      > recognizes that the form of a programming language is as
      > much a user interface issue (especially for beginners) as the
      > rest of the choices made. This illustrates the profound
      > misunderstandings of personal computing by a much too large
      > segment of computer people today.

      As one of the Greenfoot people, I can answer that.

      This is, in fact, not a misunderstanding. I am very well aware of the importance of the language as a user interface element, and we have had many discussions about this in our group for many years. The reason we use Java in Greenfoot are much more pragmatic.

      Mostly, it is workload. Greenfoot started as a two-person project. We simply did not have the capacity to reinvent everything. To have a realistic chance at getting anywhere, we had to reuse. And we had parts of an interactive system for Java available, and so we concentrated design on the environment and treated the language as a given constraint. I still believe that this was the right decision pragmatically (even though it’s a dirty compromise from an educational design PoV) – I don’t believe we would have gotten anywhere otherwise.

      The second benefit is familiarity for users. We’re trying to take our users (that is: the teachers) with us. Many institutions do teach Java, and want to teach Java (admittedly often not for very good reasons, but fact is that they do). We can get more people to adopt this approach by offering a migration path to and from Java. I would speculate that this is one strong factor in the fact that so many more people today are using Greenfoot than Etoys.

      We have by no means given up on the language side. We are working internally on versions of Greenfoot with a more sensible language. I am the first person who would love to see this. If this is successful, we’ll release it. This will then be an even more attractive entry for programming AND it will provide a path out at the top into Java for those who feel the need to see a “professional” language.

      I very much agree with your view of the importance of language, and we will get there. We just need a little time. We are still only a small handful of people.

      (And, by the way: These examples, with a few others before them, ARE being done right at the beginning as a direct entry to objects, with many tens of thousands of kids, from about 14 years upwards, very successfully. While I agree with your assessment of Java, this seems to work very well despite Java.)



      • 4. Alan Kay  |  August 19, 2011 at 11:14 am

        Hi Michael

        I very much sympathize with much of your reply.

        I don’t sympathize with a “dirty compromise from an educational design PoV” for something that is made as an introduction and for education, and is being used for education.

        Better not to do it (really).

        For example, I would absolutely not use Etoys for HS or College kids (it was aimed very pointedly at 5th graders). I would sit down and try to understand what the actual end-users *need* and make a system that would provide the best possible services to the learners.

        I only mentioned Etoys because it is easy to make all the Week 14 examples in this system for 10 year olds. I still would not use it because it really doesn’t have the stepping stones and “gestures” at the kinds of thinking that the older kids should be doing.

        To me this is one of the main points. Programming etc is not just for making a computer do something, it is also an intro into ways of “process thinking and design”, and so the PoV of the language and system is top priority for beginners.

        This is what is being missed and being done so poorly — despite being one of the main points put forth by the main people in the 60s (such as Al Perlis and Marvin Minsky). When we are doing something that is as important as education (and labeling it as such) we have to pay deep attention to the epistemological stances we will be instilling in the learners — it’s not just knowledge but shaping points of view that is going on here and this is why this has to be done very carefully and selfconsciously.

        And we shouldn’t take who is using what too seriously as an indicator of goodness or badness. People have lots of reasons for learning — like wanting a job — and one of the human universals is coping. But we want and need *progress* not coping!

        On the technical side, check out Alex Warth’s OMeta, which is easily self implementable in Java (it is currently in many languages) and this would make it a snap to translate a better formed language into Java or Javabyte codes etc. (And also to deal with the retranslation of deep error messages into end-user sensible form, etc.)

        • 5. Mark Guzdial  |  August 19, 2011 at 2:45 pm

          Alan, do you think that we know how to “sit down and try to understand what the actual end-users *need* and make a system that would provide the best possible services to the learners”? Do we have a strong enough theoretical and empirical base of how students (at any age, fifth graders to adult) understand and interact with computing such that we can do design from our armchair? I suspect that we need a lot more experiments, more trying things out, and more observing and measuring what happens.

          Greenfoot is a great experiment in explaining simulation (as I claimed earlier, a critically important subject) to students in a curriculum that has ignoring simulation. By embedding Java in Greenfoot, they create what Seymour called “a trojan mouse.” They get simulations in the curriculum as a motivation for learning Java, and can then start pushing on the ideas of simulations and real objects.

          I see Michael and company’s use of BlueJ explicitly following this path of disseminating their environments as data gathering experiments. Back in 2006, they held a meeting with CS Ed researchers to define a log file format for BlueJ. Matt Jadud’s dissertation used that to develop some of the best studies I’ve seen on what specific problems students have with Java and with programming more generally. Matt just presented at ICER 2011 the work of an MS student in the Phillipines who replicated his dissertation work, and extended it. Matt is now talking about collecting and analyzing BlueJ data at “cloud scales” — millions of data points. I see BlueJ as a terrific experiment that is gathering detailed empirical data about what’s working and *not* in introductory Java classes.

          I disagree that Greenfoot shouldn’t have happened. It’s a probe, an experiment, an opportunity to gather data and make a case for change. Java is well-entrenched today, at all levels of the computing ecology. Change requires force, and experiments like BlueJ and Greenfoot help with developing that force. More importantly (from my perspective), they give us the opportunity for learning more about student use of computing.

          The harder problem that I see Michael facing (even harder than changing CS education from its Java-dependence) is that he’s having to do this all with only two people. Where do we get the funding to do all the stuff that ought to happen? We should be investing in learning more about CS education and building tools. And who’s going to do the work? Here in the US, we have a front-runner presidential candidate who seriously believes that faculty are not nearly productive enough, while all the serious empirical data suggest that they are dramatically overworked. Where are we going to get tools like Greenfoot or the even better tools that Alan wants to see? Private industry, because everyone knows there are enormous profit margins in educational software?


          • 6. Alan Kay  |  August 19, 2011 at 3:36 pm

            Let’s try to figure out what we are arguing about here.

            Here’s another statement from Michael’s comment:
            “We are working internally on versions of Greenfoot with a more sensible language. I am the first person who would love to see this.”

            I read this as a realization on their part that there is a more sensible language possible for their purposes, and also that they realize that Java is “less sensible” than even dim alternatives that might be imagined.

            But they wanted to do something anyway and just went ahead and did it, even with those realizations.

            When a kid was asked “Why did you throw a rock through that window?”, the reply as “Because I could”. I think making things just because you can is a kind of “Inverse Vandalism” — and computing is full of it. The last 25 years especially have seen an enormous proliferation of such efforts — and many of them have become popular — and this contributes to what people think is “normal and proper” and gradually sets the bar lower and lower.

            To go to your first paragraph — and relate this to Michael’s comment above — yes, I think we can do much better in defining what people need *and* we have to do lots of experiments along the way.

            However, I want to emphasize the real sympathy I expressed in my comment. It’s good that they wanted to do this. But I just believe very strongly in thresholds, not just increments. There are many projects I’ve wanted to do and many of them never got done because I couldn’t find the resources — some of them got done years later when some resources turned up.

            But lack of resources to do something as well as it can be done is not a good reason to do something less well than it can be done. I realize that this is a very difficult point and argument for many in our field.

            Best wishes,


            • 7. Mark Guzdial  |  August 19, 2011 at 4:22 pm

              I think I understand your argument. You’re saying that we know how to do better than Greenfoot, so it’s better to do that than to do Greenfoot. The argument that Greenfoot is in Java to get it accepted and to decrease costs doesn’t work for you, because that kind of approach just leads to an incremental step over what we have (which isn’t very good). Rather, we should do the best possible simulation system (as an example, if that’s what we want to build) and not worry about making it compatible with existing educational systems — getting it used is less important than making progress toward better.

              If I get that right, I see your point. I see that we in CS do too little exploration of what has already been built and achieved in the past. I worry about how to move from where we are now. Getting things in use in order to change the status quo is an important goal, too, though a different one than making progress on what we know how to do.


        • 8. Michael Kölling  |  August 19, 2011 at 5:35 pm


          While I agree very much with your views about the importance of the design decisions of the language, I don’t agree with the view you present here about the process of getting there.

          Describing a system we know not to be perfect as “Inverse Vandalism” is a view somewhat simplistic in its idealism.

          Yes, I would ideally like to build the “perfect system”. But I have to work towards it. Having stepping stones on the way, something that may not be perfect but gets us part of the way, is a necessary step.

          Because, apart from the intellectual exercise of designing beautiful systems, I also want to make a change in the world. I want kids to experience the beauty of computing. And I know that, if I sit in my little room and disregard all the pragmatics, I can write nice, pure, intellectually argued calls to arms and academic papers, but I can never achieve the change I want to make to kids’ lives.

          I disagree with your assertion that we are somehow doing harm to kids by making them use a “non-optimal” language. I have seen hundreds of kids, with my own eyes, get excited, shriek with joy, and love the experience of using this senseless language in Greenfoot. And I very much agree that we should not aim at just showing them to use a computer. But I am very much convinced that – for a good number of them – there was something deeper going on there. Kids are actually much more robust in processing and using sub-optimal tools than you give them credit for.

          While Greenfoot does not use the best language, it has brought computer science as a discipline much closer to many kids. It has generated the joy of creation in the eyes of many.

          We are continuously working on improving it. But we do not aim at solving all problems at once.

          The perfect is the enemy of the good.


          • 9. Alan Kay  |  August 19, 2011 at 8:05 pm

            Hi Michael

            The perfect is indeed the enemy of the good. And I’m not arguing for perfect, but for “good”.

            And I’m not arguing for sitting in a little room doing nothing.

            And I most certainly admire that you want to change the world for the better — and I also have more hesitation than you might think about making remarks that might hurt feelings.

            I don’t doubt that kids get a kick out of being a cause of effects on a computer or out in the world. A large part of the work of Seymour Papert and those he influenced (like me) has tried to tie into the joy that children feel when they are a prime mover. The work I did in helping to create personal computing was very much aimed at including children as main users and wielders of the processes and powers.

            One of the things we realized early on after our first few hundreds of children was that the joy of power is not linked to deep perspectives about it. In fact, the first kind of language they learn tends strongly to be thought of as “computing” rather than as “one of many ways to make computing happen”. This effect has been noticed strongly many times over the 45 plus years since then, and not just in young children but also in high school and college age kids as well.

            There was already a phrase in the 60s “You can write Fortran in any language” to characterize the early strong binding to first encounters with ideas.

            I am well aware about kids being adept at getting fluent in suboptimal tools and ideas. They do this all the time. Adulthood is filled with such adeptness! I want them to get adept at the best ideas we have, not those below threshold.

            This is why being innocent about making “something that people can use” is not a neutral act, and IMO should not be done lightly.

            What I’ve been arguing for is to not do things that are less than what is already understood to be needed — not for any reason. This is not the “Don’t reinvent the wheel” admonition of the past, but the more telling “Please please don’t reinvent the flat tire!” of the present.

            I’m not calling for the invention of even better ideas than we have right now, but just to use the best ones we do have.

            Sincerely best wishes,


  • 10. Alan Kay  |  August 19, 2011 at 10:28 am

    I agree with your assessment about what many if not most students want. And I don’t have any quarrel with it. They want to learn a trade, and I think things would be simpler and better for everyone if they went to a trade school to do it — or if Gatech would set up a “trade/craft track for contemporary programming”.

    (As I keep going on about) I think it is a disaster for universities to turn themselves into trade schools — and it is a disaster on a minor scale (but affecting what we do a lot) to have a supposed computer science department turn itself into a trade school.

    The problem with the current approach is that it starts to equate “normal” with “OK” and this misses the vital critical part of real education, and loses places to start to improve things.

    Trade schools can be very high quality and prestigious. For example, in the 50s I went to Brooklyn Technical High School, which was set up in the 30s as “a special place to learn engineering and technique”. It used the same very tough test for admission as used by Bronx High School of Science and Stuyvesant. It crammed 6 years of work into 4 and one graduated with both a HS and a two year AA degree, ready to do many things in the practical world of invention and industry. It had 10 tracks of which just one was “college prep”. The only difference was that this track also required 3 years of of a foreign language to be squeezed into the wall to wall curriculum.

    However, all the critical parts of this regimen were pretty much limited to critiquing “execution of technique”. There was no “are turret lathes a good way to do X?”, but a lot of “you must achieve the tolerance goals on this kind of lathe”.

    50 years ago the programming training in the Air Force (via IBM) was of just this sort, and it was very familiar to me. When I finally went to an ARPA-IPTO grad school a few years later, everything was different. It was all about getting enough perspective to be highly critical and then to turn the criticisms into much better ways to do things.

    This is what is being lost today — if not lost already.

  • 11. Alan Kay  |  August 19, 2011 at 5:11 pm

    For 7. Mark Guzdial | August 19, 2011 at 4:22 pm

    Hi Mark,

    Yes that is part of the gist of the argument.

    The other part is trickier.

    Yes, I really dislike Java, but to me the real point of any programming language — worse or better than Java — is that it is “a machine code for a new system, including a new language”.

    I dislike Squeak also, and Etoys, etc., maybe not to the extent that I regard Java, but this is not the point.

    What I’ve been urging for a long time is for people not to get snared in the language at hand, but to include the idea of making much more suitable languages for their genre of problems, and to occasionally advance general purpose languages as well.

    The critical idea here is that an existing language system can provide the initial substrate for making something more suitable. Java has a lot of stuff in its back rooms and this can be used to get similar performance for new languages on top of the old engines.

    This is another big place where current day “CS” has been missing the boat mightily. And it is part of the much larger amount of design thinking we need to put into software systems.

    A slogan could be: “Bring the right tools to the Turing Tarpit and you can convert all that crude sticky stuff into great power!” The dinosaurs got caught in the tarpit, but we power our civilization with it. (CS people look a lot like dinosaurs to me …)

    So to me, especially with this issue, Java is not front and center. First no one should have to look at it or deal with it to learn what’s important about computing. But having it as an underpinning has some benefits. At some point “popping the hood” of the system for beginners and seeing the next lower level (could be Java, Lisp, Javascript, Squeak, etc., or even simple RISC machine code) can be helpful in the learning process.

    If the aim is “to get to Java”, then a tamer Java-like syntax can be implemented to be much more readable so the real issues of programming can be concentrated on first. I definitely agree that the simulation style of programming is a great one to get to early.

    Given that this “cover up the old with something nicer” part is *really easy* …. This means (to me) that there is not a lot of excuse for not doing it. In the end this is supposed to be for the learners first and foremost, not for the convenience of computer people.

    Best wishes,


  • […] education is feeling the tension between the cognitive and the situative today.  I see it in the discussion about Greenfoot. We CS educators talk about our foundational concepts, and we talk about learning the tools of our […]

  • 13. Why we ought to teach Java | MegaSoul  |  August 23, 2011 at 11:21 am

    […] education is feeling the tension between the cognitive and the situative today.  I see it in the discussion about Greenfoot. We CS educators talk about our foundational concepts, and we talk about learning the tools of our […]


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,184 other followers


Recent Posts

Blog Stats

  • 2,039,343 hits
August 2011

CS Teaching Tips

%d bloggers like this: