Welcome graduates of POSSE SA!

Actually, South Africa is a big place; perhaps there will be more POSSEs there, in which case, we’ll have to call you Classic POSSE SA, or something like that. Mind you, you’ll always be special. But really, I digress. Already.

Take 2.

As you look to involve your students in the world of open source (and, indeed, as you explore it further yourself), use the tools you’ve been introduced to so we can stay in touch. Not so much because those who came before think we have all the answers, but because we’re hoping you can contribute to and improve the explorations we’re making already. And, for that matter, TOS can, we hope, serve as a space where we can support each-other as we try and engage in explorations that encourage our students to reach beyond their comfort zones as they begin exploring the world of decentralized collaboration under the aegis of free and open communities of practice.

So again, welcome!

During the summer of 2009, I had the good fortune of taking part in the Red Hat POSSE programme, meeting a bunch of excellent open source peeps, and getting a sense for how I might introduce more of my students to the world of open source contribution. This last spring, my colleague and I introduced 40 first-year students to the Fedora project. This semester, I’d like to introduce y’all to a few more.

This semester I will be leading eight intrepid students in an exploration of interface design and development at Allegheny College. Your open source project (or a small part of a larger project) could benefit greatly from these students, if you’re interested.

HOW YOU CAN HELP

I want developers/managers from “projects” that have a GUI. I say “projects” because you might be the lead on, say, a network settings dialog box that is part of Fedora. You need to be of the mindset that your GUI could always be better, but you never seem to have the time to sit down and do heuristic evaluations, sit users and do interaction testing, and so on. If we work with you, you also have to commit to being timely in responding to the students—most likely on your developer mailing lists—because we can’t wait for two weeks to go by in a 14-week semester while we’re waiting to hear back from you. (I’m not talking about 5-minute response times, but if you can’t reply to email from people trying to make your project better within 24-48 hours, please don’t respond.)

Basically, we ask that your community be reasonably responsive, and we’ll be doing all the work.

WHAT WE WILL DO FOR YOU

Macintosh Plus

Small teams of students will, throughout the semester, engage one or more of these projects as budding interface designers. They have no prior experience in this regard, but will be engaging material on lo-fi prototyping, usability, the psychology of interface design, and so on. We will be discussing this material (which we will try and do in as open a manner as possible) and directly applying what we learn to the interfaces that are part of your project.

The students will work within your community, using your tools (mailing lists, wikis, etc.). I do not expect them to implement their designs, although some of them may be capable of doing so, and they might even do it. This, however, will not be a requirement of the course. (Not everyone in the course is capable.) If their work is good, and you like what you see, we only ask that you give their efforts serious consideration for implementation… we’re working with you because we don’t want to be doing interface design and testing in the abstract, but instead we want to add value to real projects through our efforts.

SOUND GOOD TO YOU?

If it does, please drop me an email (mjadud at allegheny dot edu). If you’d like to talk to me on the phone, I’m happy to chat—92JADUDM92 is my Google Voice number, which… well, it’s new to me, so we’ll see what happens.

I don’t (yet) have the course website up, but it will probably live here when it goes live

This semester, we’ve introduced 40 students to the Fedora project . By “introduced,” I mean they have been introduced as contributors.

I want to point out that for me as a member of the faculty this is 1. hard, 2. a massive leap of faith, and 3. very, very exciting.

And, it is all of those things for our students as well. They’re blogging over at act.ivism.org, and I’ve written an introductory piece about their project on opensource.com. If you want to check out what they’re writing (and leave them some encouraging notes on their blogs), that would be awesome.

Remember: these are first-year students in a Freshman Seminar who have not declared their course of study. Despite that, they’re diving into IRC, wikis, blogs, mailing lists, and sprints as they rapidly come up to speed on contributing to the Fedora project. I don’t think they have any idea just how big a jump this is for some people. And because they don’t know it’s a big jump, they’re just jumping.

Give em’ some props. (Or, leave the props here, and I’ll pass them on.)

One of our third-year students is giving a talk about two of his passions today: Tea and Twitter.

Pat Canella ’11 will present a talk titled “Twitter and Tea” at 4:30 p.m. on Wednesday, March 17 in Alden 101. The talk will focus on Canella’s own experience with the tea community, on Twitter and other “Web 2.0″ tools. Refreshments will be served. The talk is sponsored by the Association for Computing Machinery at Allegheny. All are welcome to attend.

What started as an exploration of an idea in our Junior Seminar became a talk that he’ll be delivering to a much wider audience. And rightfully so—Pat has been exploring tea through a number of media (Twitter, blogs, etc.), so this should be good.

