A degree in computing?

This is a re-publication of an essay I originally posted on a now defunct website in September 2004.

I’m obsessed with understanding the minor failures in my own university education, probably unreasonably so considering that I have two undergraduate degrees, good mental health and a debt to the Australian government that will buy them only one new low range car.

Nevertheless, there are a few striking things about a degree in computer science that I’ve learnt through experience, and thankfully sometimes through the experience of others, that I think are worth noting for the record. This essay is a guide for people considering starting a undergraduate (bachelor-level) computer science degree or computer science major. I’m going to lead with the negatives: I think people should think more carefully before starting computing degrees, and degrees in general for that matter. But as I don’t actually regret the degree, I will conclude with some positives.

Why you may not want to do a computer science or computing degree

You aren’t suited to university

By this, I basically mean that you don’t want a degree. Degrees are what universities think their purpose is. Degrees are annoying things to get. In most universities there’s a complex set of rules governing which subjects you have to take in which combinations, which subjects you can’t take, how many subjects you can take, what marks you have to get, and what level of courses you need to do. They almost invariably involve at least one time-serving course which is totally uninteresting to you, and one boring but difficult course which you need to put a lot of work into.

Once you jump all those hurdles they let you wear a silly hat.

Further, universities are geared towards students getting degrees. If you show signs of not being such, like repeatedly failing courses, or simply doing too many low level courses and not enough final year courses, they have a distressing tendency to try and throw you out.

Further, at least in Australia, you can get by without degrees in computing fields. Their official function is to act as a stepping stone into academia, or as a heuristic for employers to demonstrate that you are capable of completing a long, and more than somewhat arbitrary, list of tasks in order to achieve a goal (employers are in the long and arbitrary tasks business too). They also indicate a certain skill set. But they aren’t the only way to show that you have that skill set.

Larger organisations get a bit hung up on them. It can be difficult, for example, to get work visas to certain countries without a four year degree in a relevant field. As businesses get bigger, it tends to get more likely that "degree in relevant discipline" appears in the ‘mandatory requirements’ section of job ads too.

While failing to get a degree you wanted can be miserable, hanging around at university without much intention of getting a degree can be fun, especially in countries that have low tuition fees. My experience of people who do this is that they eventually get sucked into the degree mania and have some regrets, especially once their friends start graduating, but if you really want university without the degree I don’t have much more advice to give.

There’s good things about university too (later!) but if this description is making you grit your teeth and long to flee into a job, or possibly to the Himalayas for a good long hike, follow your dreams there instead.

You don’t like programming

To people who know about the content of most university computing courses, it will seem extremely strange that you want to do computer science at all. The reason is that university computing courses focus on one of two things: in the vast majority of cases, that is programming theory and practise with dashes of software engineering and a smidgen of computing theory (discrete mathematics, in other words); in a small minority of cases they concentrate on computing theory.

In short, if you are certain that you do not like computer programming, you should not do a computer science degree, with a few rare exceptions for people who like the mathematics rather than the programming and want to do a theoretical computing degree. Even in that case, check the program you’re entering thoroughly because almost all of them will have you programming much of the time. You might well be better off in a mathematics major.

If your bent is systems administration or other techie non-programming skills, you will also want to avoid most undergraduate courses, because they teach programming to the exclusion of what you’re interested in. There are a few exceptions to this, and you might find some interesting Masters courses, but be sceptical and enter programs only when you’re sure that you aren’t doing "programming with a dash of systems" when you want systems. It’s likely you could find relevant courses outside the undergraduate system, and it is worth considering skipping the whole thing and learning on the job.

In the, alas, most common case, where you have some idea that you might like to "work with computers" (or often, you would like to manage people who do), have no particular existing skill set above using your computer for email or gaming, but are certain that coding is not your thing, you don’t want to touch a computing degree. In the best case you’ll struggle through a semester or two, realise that it’s all programming and you hate it, and spend another semester or two establishing prerequisites in a different field. In the worst case you’ll push through three or four years wondering when you’re going to learn ‘industry skills’ (meaning management). You aren’t. You’re in a programming course. Definitely skip the whole thing. Do a little research and find a faculty or major that teaches the skills you want or the things you’re interested in.

