Bridging the Gap in Computer Science Education
Get a CS degree or go a different route to get into software development? It’s been a hot topic recently and one that has been on my mind periodically for the past few years. Both options are valid ways to learn, and both leave different holes in your education.
University programs tend to focus more on theory, while alternative options such as bootcamps or online tutorials often center more on practical tasks. These other routes have become more and more attractive, especially if you don’t have a few years and lots of money to burn.
The disadvantage is that your education may be missing important concepts, and you may not even know that you’re missing them. A recent newsletter from Hillel Wayne provided an excellent example of this point from a different angle: math education.
His example was from a rank-matching system in the multiplayer game Splatoon. This matching system was a perfect fit for a stochastic matrix, but you would only ever know that if you had heard of a stochastic matrix and had at least a vague memory of its properties.
Similar examples apply in more mundane cases. You probably will never need to know how to implement a red-black tree — and indeed I’ve long since forgotten the specifics of the algorithm…
But having some idea of why to use one, or the tradeoffs when choosing between a BTree, a hash table, or a simple array, are invaluable. It’s a situation where selecting the right approach to a problem in the first place can save lots of pain and backtracking later on.
The good news is that plugging the theory hole isn’t too hard, and can be done in the background once you’ve secured a job and your immediate needs are satisfied.
A couple courses in data structures and algorithms courses and an overview of operating system concepts should get you most of the way there. Then for more advanced skills you can move on to state machines, networking, parsers, or whatever else seems interesting.
CS degree programs, on the other hand, often skimp on the practical stuff. Things like source control, testing, and specifics about the current hot languages and frameworks that you may actually be using in your career.
You are almost guaranteed to learn these things on the job by necessity. The good news is that employers will usually expect that new graduates don’t know these things, and should be prepared to teach them through mentorship programs or something similar.
But where does that leave the new programmers without a college education at their first job? I like to think that employers open to hiring them will be aware of these issues, but it can be a painful experience when the expectations aren’t matched to reality.
So I’ll be writing about more fundamental CS topics over the coming months. I’ve worked at almost all levels of the stack throughout my career, so almost anything is fair game. Operating systems, algorithms, networking, or something else? What would you like to know more about?