Why computer scientists can't program
— and it doesn't matter
I'm not 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 an 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 an 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.
becoming 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 developing 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.
why you should earn a degree regardless
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 an 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 that 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 servant)
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 lifetime (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 the 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 have financial obligations (e.g. a family), 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 don't have any obligations, go to a college, learn the ins and outs, join a startup while studying and master a problem domain using your computer science knowledge. Most entrepreneurs work 60+ hours a week, so expect to have less time for social responsibilities and activities.
how to start
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 an automated notary, you have to learn and know everything about the relevant laws and their edge cases. The best way to build a profitable business fast is understanding an industry, get 1-3 connections to companies in it (e.g. via freelance work), and build a minimal solution with a few(!) features for them (without customizing too much!) and concentrate on sales afterward. Most industries and companies already know their pain points, asking for problems can be a fast way to find business ideas. Concentrate on small problems at the beginning that cost the company a lot of time.
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 that you 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