Last night was the second session in the introduction to Java that I’m teaching as part of Kent’s IT Cert course. Most of my students had not reviewed chapter one, or continued working through any of the exercises; in an 8-week course, this isn’t ideal, but we can manage at this early stage.

trail.gif
I spent a good chunk of Sunday prepping for class, as well as ironing some details out on Monday. The prep was primarily composed of building a tutorial that would run within BlueJ; we’re calling these tutorials trails. This is because the tool we’re currently using to build the trails (a modified version of JFLAP–a tool designed for teaching student about automata) lets us draw out the progression of the tutorial, as well as attach conditions on the transitions from one step to the next.

From the student’s perspective, they encounter the tutorial content as a textual pane embedded in BlueJ.

full-screen.png

What’s interesting about the tutorial is that we can interact with the environment and the student’s code at a very high level through the BlueJ Extensions API. This means we can write a tutorial that responds to

  • Classes of syntax error made by the student,
  • (Some) semantic errors made by the student, as well as
  • The state of their interactions in BlueJ with objects on the bench.

Practically, this means we can augment or override compiler errors with messages of our own, we can inspect their code to see if they’ve carried out the correct additions or modifications (example below), or see if they understand how to interact with the classes they’ve written as objects.

For example, I wanted my students to write a very simple class:

public class Animal {

}

This is because I wanted to build up to adding fields (one at a time), a constructor (that sets default values for those fields), accessors (again, one at a time), and mutators in a very stepwise, controlled manner. This way, syntax errors would generally be constrained to one or two lines of code at a time, and the students would repetitively encounter the fundamental elements of a class. Drill-and-practice at its simplest.

Using the trail builder, we can check for all kinds of things (more on this when the tools and software are released after testing). This particular tutorial didn’t capture any syntax errors, but it would check to see that they managed the semantics of each step. For example, we could check that they had a class called Animal with no fields or methods; if they didn’t, we give them some generic feedback saying as much:

we-have-a-problem.png

After enough attempts, we encourage them to ask a question. There are better ways of handling this, but for the moment, the intention was to get the students asking myself or each-other questions in-class, not coding checks for every possible contingency. When they get things right, something very important happens: they get positive feedback.

we-got-it.png

Off the top of my head, I don’t know of any tutorial systems for programmers that offer this kind of interaction. We can augment syntactic error messages, semantic errors (by examining their code through the BlueJ API or unit tests), we can branch to sub-trails to drill on specific problems as necessary, and most importantly, we can praise students for work well done—something that simply doesn’t happen in VB.Net (or any other development environment I’m aware of).

I think the class went very well. I was surprised at how far through the tutorial my students made it in an hour-and-a-half, considering none of them have done any programming of significance before. They saw it as a lot like HTML, but “more picky.” At the end of the evening, we were able to recap and go through the concepts and vocabulary fairly easily. I’d say that there was a lot of value last night in drilling on basic concepts from the start.

We’ll see what happens next week; I’ll be writing a “drill-and-practice” tutorial generator (so I can give them an endless stream of these kinds of problems to work on), and we’ll start digging into the TicketMachine material I’m cleaning up.

urland.pngOn this most auspicious of days, I count myself lucky to be alive.

And receiving loot.

My housemate Brad bestowed Urland, a game of evolution, upon me. Although this wasn’t today, it is counted amongst the “loot to date.” Urland is in the same vein as Ursuppe, but you attempt to evolve your Ichtyostega into the dominant life-form on the planet. Should be a fun play.

Another housemate, Ed, presented me with two decks of Legend of the Five Rings, a tradable/collectable card game from Wizards of the Coast. This is what is known as a “selfish gift,” because Ed doesn’t have anyone to play this game with. As if it wasn’t bad enough taking whippings in Rummikube

As much as technology has made it easier to get back in touch with friends in the States, there are days where it doesn’t diminish the fact that I wasn’t able to attend the wedding of a dear friend this weekend, and that my wife is on the other side of this little island.

I’m not bitter, but I look forward to being done with this phase of life–mostly, the phase where I’m living apart from the woman I committed the rest of my life to.

frontier.jpg
Frontier 10a1 has been released in the open. It’s wonderful to see an excellent piece of software released so as to keep the application alive.

Frontier runs on the Mac (OS 9 and X) as well as Windows. This powerful piece of software has an excellent outliner, an HTTP server, excellent AppleScript and SOAP/XML-RPC support, a built-in scripting language (Usertalk), and an object database all rolled into one. There’s a wealth of information regarding Frontier available around the WWW, as well as lots of scripts and extensions that do some amazing things.

And it’s just the tool I need for a project right now. If only I could find all my old outliner renderers on CD…

buslink-mp3.gifThe undisputed king of MP3 players is, in my mind, the iPod. However, I don’t see $300 being dropped on one in the near future.

What about the BUSlink 256MB? It doubles as a USB drive, and has a handy (useless) voice recording feature. And, I found it for $53 from a Yahoo! Store.

Hm. Two useless posts in one day; critics might say four.

