I really have to say, version control can be a wonderful thing in the classroom context.

I’m 1/3rd of the way through marking my student’s homeworks. However, I didn’t struggle with some handin system, or having them send me email, or anything like that.

You see, every student has a repository.

They do their work, commit it into their repository, and when they’re done, they just walk away (after their final commit). This means that their HW is backed up from their laptop, and it is sitting safely on a remote server.

It also means that I can check out their repository. So, before I did the grading, I did an ‘update’ on each of their repositories, so I got the most recent version of their code. To make comments in their files, I used block comments:

#| 20070909 MCJ
... some comment here
|#

and then created a text file in their repos with any additional comments.

Now, they don’t all have commit lists, so they don’t automatically get an email when I’m done. In the future, I may set that up. Not today, though. I manually send each one an email to say I’m done, and they can do an ‘update’ to get the most recent changes.

All-in-all, it’s a great workflow. I can improve it in a few different ways, but overall, it’s efficient for me, they’re getting good practice using a repository as part of their programming practice, and it provides a good, hard-to-loose communications channel regarding their feedback.

I think it’s awesome, even if no one else does.

Poul and I are beating on our ITiCSE paper, which is due on the 15th at 5PM… in Hawaii.

What does that mean?

hawaii-gmt-time-convert

It means… it’s due Tuesday!

Peter, a friend from my time at IUB (and author of the most excellent Data Structures and Algorithms in Java, plug-plug), will be teaching his department’s CS0 next term. He was curious about the NXT, and more generally, about teaching with the LEGO Mindstorms. Here’s the email I sent back his way, with small edits.

The LEGO route is the path of mavericks and people who like to yell loud, incoherent things while leaping off high surfaces. There are not, I do not believe, a lot of materials pre-packaged to get you rolling. I haven’t looked lately, however. (I have a bunch of stuff, but it isn’t polished. It might even be rough around the edges.)

That said, there are a number of tools out there that you can reach for that have a lower startup cost, where “cost” isn’t measured in $, but instead in time/effort (by far, the more important metric).

  1. Python/Alice

    Alice is a programming environment that I’ve not worked with much, but it provides an OO/actor-based approach to programming that lets students do experiments in a 3D world with all kinds of nifty objects. There’s a book available from Prentice Hall, which may make it appealing.

    I forget if Alice uses it’s own bogolanguage, or if it uses Python.

    http://www.alice.org/

    1b. Having just seen the Alice site, you could probably build a course around scripting within a game environment. For example, you could probably equip them all with The Sims, and teach them about programming through scripting the Sims universe. This, probably, involves few transferable skills, and lots of students letting their Sims burn to death in bitterness over the assignment you gave them last week.

  2. NetLogo

    Another “simulation” environment, this exposes students to modelling (again) from an agent-based perspective. They work in a dialect of LOGO, and write the code for one agent (be it a turtle, or a person, sheep, whatever), and can easily release thousands of them into the world. I do not believe there is a supporting text, per se, but you’ll find a good deal of supporting material available from the website.

    http://ccl.northwestern.edu/netlogo/

  3. Greenfoot

    Like NetLogo, but a bit more freeform, and in Java. I don’t know if it will be ready for primetime by next semester. From the creators of BlueJ, and as it turns out, my housemate. It should/will be cool, and personally, I look forward to teaching with it.

    http://www.greenfoot.org/

  4. Scheme

    Just teach them Scheme. Oh, wait, sorry, I thought I was someone else for a moment…

    Then again, the second hit in a Google search for “CS0″ is this link:

    http://www.cs.brandeis.edu/~tim/Papers/sigcse-cs0.pdf

  5. Squeak/Media computing

    You might look at the work Mark Guzdial is doing at Georgia Tech. I’m not sure if the media computing approach is too much or not, but I’ve heard him talk about it in the context of both CS0 and CS1.

    http://www.gvu.gatech.edu/gvu/people/Faculty/Mark.Guzdial.html

    http://www.squeak.org/

  6. You can search in the ACM DL for “CS0″, and get back oodles of hits. Pick and choose based on what looks interesting. I recommend most papers by “Jadud, M.”, as his writing is typically brilliant, witty, and self-aggrandizing.

  7. I know I started off by suggesting that the LEGO route isn’t easy, but I think that’s true. However, it depends on how you sell it to the students, and whether you’re prepared for things to go wrong from time-to-time. If you treat it as an experiment, have a clear direction/goal (I can help with brainstorming based on previous experience there), and your department is cool with the experiment, you probably can’t go wrong. Or, put another way, the worst you can do is engage in an educational experiment with your students, and *all* of you will learn something along the way.

    Hm. That didn’t sound very supportive/positive either. I guess my point is that you have to be prepared to let go. I wrote a bunch of stuff under the rubrick of “TeamStorms” a few years ago. It captures a lot of how I approached/felt/thought about teaching with the LEGO Mindstorms in the classroom. You might check that out.

    http://www.jadud.com/people/mcj/files/2000-SMC-teamstorms.pdf

    http://www.jadud.com/people/mcj/files/1999-R626-teamstorms.pdf

    The first is a “short version,” which I presented at SMC2000 (they must let anyone in). The second is the R626 paper it was distilled from. I don’t claim either is great, but they were written at the time I was actively teaching A290 at IUB, and reflect my thoughts at the time.

    That’s some material to kick you off, anyway.