There are a number of non-programming computing majors, normally called ‘IT’ or something similar (although not always, some ‘IT’ courses are also programming courses). These generally have varying amounts of ‘basic computing’ (using office products), system design, project management, database design, and business skills. Computer science students tend to look down on these courses, but the few people I know who’ve done them say that the management skills they teach can be worth it. The only thing I’d warn about if you’re thinking of one of these courses is checking whether you like programmers themselves. If you find them insufferable or laughable, you’re going to have a hard time managing them and it might not be worth training to do it.

You have no idea if you like programming, because you’ve never done it

I know several people who started university in this category, two of whom graduated from computer science with highest honours. Unlike loathing programming, it’s not a death-knell for your enjoyment of the course. In addition, at least in Australia, all computing degrees assume that you cannot program when you begin them (the University of Sydney claims that, except for a few very experienced students who earn excellent marks easily, the difference between the experienced and inexperienced in terms of marks is negligible after three months).

Nevertheless, before committing three or four years and a fair bit of money to a programming degree, you may want to get a basic idea of what it is you’re going to be doing with your time. There’s a few options: there are a lot of online programming tutorials these days and many free toolkits — a lot of your programming is going to be self-taught anyway, so you could start out that way. You could also take a summer course at a technical or community college. Which one you want to do may depend on your personality: as a beginner I spent a lot of time trying and failing to think of interesting practise projects, so I guess I was a course-type person.

Programming is difficult and frustrating initially, but allowing for that, having a little programming experience will help you decide whether you like it enough to spend years listening to people talk about nothing else.

You love programming and are very experienced

By this I don’t mean that you got high marks in high school computing courses (or at least, not that alone). People who can program to the extent that they get high marks in your average high school, but not a great deal more, will probably find computing degrees really useful: you will meet people more skilled than you; you will find many of the assignments at least somewhat challenging; and while you will probably begin to find the lecture courses dull, they won’t cause you to attempt to pound your lecturer’s head through the wall.

Even in this case, you will find the early stages, which are aimed at the non-programmers allowed into the course, quite frustrating. But it’s quite likely that you will learn a great deal in the later years of the course, from courses and especially from classmates. You might well emerge ready to program professionally. In case you can’t tell, this is the category I entered university in.

But if you’re experienced to the extent that you’ve written working 10 000 line (or much more) projects for fun, have programmed professionally, or have done extensive work with others, you are likely to find at least the first two years so insufferably tedious that you may well be tempted to turn violent. Anyone who is a major code contributor to a medium sized Open Source project almost certainly falls into this category.

In addition, you may not do very well. There’s a couple of reasons for this. First, it’s unlikely that you’re going to be doing programming exclusively. In most computing degrees, your first year will include mathematics courses, and depending on the institution, it will probably also include at least one business, engineering, or science course. Your programming experience will probably not help you pass these other courses — which is not to say that other abilities, such as good mathematics skills, writing skills, or a good memory won’t get you through them — and the mind-numbing simplicity of introductory programming risks convincing you that you can pass them as easily as you will programming.

Or will you? Mostly, yes, with blindingly good marks. But alas, programming courses will often involve just enough theory to trip you up if you aren’t interested in some of the theory, or neglect to flick through the textbook: you’ll code up a storm but be unable to remember precisely how pushdown automata work when it comes to the exam (unless you ever coded one of course!) This is sometimes more the case as the degree goes on.

Some people who are experienced programmers might prefer to do a related degree with new skills (like mechanical or electrical engineering); a theoretical degree with a lot of maths, since they’re less likely to have taught it to themselves already; or a completely new field, if they want an extended break from their programming. Others might skip the degree. Otherwise reconcile yourself to the tedium a bit and try and seek challenge in your fellow students and your teachers, not your courses themselves.

You have no academic interests aside from programming