Colorware.

Cool. I’ll take three.

As seen on the mailing lists of the world, the Scheme workshop proceedings are available as a tech report from IU, and the associated ACM DL page (linked table of contents) is online as well.

This is mostly for my future reference; I went to the FP group meeting yesterday where an overview of the workshop was being presented, and I’d like to go back and poke through some articles. I’m pleased that A nanopass infrastructure for compiler education was presented; this is (essentially) the compilers course I audited before leaving IU, and (like the other language courses I took while there) it was an excellent course. (The paper is also in the proceedings.)

Interestingly, there’s a new CrossRef search hosted/powered by Google; it’s a “29-publisher pilot for full-text scholarly research.”

The idea of axiomatizing a programming language is not of course a new one. It’s almost as old as the idea of a programming language. In his famous 1960 paper, John McCarthy showed how to do this by defining a language he called Lisp. You may be familiar with it. If you have seven primitive operators (quote, atom, eq, car, cdr, cons, and cond) then you can define in terms of them another function, eval, that acts as a Lisp interpreter.

And so any language that contains these seven operators is a dialect of Lisp, whether it was meant to be or not. This must be an alarming prospect for anyone designing a new language. These seven axioms are so reactive that if you get them all together in the same place, they explode, and pow, instead of a new language, you’ve designed an old one. So if you want to design a new programming language, it is critical that you not make it too powerful.

Mmmm.

Via LtU, I found a link to a post on some ups and downs observed by Ralph Johnson regarding research into open source software.

Pulling from Ralph’s post:

A recent paper in CACM ran some metrics on six open source programs and made claims about their need for maintenance. However, it didn’t say exactly which programs they were, but just gave their total code size, “application type” (such as “operating system application”, or “programming language”), and number of releases measured. The claims were about what I would expect, and might have been interesting if the figures were checkable. But because the authors didn’t say which releases of which programs they used, the paper is nearly worthless.

The authors said that they didn’t release the names of the projects because of “standard software engineering ethics”, and referred to a paper by El-Amam called “Ethics and Open Source” that I couldn’t find on the net. However, I found another paper on ethics that referenced the first one approvingly, and so the first paper probably uses similar arguments.

The basic argument is that anyone doing a case study of open source software is doing an experiment on humans, and either needs their permission or needs to make sure that they can’t be harmed by the study.

That’s a long quote, but I want the context; by no means is this critical of Ralph (who was observing and commenting on the CACM article), but a comment about research ethics.

If the work was an experiment on humans, then it should have gone to a Human Subjects Approval Board at whatever university or institution the researchers were from. This would mean that all the individuals involved in the open source project being studied would have signed an informed consent form stating that they were aware they were part of a study, the intent and extent of the research, as well as how to opt-out of the work. If the researchers failed to obtain this permission, then many Bad Things could conceivably come to pass; I’ve seen Ph.D. degrees stripped after the fact when human ethics guidelines were not followed by the individual carrying out their research leading to the Ph.D.

However, this assumes that what they were doing constituted research on humans. What we have, instead, is:

  • A collection of programs released into the public, and
  • Stored in a database (Sourceforge, perhaps?),
  • Authored by an unknown, and potentially very large, number of people.

This is a cut-and-dried document analysis, and the important point is that documents released freely into the public domain are not the personal property of the creators anymore. Perhaps more importantly, we are not studying the creators (humans), but we are studying documents in the public domain. I would argue that there are no human ethics issues; if there are some “software engineering” ethics involved, then that’s a matter of what the community feels is appropriate or inappropriate, but there is no legal basis (such as human subjects compliance) at play.

I’m just basing this on my experience in completing human subjects forms at several institutions. The real answer to the question is to ask your local human subjects compliance officer (or committee member) about whether this kind of research would require permission in advance. In my own work, I’m studying programs written by students, and correlating this kind of information with their grades in the course. This absolutely requires informed consent (at least at the institution I’m working at). I don’t see how a study of open source software even comes close, but if I was concerned, I’d ask–because it doesn’t matter, in the end, what I think: it matters what my HSA board thinks.

In other news, it’s nice to know that Christian’s and my workacrobat on the transterpreter was recognized with the best student paper award at CPA 2004. This was unexpected, and netted us a bottle of whiskey. My supervisor was not entirely pleased; this is not exactly my research area, so it constitutes a “reward for a distraction”—consider languages, compilers, and their run-times a hobby of mine, if you like. So, I’ve tried to keep my head down on this one.

Either way, it was nice to get the recognition; we’ve worked hard, work continues on it, and we’ll be using the fruits of this labour in the classroom this term with the CSCS group. I’m really quite excited about it, as I think it’s probably the single most appropriate language available for teaching with the LEGO Mindstorms at this time. We have brought a small, simple language (occam) that was designed for use in highly concurrent, embedded, real-time systems to a small, simple robotics platform. In some respects, it’s the design target for little languages on little robotsacrobat.

I’m looking forward to where the project leads. It’s good stuff.