Just before graduating in 2007 my School (The University of Michigan's School of Information, hereafter "SI") completed a search for a new Dean. Their choice, Martha Pollack, has a background in computer science and is taking SI down a more technically oriented path than it's traditionally walked before. Under Pollack all students are introduced to basic programming concepts in their first year of the program. Those who don't know much about SI won't realize what a big deal this is. Just over 10 years ago, SI was born from the University's Library school and is still the unit responsible for turning out the next generation of trained librarians. In fact, every student regardless of specialization, gets ALA certification (meaning, yes, I am certified librarian. Shhhh!).
For every ten UEX-, UI-, IA-ers leaving SI who also happen to be certified librarians there is maybe one librarian with exposure to programming. The decision to include programming as basic topic for all information professionals flips this statistic on its head. Your next librarian will also be a programmer.
Clearly, I agree with this move. I've often been seen about town in my rags, pulling at my ratty hair, ranting about how "lack of programming experience in this day and age basically a form of illiteracy." I don't expect everyone to be able to sit down and pen the next digg or facebook, just like I don't expect everyone to be able to craft another Ulysses or Brave New World. I do expect an educated person to be able to convert the little squiggles on the screen -or page- into meaning. Not just the concepts they represent, but to pluck out themes and patterns, to think critically about which decisions were made and why.
Gaining this literacy was difficult even for the more technical folks at SI. The School's programming offerings were all over the map when I started my degree: a web programming course (PHP), a database class (MySQL and your web language of choice), a straight programming course (Java), a course about content management systems (Drupal), a course about interactive sites (Flash). Worse, these classes were all survey courses and had no prerequisites (not even each other). Each course had to assume no prior knowledge of any topic; the amount of re-teaching was huge.
Introducing basic programming as a curriculum-wide skill requires a tighter integration between these topics, which typically means blessing a single language. SI's language choice is a topic near and dear to my heart. In Fall 2005 I was an unofficial pedagogical observer and sometimes tutor in the web programming course (taught in PHP). For Fall 2006 I convinced the faculty member to switch to Ruby on Rails and let me lecture and run labs. I felt this was a much better way to coherently teach programming (since 'PHP isn't so much a language as a random collection of arbitrary stuff').
This was a major victory: the class was heading towards Drupal (one faculty member is very pro-Drupal, despite Drupal encapsulating development techniques you aren't likely to find on this side of 1999). There was also a hope that the basic programming course would would move away from Java and towards Ruby. In Java, we found, people were spending too much time learning Java and not enough time learning programming.
I lectured and TA'ed again in Winter 2007 before graduating and heading off to the startup world for a bit. The next two semesters the Rails course was taught by new SI faculty (but long-time U community member) Chuck Severance.
Chuck is also involved in the new Informatics undergraduate program being offered at the U. This new program is completely in line with my opinions on programming and information literacy and includes a one semester programming course aimed at non-CS majors. There was a lot of discussion last September about which language would be best to adopt for this course. I weighed in for Ruby at a time when the possibly languages were, in order of committee preference, Perl, Python, and Ruby.
Eventually Python was picked for the undergraduate course and for some of CS courses in the future as well. I recognized this, rightly, as the writing on the wall for Ruby at the School of Information. Sure enough, Python was picked as the language all incoming masters students will learn in their first semester and the language for the web programming course (combined with Google's app engine).
The question I've been asked is: was this the right decision?
Even as an ardent rubyist, I have to say: "For SI, yes, yes it was."
I like Ruby. I like Python too, but I find Ruby cleaner, clearer, more internally consistent and delightful to work with. I think Ruby would have made a better language to teach first time programmers except for one thing: SI was looking for a language with more general use in the world because its graduates end up in all sorts of different places. Python has had mindshare for longer than Ruby and has made major headway into spaces like bio-sciences and law. You're more likely to run into it after graduation, which probably makes it a marginally better language based on SI's criteria. An SI graduate today is unlikely to run into Ruby professionally.
Granted, this is based on where SI sends graduates today. A few kids go to Apple/Google/Yahoo/Microsoft every year, but most end up in medium-sized, "middle tier" technology spaces. I don't say that to disparage those places or students who work there. They're where most of the work in the industry happens. But middle-tier places are more interested in continuing their existing business with existing practices and less interested in experimenting with the new. The people there do great work, but it's not the work that changes the industry.
I believe SI graduates should be changing the industry, not just working in it.
This makes me wish SI had been a little more forward thinking when selecting its criteria for a language. Although you won't find Ruby at many middle-tier companies or research labs, it's definitely the darling of the startup world these days. Not that startups can't or don't work in Python (or even PHP or .NET!), but Ruby is part of a disproportionate number of these young companies when compared to its overall usage. Startups are where the interesting new things happen, where experimentation with new ideas is rampant. It's the reason large companies often acquire instead of building: let new products experiment with crazy ideas and prove themselves before snatching them up and you'll never have to worry about releasing a dud.
Ruby's presence is the experimental startup world gives it a palpable influence on the general programming community these days. Chances are that even Python programmers are using practices that, while not created in the rubyverse, only became mainstream and appeared popularly in Python after passing through a Ruby filter.
Quick: name five popular web frameworks before Rails. Chances are, you can't ("Django, TurborGears, WebObjects... um... " one friend twittered). In a post-Rails world there are dozens people can think of, all strongly influenced by Rails. I'm not claiming Rails was the first to market in this area, but until Rails the idea didn't have the mindshare it does now.
The same is true for other important development practices: MVC on the web, BDD/specs, automated deployment, DSLs, REST, generators, the list goes on. Not created in Ruby world, but not mainstream in the programming community until passing through Ruby and picking up enthusiasm from those folks. When a community as mainstream as Microsoft .NET developers starts porting libraries from your community (NHaml and Castle ActiveRecord) it says something.
Even where Ruby sucks big time it spurs innovation. How long did Apache dominate because of mod-php? Ruby apps running through Apache sucked big time (until recently) and led to a surge of attention on lighttpd, nginx, and other lightweight web servers.
These emerging patterns of practice aren't important just for the CS-types. They influence how information professionals will work with and design information systems in the future. Picking Ruby would signal that SI is interested in preparing their students for how the information world is evolving, in this very moment, at the technical level. I Imagine a graduating class prepared to both work with the technical people in the information field and help evolve practices to better match modern information systems.
Choosing Ruby would signal SI's desire for graduates to wind up at the kind of places that use Ruby more often than the places that use Python. Right now I'd agree that Python is used in more places, but Ruby is used in more of the important places. I don't see this trend changing.
I think students recognize this trend too. I've met a lot of the incoming HCI students over the past two weeks and many expressed disappointment that the web course was no longer in Rails. Most of them had "learn Rails" on their list of important career enhancers and the lack of an official course had a few of them miffed. My guess is these folks will go on to learn Rails anyway (possibly with mentoring by my company).
Of course, giving students exposure to any modern, dynamic language is an improvement and ultimately the specific language used is irrelevant. As fellow alum Ryan Cannon quipped "the idea that Python will be more 'useful' is like saying that 19th Century American Lit will be more useful to a journalist than British lit because they'll probably be writing in America."
Except, man, those Brits are just up to cooler things these days.
Update: Chuck responds.