Why computer scientists can't program

and it doesn't matter

12.02.2016

Don't trying to write a rant, but I have some feelings regarding software development skills and a computer science degree. But first, some common misconceptions:

misconceptions about computer science

Computer scientists can program. This expression is very subjective and can be compared to the following analogy — many people can write, but only a handful of books of those people are worth reading in regards to writing style and storyline. Sure, they can read the K&R book and write some crazy code using scanf (if you don't know why this is a bad idea, read e.g. this). But you don't want those people to build something serious, e.g. a pacemaker or a X-ray unit. They're more often than not scientists, not engineers.

Computer science is a discrete science. In university, they abstract so many things away that you can lose the ground. This feeling stems from my assumption that computer science is basically complementary science and can't exist for itself — you can see it either from a mathematical perspective or you can view it from an engineers' point of view, but from both sides it is not possible to isolate computer science completely from mathematics or the problem domain you want to solve using software engineering.
I think that all computer science professors are aware of this fact and many of my professors graduated in mathematics. But due to this bias it could happen that mathematical models become more important than the craft itself, which means it exists only for itself and not the problems being solved. That means we're architects learning to do structural engineering calculations but never built even exterior walls. I don't think it is bad to learn the fundamentals and the theoretical knowledge, but I think we should also focus on modern software engineering techniques — setting up a svn server and calling it a day isn't going to help this situation.
Relevant to the first misconception: you definitely want people who know the theory in your team to make sure that your pacemaker is logically correct. But you also definitely want experienced programmers to actually implement those ideas.

it can be that you really want to become a developer rather than a computer scientist

If you like to build and program apps, love to play around with an Arduino or a Raspberry Pi or just enjoy building websites, it could be that you're not the type of human who enjoys to develop new algorithms for the next generation of artificial intelligence. And this is absolutely fine.
In fact most of the tasks programmers solve every day don't involve high-level algorithms and building a compiler for a DSL (even if there are some fields), but mundane things like "why the heck does it show me that value, better search on stackoverflow.com" or face-to-face communication about that new business strategy and that deadline that expired yesterday.

building Google

The whole Google stack could be built by you if you're a developer, even without a computer science degree. The only thing you probably can't build would be the main algorithm of the Google Search involving SVMs and developing machine learning and classification algorithms. You could even attend the famed Andrew Ng machine learning course and build neural networks using Theano or Google's new open-source TensorFlow and would be able to build something similar (although you can never beat Google in regards to that, but this is also a question of resources).

If you don't have the money to go to college, learn to code, build a small Google clone with a machine learning classifier behind it and I will ensure you that you will get a high-paying job regardless of your age, ethnicity and background in a couple of weeks.
So if you're able to build all of this, why do you need a computer science degree?

why you should earn a degree regardless of its work world impact

The IT industry is big — it's the manifestation of globalization. Millions of people learn to code in this second and they work hard to get any advantage possible. And there will be people who can do everything better than you, so you should spend some time learning the fundamentals of computer science to get ahead in theoretical matters.
If you're living in a industrial country you're far better off to be a software manager rather than a programmer. After some time in the industry you will see that many things get outsourced — e.g. server administration, everything that can be obtained for cheap due to different wealth levels. And that also includes software development.
So do yourself a favor and learn to manage and motivate people, because this is something which can't be rationalized if done correctly (although some voices say that even this could get automated eventually).
Most of the time and oftentimes without a compelling reason you will need a graduation to climb the career ladder. So all of this boils down to the following advice(s):

finding a compromise

People talk about how many software developers will be needed in the next few years and that millions of jobs will be unoccupied. I think they are right, but they try to hide the following fact: it won't be possible to get so much money per hour in the future compared to today's level, because it is a classical catch-22 — money motivates a big crowd to learn programming and computer science until supply meets demand and salaries will fall. It might seem like a luxury problem based on today's payment, but it might be an existential threat in the future if your current salary isn't that outstanding nowadays.
So basically you have three options:

a) Get a safe job in some government/public institution (in Germany we have something called "Verbeamtung" - appointment as a tenured German civil serant)
b) Go into the industry and ride the horse to death
c) Search for a steady industry instead (do you research regarding the likelihood of automation)

And the fourth and only viable option if you don't want to work in an office for your entire life time (first option) or want to get replaced by some people on 99designs and Fiverr or a new tool which builds ready-to-sale products using drag-and-drop is the second option coupled with one important distinction: ride the horse yourself.

entrepreneurship.

Be the one who built that new tool, be the one who built that new platform.
In this crazy game called IT industry, you're actually better off bearing full risk and calling yourself "serial entrepreneur" than seeking a stable job, because you will never get a decent life working 24/7 for some ESOPs worth 200k which you probably won't get.

So if you're above 30, don't go to college if you want to join this industry, go to a bootcamp or even better learn from free resources and create some startups after 2-3 years in a big company.
If you're under 30, go to a college, learn the ins and outs, join a startup while studying and master a problem domain using your computer science knowledge. Read "under 30" as "doesn't have any serious responsibilities", unfortunately you probably won't have time for your family and your kids while building a business (and really, do whatever you want and take any advice given by me or anybody else with a grain of salt).

One very important aspect is that you have a specific problem domain that you have to master — if you're building a language learning startup, you have to know everything about learning and motivation, if you're building a automated notary, you have to know everything about laws and their edge cases. The best way to build a profitable business fast is understanding an industry, having 1-2 connections to companies in it (maybe due to freelance work) and building a minimal solution with a few(!) features for them (without customizing too much!) and concentrate on sales afterwards. - yes, I've told you the magic sauce that can lead to a successful business if you just follow the plan of this single sentence.
Focus on quality, not speed; prioritize correctness over "move fast and break things" — those are things where a college degree can help you, but if you're disciplined you can reach that through pure endurance and hard work, too.

This is not a recipe for success, but I hope it can inspire you to build something that truly matters, something that you've created and own. If it's not for the money (that motivation won't be enough), it sure is for that feeling.

But don't listen to me, head over to Sam Altman's startup class


Another article about those ideas on softwareengineeringdaily.com