Girls, beer and C++: How to choose the right Comp-Sci degree for you
You're just a child. But trust me, I'm a headhunter
Feature You choose your degree when you’re still a child, even though at 16 or 17 you may not feel like one. When I look back at some of my own teenage decisions, I shudder, and you will too when you think back to your younger years. But perhaps, armed with the advice below, you can avoid the common pitfalls and stumbling blocks on the road to becoming a successful computer scientist.
Of course, I assume that's the field you've chosen to enter. And my advice is really no more than an algorithm laced with some heuristics, but at least I've optimised it with respect to career value.
Don't forget, you’re spending real money - but on what exactly?
The universities want your fees and this means they are selling to you. Apply the same level of scepticism to their brochures and statements that you would to any other marketing material. For example, note the “diversity” of people in the pictures; trust me when I say the number of women studying comp sci is not a tenth of the number these photos suggest. Honesty is not the prime directive here.
You haven’t done computer science yet
The word “heuristics” may be new to you because your "computer science" A level lacked any depth and you haven't picked up enough theory off your own back: proper grown-up computer science is maths and programming, so your degree course may come as a shock to you. I feel stupid writing this, but some of the second and third-tier unis I talked to reported how kids start comp-sci studies believing they can dodge the tricky stuff in the same way I dodged most of the hardware bits in my degree - and it ends badly.
If you decided not to do that cushy comp-sci A level because it was a load of crap, that’s evidence that you’re smart enough to do proper computer science well; throwing yourself into A level maths instead was far better preparation.
My day job is as a City headhunter and so some people care about what I think about universities.
I once wrote that I didn’t regard Reading as a real university - not merely “not good” - because it had given up trying to have a physics department and given the questionable things being done by its maths and computing departments. In short, I was scathing, and in return I got a torrent of hate mail from its staff. They told me, in effect, “it’s hard to run a physics department, you know”, and since I did know, their poorly written and badly spelled whining solidified my contempt for what I regard as little better than a teacher-training college.
That wasn’t very fair of me, but it illustrates the patchy way that we decision makers arrive at our prejudices on what we think of as a good university.
Often that is formed by our experience of their graduates, which is both backward looking and based on a low number of data points. That is our fault, but it is your problem. My own sampling has led me to be wary of those with graduate qualifications in IT security, with the glaring exception of Royal Holloway which in general is a respectable second-tier place; it seems to output rather better infosec pros than elsewhere. Note that I say “output” because top places suck in smart kids, so it is harder to measure the value added by the course and that is a big part of what you are paying for.
I’ve met a valid sample of City University graduates and never met one who wasn’t competent, whereas the opposite applies to King's College London where the strange things their grads have said to me are part of some of my best pub stories: for instance, “I bought a Mac because I wanted a stable platform to write my essays.” Essays? In a CS degree? Maybe one, but plural?
Also why “stable”? If you haven’t utterly trashed your system multiple times in your comp-sci degree you’re just an arts grad who didn’t get laid. The only valid use of a stable system is to break other systems. Warwick and Edinburgh are also top-tier places no matter what your careers teacher says. They are on the very short list I have of UK universities that high-end employers mention by name, although the London School of Economics' reputation puts it on that list in spite of the fact that its graduates too often look better on paper than in reality.
It’s not a purely programming degree
There’s no UK degree course that I really regard as a software engineering degree, at least not yet. Having talked to comp-sci department staff, it appears they’ve woken up to the demand for degrees focussed on programming. Quite rightly they are resistant to the idea, since firstly they don’t have the background to teach software engineering well, and secondly they are computer scientists; computer science is what they feel they should do. But the fees system is pushing them towards more practical syllabuses because students will give them money to teach it. I’m unsure if this is good: students will push for short-term things that look cool but will burn out relatively quickly, leaving them with zero theory.
C and C++
A marker for a serious comp-sci degree is that C and C++ classes are mandatory, signalling that the department heads don’t believe their students are too stupid to learn those programming languages. When asking around as to why not all universities teach the language used to write serious software (Windows, Oracle, Linux, Firefox, Excel, HFT trading systems, the London Stock Exchange, your TV's firmware, the code churning out much of the CGI in films), the reply was that “it’s too hard”.
That’s a rational response. I teach C++ and the course has lectures that include slides headed “Cruel and Unusual Pointers”, “Why the hell did it just do that?”, and “What do these syntax errors really mean?”. Some compilers will even abuse you with “useless code at line N”, and where just declaring a variable can convince you that the compiler is a malicious artificial intelligence.
The question you must ask yourself is will your chosen course teach you the language the smart kids will learn? That’s one of the most important questions you will have to consider to date. Success and happiness comes from doing things better than most other people; you don’t need to be top, but you need to move towards areas where you can compete, which is why there are “business computing” degrees. I very rarely see graduates of this in top jobs, but being able to talk the talk of business and getting a good degree grade can get you into places and roles that a mediocre comp-sci degree would bounce off.
Given finite teaching time, there is a trade off between topics of long-term value - such as how operating systems and languages work at a deep level - and things that will help you get your first job, such as knowing the syntax of a Java library call. So it is tempting to choose your course based upon things that you see in job adverts.
The first problem is that you will enter the jobs market three to five years from now and it will be different. A year and a half ago I spoke of the Java market getting near its peak. The feedback I now get is that it has gone past it. There are still many jobs there, but the supply keeps going up while the demand is finite and when you graduate you may well be part of the excess supply. I’ve been one of those people; trust me, it is not fun.
In fact some of my career decisions have been so bad that The Register has paid me to write them up, and yet 30 years after graduating, comp-sci still makes money for me. And that's thanks to Queen Mary University of London, my alma mater, teaching me what is really going on at a deep level in a computer system. If you fully understand your speciality you can weather the storms that will hit your career. Be clear that I am saying “will” not “may”. Unless you’re excellent or lucky (or hopelessly crap and unlucky) your career is a 40 to 50-year gig, and that means the tech will change and when you find your skills out of fashion you will have to shift fast.
That means not just learning the syntax of Java or C++, but why languages work the way they do, why CSMA-based networks can suffer from packet storms and be able to resolve complex logic without just bodging it until the right result comes out.
I graduated in 1984. At that time I recall saying bullshit like “you couldn’t do that because it would take a 100Mhz processor and hundreds of meg of RAM”, and that mainframes were dinosaurs waiting for the meteor. The mainframe is back, and spun as the cloud, and the pizza-priced Raspberry Pi shows my young and stupid views for what they were.
I was taught Pascal. Almost no one outside the British Computer Society and AQA exam board thinks that is in any way useful, but being taught the theory of languages, data integrity and how operating systems work meant that as fashions and technology changed, I could keep up with less pain. Machine architectures are changing from monolithic Intel-style CPUs with complex instruction sets to hordes of more nimble ARMs, and in turn they will be replaced by… something else. I don’t know what, maybe quantum computers or adaptive FPGAs or optical circuitry, and although I’m vague about what will crush the current new wave, I have no doubt the wave will hit your career and many of you won’t like it one bit.
In the shadow of uncertainty, you just have to place your bets and hope but you do have to bet or quit the game. At Queen Mary, Prof George Couloris found this odd bit of software developed at a phone company and thought it was interesting enough to show to his students; it was a product so weird that when, as an undergrad, I checked out the jobs that required experience in it, I found exactly one opening - not in industry but in another college. This weird new software was Unix, aided and abetted by C, and formed the basis of some decent careers for many of us. They also did CAFS which was deeply cool and never got anywhere and AI, which I took a serious interest in, but which has failed to deliver either the commercial or career benefits that any of us hoped for.
Since I, from the incredibly towering heights of being a writer for The Register, can’t pick the next technology edge, I shall assume you can’t either; the important thing to grasp, therefore, is that there will be several optional modules on the course for you to pick if you think you've found the next leading edge.