Category Archives: School

More Universities Should Shut Down Their Computer Science Programs

This may get me in an assload of trouble but I think it needs to be said. Following the announced restructuring of the University of Florida CS program and this classic quote about how Yale shouldn’t be in the business of teaching “trade skills” (meaning, applied software engineering), I’m going to argue that more (not all, but more) academic computer science programs should be shut down or reorganized. Here’s my rationale:

  1. Most undergraduates and professionals actually want to learn applied software engineering, not “computer science”. Most companies want to hire college graduates who know applied software engineering. But most university CS programs don’t actually teach applied software engineering. This isn’t to say that CS isn’t useful or valuable (even to someone who goes on to become an applied software engineer). But the majority of university CS programs are oriented to training undergraduates to become either systems programmers or academic computer scientists. I’m going to go out on a limb and say this isn’t what most 18-year-olds who enter undergraduate CS programs actually want to do. And I’m certain that the ratio of the demand for software engineers to systems programmers in industry is on the order of 100:1 (maybe even 1000:1).
  2. University undergraduates are not discriminating consumers of education. This has a lot to do with the “halo factor” of schools that are perceived to be elite. If you get into the University of Michigan (which has an elite CS program) and you spend forty hours coding in Java while you get your four-year degree, you’re probably feeling pretty good about yourself, at least until you get your first job interview after graduation and they realize you can’t actually code. But if you’re in a CS program that happens to be awful, there’s no way you’d know it as an 20-year-old undergrad. This means that consumers of the resource (which in an economy usually punish substandard products by taking their business elsewhere) are really a captive audience. This is one big reason why all universities are slow to adapt and reform in general.
  3. It should not be necessary for two universities located within commuting distance of each other to have the same academic department (this goes for any department, including English Literature as well as CS). To put this another way, wouldn’t it make more sense for UCLA and Cal State LA to have a single, combined computer science program that’s among the best in the country, instead of two mediocre computer science programs? (The city of Phoenix doesn’t have four major league baseball teams for the same reason.)
  4. Applied software engineering is a discipline that lends itself to being effectively taught online. There’s no reason to suffer through a mediocre or outdated CS program when lots of good online courses are available. If you’re looking to actually learn something (instead of just getting your ticket punched) you should be able to pick from whichever course best suits your learning objectives, even if that course isn’t available at your school.
  5. Most university computer courses simply aren’t that good if your goal is to get a job doing applied software engineering. This is because the Ph.Ds who are teaching in these programs generally got their degrees from five to ten years ago at a minimum, when the tools and tactics for software engineering were very different. The industry simply changes faster than academia. Most (not all, but most) universities just can’t keep up with this pace of change using the standard administrative playbook. This isn’t a criticism of the smart, hard-working folks who work in our CS departments; it’s a criticism of the way their departments are organized.
  6. University academic departments in general should have limited charters and should be reorganized frequently. (Again, not just CS departments, but all departments.) I spent nearly all of my undergraduate career working in academic administration, and I can say that academic departments exist mostly to protect resources (mostly money and people). They don’t really exist to serve students. One good example is cited in an awesome book on educational reform called Crisis on Campus by Columbia professor Mark Taylor: one of the most pressing problems that humanity has today is obtaining clean drinking water. Yet no university has a Department of Water. Why is this? Because campuses are an endless successions of zero-sum games: the formation of a new department necessarily means that resources must be taken away from existing departments, so existing departments viciously defend the status quo, even when that doesn’t align with reality. Computer science education has not been in alignment with reality in a long, long time.