It is frustrating watching all the Lego Mindstorms Developer Program weblogs. Many of them appear to be people who were randomly chosen to be in the program, and are now (apparently) maintaining weblogs about the robots they’re building.

So, I’ve realized that I could, after all, put my weblog to good use: I could write about some of the things I know, and are appropriate to the blog’s title. One is how students engage in the act of programming—I’ve written very little about my dissertation work over the past few years, and I might as well start serializing my research, results, and ideas out into this space. Certainly, it is a rare and hardy soul who would want to read my dissertation.

Likewise, I have spent years teaching with the LEGO Mindstorms in the classroom. I designed and taught my own course in the CS department at Indiana University Bloomington, and have continued using LEGO in my workings with students at the University of Kent in Canterbury, England. I’ve even helped write a massively concurrent runtime for the LEGO Mindstorms, and have been a judge at two First LEGO League competitions now, but never mind that we weren’t selected to be part of the developer program. I’m not bitter. Much.

So. Purpose. Direction. These are good things. And it will help keep me from blathering on about things that don’t matter in this space. Like, um, Peeps. Erhm… yeah.

(Actually, Peep research seems pretty important. But I’ll let that go for now.)

If I want to write about CS education and concurrency, I can write about it on the Transterpreter weblog.

If I want to write about things happening in the CS world “at large,” I can use the Untyping weblog.

Now, when I want to write about cool things in Greenfoot, I can use On Walkabout with Greenfoot.

I still dream of turning CS-ED.org into a collaborative, group weblog written by CS Educators.

The truth is, I actually like having these obvious contexts for writing; whether anyone reads these things is another matter entirely. However, I enjoy my work on the Transterpreter, and having a place to put that content (that makes sense) is great. Likewise, I’m very excited about On Walkabout; I think it’s a great way to explore a new piece of software, and perhaps come up with some good material for teaching and learning besides. And who knows—perhaps I can still make CS-ED.org work.

Eh, we’ll see. I was, in some ways, wondering if I wanted to let this weblog go. Then again, perhaps I shouldn’t; we’ll see. If nothing else, this is a roundabout way to encourage people who are interested in teaching, microworlds, and Java, to start reading Walkabout. And for everyone else, if you wonder where the words are going, it’s just that they’re usually not going here.

… OK, I was one of nine authors, but that’s still a trick. Writing a book with 9 people—and still liking them when you’re done—is no small feat. :)

1403946876

The text is already available on Amazon; it is titled “Studying Programming”, and because publishing houses don’t seem to like groups of people to be authors (for various legal reasons), Sally Fincher is the lead author on the text. It is fairly unique as a text: we’ve attempted to tackle the question of how a student should go about learning to program. This means we’ve tackled issues like how to utilize resources (textbooks, teachers, peers), how to go about tackling syntax and semantic errors in a program, the use of editors, and so on. In short, we’ve hit all the things that we’ve observed students struggling with, and not having any resources for getting started.

We all were primary authors on two chapters, and secondary on two. This means that many people took part in writing all of the text. I was the primary author of chapter 8 (“Writing Bigger Programs”) and chapter 11 (“Writing Your nth Program”), and added segments on Scheme and occam to the 16th chapter, titled “How Languages Differ” (I think it used to be “Here be Dragons”). Of course, almost everyone ended up touching every chapter in some way—for example, Colin worked through the Scheme example and contributed greatly to the quality of the text in that section, and the chapters saw many hands as we all proofed and revised each-other’s work. Really, it was a fun and challenging process.

I think the book is a fine piece of work, and fills a void in the world of texts available for novices learning to program. I believe it could be an excellent compliment to, say, Objects First With Java by Barnes and Kolling, or How to Design Programs, by Felleisen, Findler, Flatt, and Krishnamurthi.

Oh, and last, but not least—my most excellent housemate Ed provided illustrations for one of the chapters. Sadly, we failed to acknowledge his efforts in the text (not for want of trying—there’s a number of things that didn’t happen, despite repeated attempts on our part to make it happen). So, thank you Ed.

Now, everyone go order the book. :)

One thing I really like about the x86 architecture is the availability of so many cool virtualization technologies.

At work, I run Debian. I don’t even have a graphical interface configured; all the machine does is provide a place to store files, host databases, execute long-running processes—it’s a server, essentially. However, it is a 2.4 GHz Penium 4 with 512MB of RAM, which makes it a fast enough machine for doing reasonably interesting stuff with.