As above, most university degrees require some semblance of balance in your courses for a few years until they finally let you geek out on an all computing extravaganza. Annoyingly, some of these courses will also stand in your way — in particular, failing maths may stop you proceeding in computing.

If you really cannot stand any of the other subjects that are likely to comprise your program (make sure you investigate what these are) or aren’t going to be able to pass them, you’re going to have a hell of a time getting to the interesting bits of computer science inside the university system.

I did a science degree with maths and computing, and an arts degree with linguistics and philosophy: the first is a fairly typical computing degree. Other common ones are engineering based courses, which will have a lot of maths and physics with the programming; and business based courses, which will have accounting and management, and sometimes a touch of maths, with the programming. Some universities are very flexible and will let you do, say, metaphysics and computing, others stick to traditional patterns. But at least in Australia, computing degrees without non-computing course components are rare.

Why you may, after all this, want to dance to the university tune

I think I was actually a fairly good candidate for undergraduate computer science. I have reasonable mathematical ability, I’m a better writer than the majority of my fellow students (this became relevant during the last year of my degree when I did a research project), and at the time I entered I had some programming ability but very little experience of projects that took more than three hours to complete.

I ended up getting a lot out of my computing degree, and in this section I’ll discuss some of the things you could get out of it.

You will meet other students

I actually think this is the single major reason you should consider undergraduate studies at all. University is an easy way to make friends. You will be exposed to a wide group of people who like you are confined to the campus much of the time. Making friends after university is harder because the range of people you meet daily falls and it’s hard to see a lot of them, especially in cities where you may live two hours drive from your colleagues and friends.

I have a typical geeky high school sob story, although it’s on the mild side because it didn’t involve being assaulted or attempting suicide, it just involved loneliness. I arrived at university more or less convinced that I was terminally unattractive to my peers.

After considerable time (I spent five years at university) I left with quite a large group of friends and acquaintances, an immeasurably improved set of social skills, and a much better self-image.

In computing, in particular, your peers will have a lot to teach you, assuming you find a good group of people. Computing students tend towards the obsessive and will spend a lot of time teaching themselves and each other all about their findings. It’s probably more the rule than the exception that you will learn more programming skills from your peers than from your teachers. (This doesn’t seem to be true in other science disciplines, and is only true in the humanities when your peers are exceptional.)

‘Networking’ deliberately is a bit yucky, but the natural process of meeting people with common interests and hanging out with them will introduce you to people who have a lot to teach you. If you end up getting a job through these people eventually, you’re in good company.

The course discipline can be useful

Computing courses will tend to set relatively fixed assignments that force you to practise programming skills, although some teachers are far better at this than others. At the university I went to, these assignments were also very open-ended, in that you spent about three days getting 80% of the marks and then for every mark after that the time you spent would increase. While this was both good and bad (some students deliberately chose part time studies in order to improve their marks at the cost of an extra year’s study) it did force me to practice.

If you don’t, early on, get sucked into an intense group of hardworking programmers (and talented programmers can be among the world’s best procrastinators) the discipline of the coursework will improve your programming skills. In my case, and I only really did hobbyist programming in the final two years, the early improvement was huge.

You have the chance to study other things

A lot of people hate the elective requirements of some degrees, particularly if essay writing and mathematics don’t come easily to them (you’ll likely need one or the other), but undergraduate studies are one of the very few opportunities you’ll have to learn about a lot of subjects from experts in the field, some of whom will be marvellous teachers. In some cases — mathematics and science particularly — it’s very hard to learn about the field later without course discipline to push you along, in other cases it might just expose you to something you can follow up at leisure.

I gained two major interests from non-computing study at university: language and modern history. One is likely to be part of my career path, the other is filling my bookshelves. I wouldn’t be without them.

You’ll get the piece of paper

In most ways it’s an arbitrary measure of ability to finish a regimented program, but for some career paths you need it, and it might well make you happy to have it. I quite like having mine, I even gamed the system for a fifth major. In hindsight I wouldn’t do a five-year pre-honours program again (and I wouldn’t do high level maths after second year because I wasn’t committed enough to it) but I’m pretty happy about it overall.