I’m going to pre-empt the inevitable Hacker News countertrolling by responding in advance to the arguments that always come up when I talk about the way that software engineers are trained:

  1. You need to have a good basis in algorithms and higher math to be successful as a software engineer, and computer science provides that. That’s probably true for systems programmers. It’s not really true for the remaining 99% of software engineers, the vast majority of which will never do pointer arithmetic and shouldn’t really have to. (If you accept this argument, then you must also accept the notion that all plumbers must have the ability to smelt copper and forge their own pipes, because how could you possibly lay pipes effectively without having ever created one with your bare hands from elemental materials?) Otherwise, you’re just enforcing the priesthood of the technologist, which is not a good thing for the profession or for society.
  2. I’m a systems programmer and/or a CS major and your post makes me confused, sad, or angry. It’s great that you’re a systems programmer and/or a CS major; I value your service to humanity. But this isn’t really about you. This is more a criticism of university administration than the relative worth of systems programmers.
  3. Coders should learn by coding, not sitting in classrooms. I’m actually not a big fan of classrooms either, but this unfortunate argument is like an abused child who boasts about how a lifetime of beatings was responsible for their good manners and generally pleasant demeanor. The state of software engineering education today is terrible, so it’s no wonder that a lot of good coders are forced to become autodidacts. But learning it on your own isn’t the best or most efficient way to do it. Saying you learned how to code on your own isn’t an indictment of the discipline of teaching software engineering; it more likely indicates that the quality or quantity of software engineering instruction isn’t what it should be. Which leads us to…
  4. You have a dog in this hunt. Yes, of course. I’ve taken coding courses in CS departments at three different US colleges. I’ve taught coding at the university level as well. I started CodeLesson because I wanted to provide awesome, up-to-date instructor-led coding courses, since a lot of universities and businesses aren’t providing this today.

Soon You People Will Be Calling Me Master

Today I got word that I’ve been formally admitted to the Master’s program in Computer Science at Colorado State University.

This program leads to the Master of Computer Science degree, which is a terminal, professional degree (as opposed to a research-oriented degree). Think of what I’m doing as the geek analog to an MBA.

I’ve actually been taking courses in the program since last year (which they helpfully allow students to do before they’ve been formally admitted to the program). Being able to take courses on a trial basis was vital for me since it helped verify that the material is at a level I can handle, although I’m carefully strategizing to avoid a few courses in the curriculum that involve a lot of crazy higher math. I’m a somewhat competent algebraist, but my last formal math course was in tenth grade.

The most common reaction I’ve gotten to this was “Why do you need to take more computer courses? You teach computer courses. You’re like mister software.” The truth of it is that there’s always more to learn no matter how much of a ninja you are (which is one reason why I love the field), but there’s a lot of academic CS I didn’t get in my undergrad years since I only took a few CS courses as electives (my undergraduate degree is in English). And although I’ve been doing technology teaching in various corporate settings since I was in my 20s, I want to open the door to potentially do more kinds of teaching later in my career, and having a Master’s would be a prerequisite for some of that.

A note to panicked clients and co-workers: None of this will change my work status or my city of residence; the Colorado State MCS program is all done online and I will be doing all of my coursework in my off-hours, mostly in my underpants. My plan is to progress through the program as slowly as humanly possible, taking a single course per semester until my planned completion in May 2013.

Building the Virtual Academic Computer Lab

I’m taking a few computer science courses this year, partly for fun and partly to backfill some of my skills. I’m almost completely self-taught as a programmer, and while I’ve been coding in various capacities for nearly 20 years now, I have had almost no exposure to academic computer science and very little experience with the languages that are principally used for teaching these days (C++ and Java). So I’m learning both of those languages simultaneously to get them out of the way. (As I’ve mentioned here before, I’m also teaching an online introductory web development class for University of Victoria that starts next month, and taking these classes now is a way to get the teaching part of my brain working.)

Figuring out how to optimize the process whereby a developer starts using a given technology is a big part of my business, so I’m carefully studying the way that academic programs get student programmers going in a computer science course. As you might expect, there’s a lot to contend with, and even on a good day things are pretty messy. You’ve got ten different types of students coming in with at least three or four different types of computers and operating systems. Once you figure that out, you need to figure out how to get languages, tools, and database servers installed on your computer. The information technology management challenge is steep, and there’s a chicken-and-egg problem at work here: students can’t set up a development environment until they learn how to be developers, but they can’t learn how to be developers until they’ve set up a development environment.

