Computer Science Teacher
Computer Science Teacher - Thoughts and Information from Alfred Thompson

September, 2009

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    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?

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Hardware Matters


    A big focus of my time these days is on introduction to computer science courses. What might be called CS0 at the university level. basic courses to provide a foundation for later learning. Perhaps these courses will create or drive interest in additional courses. One of the topics that comes up in these courses is always hardware. Is it really needed? After all kids grow up with computers don’t they? They know how they work right? Well I’m not so sure they do. Of course people often point to Dijkstra saying "Computer Science is no more about computers than astronomy is about telescopes."

    To some degree Dijkstra was right. But you know I think astronomy is somewhat about telescopes. Computer science is somewhat about hardware (computers). I’m no expert on astronomy but I’ve owned a telescope or two in my time and I’ve looked at the stars. Understanding a little about how telescopes work is quite helpful in understanding how to use them and what you are seeing through them. So too understanding how computer hardware works provides some understanding into how computing works. Especially as to its practical (compared to theoretical) limits.

    So I think it is useful for beginners to understand the parts of a computer, especially conceptually, before they get too deep into CS. Registers, accumulators, different types/levels of memory or storage, how binary arithmetic works, and much more. I also think it is useful to explore the various ways of getting information into and out of computers. And how information is stored as well. Can you understand why 0.1 added ten times is not 1.0 if you don’t understand how computers store floating point numbers in binary?

    I think we do students a disservice if we skip too lightly over the computer itself. That information is valuable. Of course we should also encourage them to think about alternative ways that computers could work. After all it is harder to break rules through limits if you don’t know what they are.

    Now that I have decided that hardware is important I have to figure out what the key must know pieces are. Suggestions?

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Documentation – It Really Does Have Value


    I installed some software this morning. Every indication is that it is just what I am looking for for a project I have in mind. It is touted as easy to use. There is source code available even. Supposedly there is documentation as well. But I can’t find the documentation. Now could I figure it out? Probably. I’ve been around code a long time and I can read the source code. I could probably duplicate this package from scratch if I really had to. But the thing is that I am trying to save time. The project is not a high priority but if I could put it together in an hour or two now would be an OK time to do it. Clearly though without documentation it will take longer than that. So I have moved on to other more important things like updating my blog. :-)

    One of the things I have said for years as a professional developer and as a teacher is that “reading the directions is the short cut.” The older more experienced I get the more I believe that to be true. There are a couple of problems though. One is that too often documentation is non-existent or poorly written. Another is that even when documentation does exist people don’t want to read it. The latter is common with students and other beginners.

    Why don’t they want to read documentation? Several reasons. Some people are lazy and just want someone else to verbally explain things. All too common in the classroom but you see it other places as well. How often have you opened a new game with a group and everyone wants someone else to read the directions and explain it to the group? One flaw here is that the further away one gets from actually reading and understanding for themselves the less they truly understand. And of course the “oh yeah I forgot to tell you about that” gotcha can make playing the game later interesting in unpleasant ways.

    Other people try to save time by just starting in with what ever obvious, or apparently obvious, knowledge they get from looking at things other than the documentation. They’ll “figure it out.” Experience tells me that this is seldom a short cut and generally adds lots of time to the process. One may learn lots of things in greater detail but at that same time they’ll also learn a lot that is just plain wrong, inefficient, or miss things that will come back to cause problems later.

    It’s hard to convince students of the value of documenting their own student projects because these projects tend to be simple and quite obvious. I wonder though if giving them a complex set of code and asking them to document it from scratch might be useful. One could grade them on how easy their peers found using the software after reading the student generated documentation. This is probably not trivial to set up but might be worth it. It is the sort of thing that influenced me a great deal.

    When I was in university my professor handed me a deck of punch cards (I’m old experienced) that had no documentation and almost no comments inside and asked me to comment and document it. Talk about a life lesson! It forever convinced me of the value both of comments in code and documentation for software. The world would be a better place if more students learned that lesson. How do we teach them though?

Page 1 of 6 (17 items) 12345»