The Fox and the Computer Science Degree

It was not ripe anyway

As of recent I have been noticing more and more articles and blogs taking cheap shots at Computer Science degrees in general, with claims ranging from mild disagreement to straight dissing.

I am a freshly graduated Computer Science Major and I was fairly satisfied in what I ended up gaining from the experience. Partly because of this, every time I stumble upon one of those articles I am compelled to read it to understand if there is some valuable criticism; yet, I never read anything that even makes sense in this regard.

For the sake of example, these are some of the articles I am referring to.

Long story short, I have witnessed only one motive to complain about academic Computer Science courses: economic interest. Blogs that claim degrees are useless or even harmful always do so to push their own online courses, resource subscription or coding bootcamps.

To some extent, there is nothing wrong with this. There are some fair points: the idea that you need a degree to work in tech fields is, as a general rule, mistaken. A bootcamp, practical experience or even a self-teaching period can and will score you most jobs — “most” being the operative word.

As one would expect the job offers you can aim for gets better and better with your resume, and to think that a degree will be regarded less than an online course is simply asinine. What can happen, however, is that employers will prefer searching for less prepared candidates when offering less skilled job positions: if you need a Java frontend programmer or a PHP web developer a Master in CS is overkill. Then again, why would you want such jobs with a Master in Computer Science?

A Master’s degree will get you a better salary, no matter which field you’re working in.

You can learn how to build C++ applications in a matter of days by yourself, and if you are content with being a junior developer there is no point in spending thousands of Euros and several years of academic preparation. However, the moment you start shooting for higher wages, better hours and — I cannot stress this enough — a job of your liking, lacking a degree will most likely make your resume fall short on most applications.

Hey, but what about this guy? He prepared for an interview for Google/Apple/Facebook/Microsoft/Amazon and he got a dream job without a degree!

Ah, yes. Self-built successful life stories, proof of the uselessness of academic studies. They bring us smoothly to my second point.

First things first, stories are just that: stories. Hearing that John Doe became a millionaire with his own devices after dropping out of school is nice and all, but proves nothing. People always bring up examples like Bill Gates, Mark Zuckerberg and Steve Jobs, which are first and foremost stories of successful businessmen, not software engineers; even if they were, an handful of examples mean nothing in the bigger picture. On average (which is the context you should really care for) degrees score you better jobs, there is no way around that.

There is also another detail to consider. Many of the quoted titles promise that you can get anywhere without a degree. After reading them, I can say I wholeheartedly agree: the point here is the how.

It’s simple, really. A CS bachelor’s degree will cost you a lot in time, money and effort, but you can get the same results without it! How? By investing roughly the same amount of time, money and effort elsewhere.

To ace a Google interview you will need to build up a portfolio of projects, learn in great detail algorithm theory and study all the most common problem you are going to face. Doing it properly from scratch (maybe while handling another job) will probably take 1–2 years anyway, and failing will mean having thrown that time and effort in the thrash. A common CS course will cover most of those topics, so it can take the preparation time down to a few months; plus, at the end of it you are left with something of worth regardless.

On the other hand, a successful personal project will go a long way in making your resume shine — that should be obvious. The problem is, how do you know your work will, indeed, be successful? If you knew beforehand that open source library of yours will become the next big thing it would be easy to drop everything to work on it, but you don’t.

gcemetery.co is a website that collects all Google-backed projects that died without breaking the barrier of success. If you have a personal project, chances are it will fail: it’s cynism, it’s statistics.

We always hear about Facebook, Whatsapp, the Linux kernel and so on: but for every winning horse there are thousands of dead projects that siphoned time and money from their authors without ever paying off. For this reason I find the suggestion to “start working on something” to put on your resume instead of other (more reliable) forms of recognition simply idiotic. One does not pull a promising concept out of his/her hat like a magician, and if you are able to, well, you really don’t need resume suggestions in the first place.

Up until now I’ve talked in terms of resume value and job interviews, but this means forgetting an essential aspect of this discussion: actual skills and competence.

Since things have always ran smoothly for me I don’t know much about the job market. I have never had to send my resume anywhere or taken an interview. Because of that I have always assumed my curriculum played a minor part; what really matters is what I am able to do. This is where a CS course really shines, and where its detractors are fundamentally wrong: the discussion should not be on whether it looks good on your resume, but instead about what skills you get out of it.

Someone might object that getting a job is the most important goal and that I’m being idealistic; that someone may be right, but he/she would not be a Computer Scientist. I’m sure of this because the smallest amount of preparation in the software field will ensure you an endless stream of job offers; degree or not, if you can program you need not to wander around begging for employment.

Thus, focusing of a shiny resume instead of actual skills is useless in tech fields. Meanwhile this article goes as far as suggesting that social media buzz is more important than a degree, which I see as a borderline unethical piece of advice.

Another connection I see way too many times is between academic studies and detachment from reality. This stems from the presence in most Computer Science (or any University-level course, really) courses of a good measure of theory in study subjects. To boil it down:

Theory is hard and boring with all those books ‘n stuff, right? Don’t tell me I have to study maths again! That’s useless, I prefer hands-on practice that I will actually use in my career!

This idea, so vehemently conveyed by some, is fundamentally wrong. Typically those who push it never followed any academic course, which makes their misunderstanding unsurprising. The best configuration of CS degrees will have a combination of both practice and theory: while the former is necessary to actually be able to operate, the latter grants the deeper understanding needed to yield high quality results.

There is plenty of hands-on work in a CS course: when I was not experimenting on my own out of curiosity I was busy following at least two major practical projects per semester, either alone or in a group.

Of course, you don’t need to know how a compiler works to write a C or Java program; when faced with a performance issue or nasty bug, however, chances are a little insight on how your machine actually works will help in overcoming it. This has been true for me countless times.

The wide range of topics I studied during my degree are like a vast array of professional tools: a bunch of them are on top of my toolbox because I use them daily, while most of the others are collecting dust beneath. When a new challenge present itself, however, I am confident to always find the right tool after a quick search.

Being an embedded developer most of my job involves C programming: for that, my degree makes me overqualified. But when presented with the opportunity it was my academic formation that allowed me to try Rust as a new programming language for microcontrollers.

Again, this whole argument loses meaning if your job is restricted to a single field: there is no use for embedded design if your daily routine comprises only Python backend web-development. In this case a degree is, indeed, useless.

After reading what I had to say one might ask why I’m so salty about all of these articles claiming CS degrees are universally useless.

For one, they are misleading and ill-advised. I studied 5 years in a computer science course and it was an awesome experience for me. Seeing someone taking shots at it without actually knowing anything about it annoys me. When I was deciding what to do after high school I was confused for a certain period, and maybe reading one of those article would not have helped me in making the right choices.

In the end however, what I have to say is of little importance. The most crucial point of my argument is that Computer Science degree matter for everyone in real life, you don’t have to take my word for it. CS bachelor’s degrees have the highest starting salary among all other choices and impressive average values as well.

The fact that the tech industry has enough room for self taught professionals doesn’t change that head hunters will prize degrees with higher salaries and chances.

To reiterate again, a Computer Science degree is not necessary but very welcome. On the other hand, you might want to think twice before paying a four figure price for that online course about the flavor-of-the-month Javascript framework.

Computer Science Master from Alma Mater Studiorum, Bologna; interested in a wide range of topics, from functional programming to embedded systems.