Our department has had a fourth-year course called “CSC407: Software Architecture” for several years. I taught it for the first time last summer, and had a lot of trouble figuring out what to put in front of students. Design patterns and basic queueing theory were no-brainers, but everything beyond that—everything that people point to when they say “software architecture”—seemed too ethereal for students. Take Kruchten’s 4+1 views, for example: it’s a very useful way to think about software systems, but if you’ve never had to find your way around a really large application, the motivation and ideas are bound to seem a little abstract.
I taught the course for the second time in the fall; I was a little happier with it (thanks in large part to books like  and ), but only a little. This winter, though, I found something that seemed to work well. I asked students to compare and contrast the architectures of two competing open source applications: two editors, two racing games, two peer-to-peer file sharing systems, and so on. Students worked in pairs; a little over half of the teams divided the work by application, while the rest divided the work by topic (i.e., one person wrote most or all of each of the required papers). Several pairs gave me permission to post their work to show what they accomplished; I’ve put links to one series of submissions below, and will get others up when I have time.
Students enjoyed the exercise; most of them put a fair bit of effort into it, and appreciated the chance to learn some more about open source applications. More importantly (to me, at least), they seemed to learn a fair bit about software architecture as well. I’d be very interested in hearing from anyone else who has tried something like this.
- domain.pdf: a one-page summary of the problem(s) your applications are intended to solve.
- differences.pdf: a one-page summary of the major differences between the features of the two applications.
- organization.pdf: a four-page description of the layout of the applications’ code. If the application relies on configuration or data files at runtime, you must describe those as well.
- conceptual.pdf: the conceptual architectures of the two applications.
- implementation.pdf: the applications’ implementation architectures.
- execution.pdf: the execution architectures of the two applications.
- useful.pdf: which of these three views is the most useful in understand the applications, and the differences between them?
- critique.pdf: a short critique of the architectures of the applications.
- extension.pdf: design an extension to the applications.
Congratulations to Alexander Razborov and Steven Rudich, winners of the 2007 Gödel Prize in theoretical computer science for their 1994 paper Natural Proofs, which showed that there’s no “Natural Proof” of the P vs. NP Problem (the most important open problem in theoretical computer science). For details, see Jon Erickson’s editorial in DDJ.
RailsConf 2007 (a gathering of and for Ruby On Rails developers) is happening right now in Portland. Next-generation web frameworks, Web 2.0, blah blah blah — all very exciting, but the gender ratio among speakers is 71 to 5 (6.5% female), and from the photos, all but one of the speakers is white. Looks like more people need to read Suw Charman’s excellent article from last fall…
Which reminds me of a web site I’d really like to see: one that tracks representation of various under-represented groups at conferences. Side-by-side stats might be a good first step toward fixing some of the things that are broken…
Muhammad Ali and Adam Foster prototyped a dashboard display for DrProject as a term project this winter. It collects information on the number of tickets in various states, and the number of check-ins, then uses Matplotlib to construct time-series charts. It’s pretty cool, so Ali agreed to spend a week integrating into DrProject for deployment.
In order to make it work, DrProject has to load Matplotlib and PySqlite (the Python wrappers for SQLite) at the same time. After a day of wrestling with versions, packages, LD_LIBRARY_PATH, and other junk, Ali can get it to load one or the other, but never both. The symptoms are described here:
Basically, if LD_LIBRARY_PATH is left empty, Matplotlib will load, but PySqlite won’t. If LD_LIBRARY_PATH is set to /usr/local/lib (where the sqlite .so file is located), PySqlite is happy, but Matplotlib fails to load. If the directory containing the .so’s that Matplotlib needs are added to LD_LIBRARY_PATH, well, you can read Ali’s message, but it’s still broken.
We’d welcome help or guidance; we’d also be grateful if someone would come up with a packaging and deployment strategy that makes these problems just not happen .
Later: Ali writes, “The problem was that I had an incompatible version of one the packages that matplotlib needs to import (libcairo), installed in /usr/local/lib. By adding usr/local/lib to LD_LIBRARY_PATH, the system loaded up the incompatible libcairo, instead of its regular one. The fix was ‘uninstalling’ all incompatible packages (libcairo and libpango in my case) from /usr/local/lib. I’ve also learnt that in Linux terminology uninstalling is the same as ‘rm -f’.”
I’m pleased to announce that we’re adding one more student to this summer’s team. Tony Balkissoon just finished an engineering degree at U of T; he has been very active on campus in efforts to stop the genocide in Darfur, and is heading to Harvard Law School in September. Thanks in part to support from Prof. Ron Deibert of the Citizen Lab, Tony will spend the summer writing student-friendly introductions to legal issues associated with software and the internet, including privacy, property rights, accessibility, and reverse engineering. I’ll blog his work here as it appears; we look forward to your comments on it.
Leslie Hawthorn posted some stats about female participation in Google’s Summer of Code yesterday. It’s a case of half-empty, half-full: only 4% of student participants are female, which is much less than the 28% often cited for the industry as a whole (based on data from the year 2000—I suspect today’s number would be lower). On the other hand, it’s double the 2% that was bandied about at OSCON’05, and many times higher than the estimate Michelle Levesque and I came up with in 2004.
…our community is passionately invested in getting more women into open source development. Each time I talk to members of our mentoring organizations, I consistently hear enthusiasm around having female students working with them. And where organizations haven’t worked with women in the program, they are actively seeking ideas on how to attract more women to their projects… We’d like to hear more from the community on this topic: how can more women be attracted to open source development?
If you have ideas—in particular, if you have ideas about why female participation in open source is so much lower than participation in the industry as a whole, and what can be done to correct that—please let her know.
Web site stats are fascinating (with a small ‘f’, anyway). Traffic to the Software Carpentry site was relatively stable in April, and looks to be on track for another good month in May:
Meanwhile, this blog seems to have about 250 regular readers, scattered fairly widely across the globe; another 100-150 people come and visit via search engines: