80% Reducation In Carbon? No, In Media Coverage

2010-03-15 – 14:23

Depressing report in the Montreal Gazette:

A dramatic reduction in Canadian media coverage of climate change science issues is the result of the Harper government introducing new rules in 2007 to control interviews by Environment Canada scientists with journalists, says a newly released federal document.

“Scientists have noticed a major reduction in the number of requests, particularly from high profile media, who often have same-day deadlines,” said the Environment Canada document. “Media coverage of climate change science, our most high-profile issue, has been reduced by over 80 per cent.”

A Broad Definition

2010-03-15 – 14:18

Janice Cuny, Lawrence Snyder, and Jeannette Wing co-authored a paper for SIGCSE 2010 titled “Computational Thinking: A Definition”.  I can’t find a copy that isn’t behind a paywall, but their definition is:

Computational Thinking is the use of abstraction, along with automation and analysis, in problem solving.

They then talk about data abstraction (a subway map), process abstraction (an algorithm), automation (never actually defined), and analysis (including algorithmic analysis, performance analysis, specification, verification, debugging, testing, and experimentation).  If there’s a difference between this and the systems thinking that Weinberg and others have been talking about for the last quarter century, it’s too subtle for me to see…

Currently Juggling

2010-03-15 – 12:11

I keep telling my students not to over-commit themselves. It’s a shame I don’t take my own advice :-). Here’s what I’ve currently got on the go:

Software Carpentry teaches basic software development skills to scientists and engineers. I have 80% of the funding I need to spend a year upgrading its content and delivery. I hope to raise the last 20% of the money in the next few weeks. If I can pull it off, the major challenges will be:

  1. Learning how to create effective online course material: there’s lots of handwaving out there about wikis in the classroom, but nothing substantive about instructional design for mature learners using present-day internet technologies.
  2. Assessment. We don’t know how to measure the productivity of programmers, or the productivity of scientists; trying to gauge this course’s impact on the productivity of scientific programmers will therefore be something of a challenge. (One of the reasons I left industry for academia in 2006 was to figure out how to do this, but my attempts to find research funding all failed.)
  3. Mechanics. Site5 only allows one shell account per domain, which makes it difficult to open up the project’s Subversion repository to other contributors. And I’ll have to choose a format for the lecture notes: LaTeX, plain HTML, S5, one of the many wiki formats… And figure out a better way to create and manage images and video. And pick a bibliography format. And…

A professional Master’s degree in Computer Science at the University of Toronto to complement the department’s existing research Master’s. The program consists of five regular graduate courses, a course each on business skills and professional communication, and an eight-month industrial internship in which students have to show that they can translate theory into practice. We are now accepting applications for September 2010 entry, so if you’d like to learn leading-edge ideas from some of the best researchers in the world, please check it out.

Basie, our replacement for Trac, built on Django and jQuery, is coming along nicely, but I don’t know what will happen to it once I leave U of T. A few non-students are now involved in its development, but we aren’t big enough to bid for our own Google Summer of Code students. If anyone would like to get involved, please give me a shout. (I’d particularly like to hear from ex-project students—it would be nice to have an excuse to stay in touch.)

UCOSP stands for “undergraduate capstone open source projects”. Since September 2008, undergraduates from several universities in Canada and the US have been taking part in joint capstone projects in order to learn first-hand what distributed development is like. Each team has students from two or three schools, and works for a term under the supervision of a faculty or industry lead on an open source project. We’re currently trying to find $35,000 to hire a half-time administrator to run the program from September 2010 so that we can scale up from the present 45 students/term to 80, 90, or more. Again, if you’re interested, please give me a shout.

CSC302 is my regular undergraduate software engineering course. This term, six teams of students are porting Django to Python 3, adding pivot tables to Gnumeric, parallelizing parts of ILUTE, upgrading PyLint, pluginifying Selenium, and extending SpatiaLite. It could be the last regular course I teach at the University of Toronto; it has been a bit bumpy, but I’m glad the students are getting to work on real things.

Grad student supervision: Alecia, Zuzel, and Mike all have topics nailed down, and Jason is writing up. I plan to spend one morning a week in the department working with them from now through next January; I’m looking forward to seeing what they produce.

The Cowichan Problems. This one goes back to the mid-1990s, when I first realized that human performance was at least as important to overall productivity in computational science as machine performance. The idea is to use a suite of fairly simple applications, all stitched together, to benchmark the usability of parallel programming systems. A couple of undergrads updated the code last year; I’m hoping to revisit it as part of my work on Software Carpentry.

Book #1, called What Really Works?, is a Beautiful Code-style book that presents evidence-based results in software engineering. Where do bugs actually come from? Does pair programming get the job done faster? Can code metrics predict post-release fault rates? Are some programming languages intrinsically more productive than others? Each of our authors will explore one such question in a chapter-length essay; contributions are now coming in, and we’re still on track to have the book on the shelves this summer. (I’ve been talking about this subject and this book for a few months now; if you’re interested, you can view the slides.)

Book #2 is yet another collection, this time exploring the architecture of open source applications. As I said in my lightning talk at PyCon, the aim isn’t really to explain the internals of Hadoop, Parrot, and Mercurial (though I think that’s worth doing). The real aim is to teach people how to think about software architecture by showing them how architects think. We’re hoping to have chapters in for review by November, and the book out this time next year.

Book #3 is an illustrated children’s book about the universe, life, science, and global warming. I’ve had some good feedback from the editor who handled my last children’s book, but most of the work is still in front of me.

Projects I’m not working on:

Government 2.0: I enjoyed working on open data/open government projects with my students last term, but I couldn’t find any faculty at U of T willing to keep it going. I could have found Gov 2.0 stuff for CSC302, but I thought open source work would be better for them.

Two novels and half a dozen short stories. I enjoy writing fiction, but it feels like an indulgence, and I keep pushing it aside to do “serious” stuff. I’m sure that when I’m seventy I’ll regret having done that, so I hope to spend one hour a day writing fiction once I start full-time on Software Carpentry.

Jazz: I haven’t touched my sax since this time last year—it may be vanity, but I’d rather not play at all than play badly. Maybe when my daughter’s a little older…

Exercise: yeah… exercise. Maybe I’ll get my bike back on the road this week…

Master of Science in Applied Computing

2010-03-15 – 12:10

I am pleased to announce that in September 2010, the Department of Computer Science at the University of Toronto is launching a new graduate program: a Master of Science in Applied Computing. The aim of the program is to teach the next generation of technical leaders, innovators, and entrepreneurs how to turn novel research into practical applications. Students will spend the first eight months taking courses with some of Canada’s leading Computer Science researchers, and another eight months in an industrial internship, where they will apply what they have learned to real-world problems. For more details, please see the program description, or head on over to the application page.

What’s Wrong With This Plan?

2010-03-14 – 20:06

My grad student Mike Conley decided several months ago to look at code review for his master’s thesis. After exploring a few ideas (including badges and achievements for reviews), he has put together a plan that might tie several things together quite neatly. He and I would both appreciate your feedback.

Something That Won’t Be On The Final Exam

2010-03-13 – 15:09

The final exam for my CSC302 software engineering course was due this week, and I thought I had come up with a good–and fair—question to put on it. Four out of four of the other instructors I spoke to, however, didn’t like it, so I left it out. I’d be very interested in hearing from present and former students (and other teachers) what they think.

This term, I organized the CSC302 students into six teams of about ten people each, and put each team to work on an open source project. Most of the marks in the course are given to the team as a whole, so I wanted a way to assess individual contributions. Having students evaluate their peers would be easy, and in theory would reward people who’ve done more, and penalize people who’ve done less. However, peer evaluation is notoriously vulnerable to gaming and social pressure.

My thought was therefore to measure how well people understood their own contributions, rather than the actual contributions. I thought I could have everyone rate both themselves and all of their teammates. An individual’s grade would then be based on how closely their self-score matched the scores given to them by their teammates. If your teammates all gave you 2/10, for example, and you also gave yourself 2/10, you’d get a high mark for knowing that you’d done a poor job.

Well, you can probably see the flaws, and having thought about my colleagues’ comments, so can I. For one thing, it seems unfair to give people a good grade for doing a poor job. It also seems unfair to grade them twice on the same work (once during term for doing it, and once again at the end for having done it). And it would still be susceptible to gaming, though surprising students with it a final exam would reduce that risk.

All of which raises an interesting question. Peer evaluations are routinely used in industry as part of annual performance reviews; bonuses and promotions routinely depend on what your colleagues think of you. If it’s OK to use them there, why is it so difficult in a course? If anything, there is more incentive to game things in a company where you’re likely to work with people for years than in a course where you’re only working with someone in one or two courses.

DemoCamp Toronto #26 is March 29

2010-03-13 – 12:00

And there’s food!

SIGCSE 2010 Wrap-Up

2010-03-13 – 08:47

I wanted to go to SIGCSE (the computer science education conference) this year, but breaking my self-imposed no-fly rule once made me feel guilty enough. Lots of people have been blogging about it, so I have lots of catching up to do (and lots of videos to watch). The theme for SIGCSE 2011 External Link, which is being held in Dallas, Texas, External Link is “Reaching Out.” The symposium will focus on connecting with colleagues in other fields and developing interdisciplinary courses and research that integrate computer science and other fields. If all goes well, I hope to have something to say by then about Software Carpentry.

Bottom-Up, Top-Down, and Back to the Future

2010-03-13 – 08:42

I just (finally) watched the demo video for Andrew Bragdon’s CodeBubbles. You’ve probably already seen it, but if you haven’t, check it out: it rocks. Like Kael Rowan’s Code Canvas (a Microsoft research project), it imagines an IDE that is more than just a bunch of 1970s-era TTYs in a frame. I think of these as bottom-up efforts: both still accept that source code must be ASCII tokens, and do the best they can from there. In contrast, Intentional Software’s still-in-beta product (described in this talk) goes further toward treating source “code” as a model in the model-view-controller sense, so that rendering and interaction can be comprehensively customized.  I still believe that sooner or later, the maker of a proprietary language (most likely Wolfram Research or The MathWorks, but Microsoft is still in the running) will proudly announce a breakthrough in this area, and that everyone else will scramble to catch up, while graybeards on the sidelines point to the original Smalltalk of the late 1970s and grumble that it has all been done before.

An Army of Interns

2010-03-13 – 07:29

Here’s an interesting complement to both the GSoC model (students work full-time for 12 weeks on a project) and the UCOSP model (students work on a project as one course among N during term): hire a bunch of interns from MIT during their one-month inter-term break, cram them into a room, and give them each one independent task. I expect outcomes will be very good, as it combines collocation (which GSoC doesn’t provide) with a chance to focus on just one thing (which UCOSP doesn’t offer). It also helps that they’re recruiting from a pool of students with relevant experience, and who have already internalized most of the required working practices. Wish we could try this model here, but (a) we don’t have an inter-term break, and (b) we don’t have money.