For example, the release of VMWare’s Player application opens up a number of opportunities. While it cannot create a virtual machine image, it can play an existing image. This means I can do a number of interesting things, and letting others take part/play along is no longer a difficult thing.

  1. The CSCS group is interested in Linux. I’d love to provide a VMWare image that lets them load a Linux image on a Windows machine, without them having to actually build the machine.
  2. Similarly, the CSCS group expressed an interest in learning some things about Linux security. I’d rather they were doing such experiments on a VM, and not a machine that I use for my research.
  3. I’d like to experiment with different *NIXes, but I can’t afford the time to be nuking a machine (constantly) to install them. Having a VM allows me to easily install (say) Ubuntu. Or Suse.
  4. It would be incredibly useful to have a Windows machine around, as I occasionally encounter something for a handheld device, small robotics platform, etc., that only comes as a Windows executable. However, I don’t have any desire to actually use Windows every day, nor do I want to replace my rock-solid Debian server. A VM would, however, make my life easy.
  5. Related, it would be great to have a Windows XP, Windows 2000, and Windows 98 installation so that the Transterpreter could easily be installed and tested on a clean machine every time we made a new release. Also, there were some genuine difficulties handling environment variables under XP, and neither Christian nor I had one—we both have Linux machines next to our desks. Makes it kinda difficult to guarantee portability of a binary installer for an OS you don’t actually have or use.
  6. Occasionally, I’d like to be able to play a game or two—nothing cutting edge, mind you, just some old games I grew up with. These are rarely available for the Mac, and almost always available for Windows. A VM running Windows 98 would be perfect in these situations.

OK, so the last item isn’t exactly work related, but it is at least honest. Point is, having a machine where I can store a number of 5-10GB disk images would be great. The Linux images could easily be provided to students for them to download and experiment with, and the Windows images would make it so much easier to occasionally boot “Windows-in-a-Window” to use an old or specialized piece of software that, otherwise, would be a real pain.

I’d love to wait until Apple releases an Intel box to build a machine that does this. The thought of being able to run OSX in a dual-boot configuration with Debian or Ubuntu, and therefore be able to run VMWare on the Linux side, is really quite exciting. It is even possible that VMWare will release an OSX port of their virtualization software, meaning I can possibly use OSX as a VM host for Linux and Windows. That, really, would be wonderful.

In the meantime, I have to wonder if it is worth building a small machine that can do all of these things (so I can take the machine with me after I leave Kent), or if I just want to ask the department for a drive and another gig of RAM to give it a go, and do some cool stuff related to my work and teaching.

You know how there’s little things you have to do that just keep getting swept to the side?

I have to edit the CS-ED.org site to add a link. Just one link! In fact, it’s this one. Perhaps I’ll do it today. Really. I mean that. Honest. …

Anyway, ecto makes posting a weblog entry easy, so I’ll do that right now to start. Des Traynor is a colleague out at NUI Maynooth doing his dissertation work in CS Education Research. He’s a good guy. And, he’s got a weblog where he writes about his work and related topics.

Except for the fact that he’s a PUNK, because he’ll be out at ACE in January. This is the Australian Computing Education conference. Yeah, I’d rather be in Australia than Ireland in January. This year, I’ll settle for having a dissertation done instead of a paper, though… I can’t really complain.

Lucky bastard. ;)

It never occurred to me (until this evening) that there might be foul language in the source code I’ve been studying.

Keep an eye on this space for some numbers regarding the use of foul language in source code by the students I’ve been studying for the last two years… :)

Let’s get cranky, shall we?

I’m going to make strong statements, and see if there’s pushback. And, this weekend, I’ll try and turn comments back on. In the meantime, use the gmail address, and I’ll add your comments as they come in.

From Worker Bee, we see this post:

Today I taught my last class of the quarter (Friday is the final), in which I gave a lecture introducing computer science, the whole discipline, starting with NAND gates and how you’d coax electricity to behave like boolean logic, and ending up with the P=NP question and the halting problem. I don’t know whether my students cared about it, but for me it was great fun.

What if the entire lecture had been questions? “What is computer science?” Wait for a minute. Two. Wait until someone says something. Anything. Challenge it. Explore it. Ask other students in the classroom whether they agree or disagree. If they disagree, why? If they don’t, why? See what they know. See what they think. See if they know what they do not know.

In the end, who gives a shit about what another CS grad student thinks computer science is? Grad students in CS are a dime-a-dozen, and every one of us has our own slant, our own view, our own opinion on what computing is or is not. I personally think computing is about the creative process, but I doubt many people care about that. A bunch of first years certainly don’t give a flying duck about NAND gates, and they never will. (I take that back; some of them do. And those students probably didn’t need your lecture in the first place.) Who cares if they have that fragile knowledge about the computational tower—I want them to think!

I’m glad the lecturer’s imagination was captured by their own egotistical rambling, but I’m sure mine wouldn’t have been. Mercy. When will people start asking their students questions, challenging them to wake up, instead of selling them a crapload of bullshit facts?

For the record: Yes, I know I wasn’t there. Yes, I know I’m extrapolating from nothing. Consider Worker Bee’s blog post nothing more than a springboard for me to rant; I certainly don’t actually have any malice or ill-will towards Jacob. The post was nothing more than a foil. But still, why wasn’t the post about the great discussion they had in that classroom, instead of a lecture that the students may or may not have cared about? How much longer until our classrooms become conversations, not pulpits?