RedHat has kicked off another POSSE, this one on the other side of a continent and an ocean from where I live. (The faculty have come together in Singapore… I hope my travels take me that way someday!) I’m looking forward to seeing what they have to say, and what their experiences are like. Their blogs are online, and I’ll be doing my best to keep an eye on them over the coming days, weeks, and months ahead.

Last semester, I introduced my students to structured data (including how to traverse self-referential structures), transitioned into classes and objects, and the basics of constructing GUIs in the object-oriented paradigm. A number of them mastered Model-View-Controller in this transition. This isn’t entirely remarkable—it’s actually a simple pattern, when the language itself doesn’t get in the way.

A Java program that produces this:

A GUI in Java

Comes from code that looks like this:

080605-first-gui-java-code.png

Of course, the output from the Scheme version looks the same:

080605-first-gui-scheme.png

But the difference is in the amount of code the student has to write:

080605-first-gui-scheme-code.png

What do I like about this?

  • There’s less preamble (#lang scheme/gui vs multiple imports).
  • The syntax is consistent with what has come before in the student’s experience.
  • There aren’t any mystery calls (frame.pack()?).
  • new is analogous to make-, which students have seen many times before.
  • Callback functions follow naturally from previous work; event handlers are confusing.

I could probably make the list go on and on. At some point, I have to spend more time with JavaME, as it has a much simpler GUI model. And, given that the vast majority of the computers—those would be mobile phones—run JavaME (and not the full Java stack), it would be good to ask around and find out whether we’ll ever see a native version of BlueJ for programming against the ME classes.

Or, it could just be I prefer introducing students to simple languages, and then moving them on to more complex languages as necessary. But this is an old and tired rant, at best.

I will probably end up writing about this again.

Java textbooks are painful things.

I did a quick survey of a number of popular titles in the introductory Java textbook space. I considered the title “popular” if I had seen it on the shelves at SIGCSE on a consistent basis over the last several years. By-and-large, there are a lot of textbooks I consider crap, and I consider them crap for a variety of reasons. Sometimes it is because the writing is dry and unappealing to me (let alone a novice). Sometimes it is because the book does a horrific job of structuring/pacing material. Generally, I consider them all too expensive.

I threw together twelve books and ran some numbers on them:

080602-java-textbooks2.png

The numbers to the right of each blob are the number of pages a student would have to read in order to get through the entire textbook in a 13-week semester. (I’m counting a week as lost to startup, and there is time lost to exams and the like as well.) The most expensive, and largest texts come in at over $120 and 1500 pages; this implies that students will read 120 pages per week while working exercises. Of course, no first-year computing student is going to read 120 pages of a mind-numbing textbook and do homework besides… not for just one of their four courses.

The smallest and cheapest text is not actually a CS textbook; at $10 and roughly 200 pages we have The Magus of Java, which has nothing to do with learning to program, but looks kinda neat. It is likely many introductory students would learn more from it than from the 1500-page beast at the other end of the spectrum…

The book in red is Objects First with Java. I’ve taught with it before, and as can be seen, it prices out well; it is expensive at $75 or so, but isn’t too large…. the student has less reading to do (per week) than many other books in that price range. That, and I’ve taught with the text more than once, and consider it to be a quality piece of work. In green is Java Programming for the Absolute Beginner, which has some reviews that make me think it would be a horrible choice for novices. The author would probably disagree, but the comments on that text set off warning bells.

I tend to agree with many of the philosophies of Allen Downey (whom I’ve had the pleasure of working with this past year) with respect to textbooks. He has published How To Think Like a Computer Scientist as a freely available text. What I particularly like is that he strives to keep each chapter short, so that a teacher can reasonably expect that students might read the material. It may be that I’ll have to write my own text this coming semester, focusing on basic mastery of syntax as well as concepts, utilizing both repetition (for mastery) as well as more open-ended problems (to encourage creativity and collaboration), all while keeping each chapter/learning unit as short as possible (for digestability).

We’ll see what happens; for now, this is just a long-winded rant-ish. But it is a problem/question/situation I need to deal with over the course of the next month.

Michael opens up on ICT education in the UK in PC Pro:

It’s like giving children a calculator but never explaining the underlying principles of multiplication. “Teaching children office-automation skills borders on child abuse,” says Dr Michael Kölling, the University of Kent academic, who’s attempting to get the Greenfoot software we’re using for our tutorial into schools across the country. “The main problem for us is they call it computing. Kids think that’s computer science. It isn’t productive, it doesn’t stimulate interest. Children should be creative, they should get the joy and satisfaction that comes from seeing their ideas take shape.”

His point is that Greenfoot is a much more engaging environment for students to be programming in then, say, doing spreadsheets in Excel. He’s right: forcing 13-year-old students to learn Excel macros is a form of child abuse.

Continuing on from my previous post, I continue to wonder about conversational (or dialogic) forms of course evaluation. A cursory search of a few online databases doesn’t yield anything in this area, which means a more serious, systematic literature search is required. While it is true I’ve never seen anyone take a conversational approach to course evaluation, that doesn’t mean that it hasn’t been done or investigated.

Some papers I’d like to investigate, however:

What is interesting was how enriching and valuable a conversational approach to course evaluation turned out to be. And, after receiving the college-issued anonymous course evals, I cannot even begin to imagine how I could evolve and refine my course based on the (blunt) instrument they employ. As I investigate these ideas further, I’ll make note of them on this blag.

Pussywillow1
Pussy willows; from here.

When my younger brother was… younger, he once stuck a pussy willow bud up his nose. I mean, he didn’t just sorta stick the thing in his nose… he crammed it up deep somewhere in his nasal cavity. I’m surprised he didn’t loose the finger to the finger-biting monster that Shel Silverstein claims lives up there.

Inside everybody’s nose
There lives a sharp-toothed snail.
So if you stick your finger in,
He may bite off your nail.
Stick it farther up inside,
And he may bite your ring off.
Stick it all the way, and he
May bite the whole darn thing off.
(Shel Silverstein, Where the Sidewalk Ends)

Alas, no such biting happened. I do remember him screaming like the end was coming, however, when four adults held him down (one to each arm, one to his legs, and one to his head) while someone gingerly reached up and extracted the pussy willow with a pair of tweezers.

I figure he was around three years old. I would have been seven.

Good times, good times…

Of Pussy willows and Subversion

You see, this comes to mind because my students are using Subversion repositories for all of their coursework. They check things in, I check them out, and comment on their work. I then do a checkin, and they can read my comments right in their code. There’s no complex web-based system, no complex emailing of documents back-and-forth. It works reasonably well, I think.

Now, what should go in a repository? This is a reasonably tricky question.

  1. Code. When you’re working on programs, the source code goes in the repository.
  2. Documentation. Documentation (preferably written in plain text or LaTeX) should be in the repository. If you’re keen on using closed, proprietary tools, then Word Documents might end up in the repository.
  3. Required blobs. A “blob” is a binary document. JPEG images are binary. PDFs are binary in nature. It is a “required” blob if something else needs it to be generated (like a LaTeX document that has an image in it; the PNG or JPEG should be included in the repos).

That’s about it. That still isn’t very specific, so I’ll itemize one or two things that might not go in the repository, and why.

  1. PDFs. Generally, PDFs do not belong in the repository. That is, if you found an article that both you and your colleague are collaborating on, the repository is not where the PDF belongs. Why? Because the PDF is never going to change. You should just use a networked drive for this kind of “static” or “unchanging” data.
  2. Executables. Programs that you need as part of the process of building or manipulating your software should not, generally speaking, be part of the repository. If you have an EXE that, say, processes one of your files… it should also be in a shared drive. While it might be necessary, it (like the PDFs) will never change. Therefore, you should put it on a shared drive, and let people copy it from there.
  3. (By-)Products of a build process. Many programming environments generate many temporary files while building a piece of software. These temporary files that are generated in-between your source and executing on hardware should not be part of the repository. Only the source documents (the C files, and any project configuration files that are part of the IDE) should be in the repos. Temporary log files generated by the compiler should not be in the repos.

In short, only the files that you edit go in the repository. Any files that a program generates should not be in the repository.

Why?

Because your repository grows every time a file changes. If you store big, binary files (like executables produced by a compiler) in your repository, then every time you compile your program, the repos thinks a critical file has changed. In truth, we only want the source code to be tracked… not the output from the compiler. We especially don’t want the log files from the compiler checked in. We simply don’t care how those change from one commit to another, and our colleagues generally don’t care, either.

Now, like all things, there are times when these rules might be violated. For example, I asked my students to put a PDF of their report in the repository. This is because I didn’t want to deal with Microsoft Word documents. I’ll mark things directly into a copy of the PDFs. That is preferable, given the workflow that we’re dealing with, and the fact that some students are using Word, and some are using LaTeX. (I should just require TeX.) So, that “rule” about “no PDFs” was violated for a very specific reason. Likewise, I put PDFs in the class repository so they can easily read and print the documentation on whatever machine they are sitting at… not because it is the “right” thing to do.

So, what goes in your repository? Probably not pussy willow buds.