When I was an undergrad starting in the mid-80s, most people had to go to the computer lab to get their work done. I had my own home computer to do school work and work-work on, but I was almost totally on my own when it came to figuring stuff out, and because there was no dial-up internet back then, I still found myself having to schlep into the computer lab and figure out XENIX to test and turn in assignments. That crummy logistical experience turned me off to the whole notion of academic computer science for many years.

The classes I’m taking this semester each devote a good week or two (out of an 18-week term) just to getting students ramped up. That means that almost 10% of the class is devoted to preliminaries. There is lot to do: you have to establish an identity on the college’s server, log in and figure out various unix commands and compiler options, as well as install a complete development environment on your own PC for development and testing. This kind of thing is not a challenge for a professional developer, and everybody should certainly learn how to do it, but a lot of the people in these classes are teenagers with little more than advanced browsing skills; it may not be the case that week 1 of Introduction to Programming is the right context for these kids doing this kind of activity. It can’t help their desire to learn to have to go through a couple of weeks of fiddling with command-line parameters to get stuff to work, and they can certainly figure out the details in a system administration class to be taken after they’ve gotten “hello, world” working.

It seems like this process could be significantly streamlined if schools would make a standard, pre-configured machine image available to students that they could then download and use for their classes. They could use something like the free VMWare Player product to put together an operating system and development environment that students could download for free. Virtualizing the development environment has other benefits to this as well — for example, if a student were experimenting and did something to mess up their computer, they could simply blow away the VM and re-download it. So not only would this make the first weeks of an undergraduate CS class go faster, it would also cut down on calls to the campus support desk, and probably save a bunch of money.

Sort of makes you wish you were autistic

Link: Reaching an Autistic Teenager

“The group turned to registering for spring classes. In addition to biology, algebra 2/trigonometry, English literature and U.S. history, there were the electives: Dragon Lore, Comic Books, How to Shop for Bargains and the History of Snack Food. Past electives included All About Pirates, Spy Technology, Ping-Pong, Dog Obedience, Breaking World Records, Unusual Foods and Taking Things Apart. (‘I just wish they’d come up with a second-quarter class, Putting the Things Back Together,’ Nelson told me.)

“‘I knew it!’ Edwick complained, mashing about on the beanbag chair. He was disappointed because no one picked the elective he’d proposed: the History of Meat.”

In British Library Reading Rooms, Flirting and Even Giggling

Link: Shh! In British Library Reading Rooms, Flirting and Even Giggling – New York Times

Researchers have been grousing about the boisterous atmosphere and crowded conditions at the British Library for years. But the dispute — a philosophical battle, really, over who should be allowed access to a great national library — spilled out in public last week when The Times of London published an article quoting various distinguished figures complaining about the out-of-control mood over spring break.

The article described how the author Lady Antonia Fraser had been obliged to wait for 20 minutes in freezing weather just to enter the building, and another 20 minutes to leave her coat at the mandatory check-in desk.

It described how another writer, Christopher Hawtree, had been “forced to perch on a windowsill” because he could not get a desk.

To my way of thinking this has far less to do with British schoolgirls annoying people by giggling in a hallowed institution of learning and far more to do with the way that academics seek to impose their mores on students. It is a fact today that most students have mobile phones and a lot of them have laptops. Would it be unreasonable to adapt to this? It seems natural that the “net native” generation would turn to collaboration more readily than previous generations (and why is this necessarily a bad thing?). The problem isn’t these boisterous kids, it’s that our academic institutions (once again) haven’t caught up to the way that people want to learn, communicate and collaborate. The institution of the library clearly isn’t serving these students’ needs. That doesn’t make it automatically the students’ fault; it may not even be Lady Antonia Frasier’s fault. It seems more likely that we are actually in need of a new kind of institution, one with some aspects of a library but without its monastery-esque structure and mindless bureaucracy.

I’m running into this kind of thing myself as I take a community college class this semester (which I know I haven’t mentioned here yet — I’m planning on saying a lot more about this once the semester is over). Suffice it to say that when you see a huge sign outside a campus media center that says NO COMPUTERS ALLOWED and doesn’t permit students to photocopy out-of-print texts under the principle of academic fair use, there’s something fishy at work there — it certainly isn’t the interests of students that are being served.