When looking to start a career as a software developer, you will probably come across two viable paths to get there: a CS degree from a university, or a coding bootcamp.
This means that at some point you’ll have to evaluate a CS degree against a coding bootcamp. While it’s easy to look at superficial things like duration and cost, that’s missing the bigger point of the discussion.
Coding Bootcamps and CS degrees serve very different roles and the objective of each of them is quite different.
To be completely honest, when I went to university to study Computer Science, I didn’t fully understand what studying CS meant, or even what the point of it was.
After one year, I tried to convince my parents to let me drop out of school. I was convinced it was a total waste of time.
Looking back on the experience of studying Computer Science in university, I realize it was a valuable experience, but my expectations of what the goal or purpose of the education was, was very different than my professor’s goals.
Let me rewind and walk you through what it means to study computer science in a university. From there we can compare and contrast the education people get from university with the education of coding bootcamps.
4-Year College Degree in Computer Science
I studied Computer Science at Northeastern University in Boston. My journey with CS started with a class called Fundamentals of Computer Science I aka fundies. The lecture hall was jam-packed on the first day, so much so that many people were forced to stand to attend the class. Moments later, I would find out why.
Look to your left and look to your right. Statistically speaking, only one of the three of you will ultimately pass this class.
If you go to RateMyProfessor.com you will see very different reviews of the professor and the class:
While his statement was true, I found his comment more important because it set the tone for what was to come.
There are certain requirements that it takes to get a CS degree and a lot of them are pretty difficult.
I’m going to walk you through the classes necessary to earn that degree so that you can learn from my personal experience and see what it covers, and what it doesn’t:
Fundamentals of Computer Science I (CS2500)
When I took this class it involved using the Scheme programming language, which is fairly similar to a lisp. I believe they renamed the language to Racket since I’ve graduated. This programming language is common in academia, but almost never used in the industry. The course involved writing programs in this language mostly manipulating and working with Linked Lists, and often using recursion. Again, two topics, that are important in academia, but very disconnected from the industry.
Fundamentals of Computer Science II (CS2510)
Computer Science/Information Science Overview & Co-op Preparation (CS1200)
This course was an overview to prepare us for co-ops (6 month long internships) and involved writing a resume, reviewing expectations of the job hunt, etc. It was relevant to the real world but involved no coding or technical aspect.
Discrete Structures (CS1800 & CS1802)
Discrete Structures is mathematics for Computer Scientists. Math about calculating permutations, combinations, sets operations and math backing RSA encryption algorithms. This class focused on the mathematical concepts and didn’t involve writing any code.
Object-Oriented Design (CS3500)
This class involved code design patterns in Java. It’s relevant for real-world application, but also not too challenging, given where Fundamentals of Computer Science II left off. This class is largely just an extension of that class.
Computer Systems (CS3650)
This class involved learning theory about operating systems, like how operating systems allocate memory to different processes and involved writing some simple programs using the MIPS assembly language. Assembly language is a much lower-level language than most people use in the real-world, so even doing basic things involves a ton of work. The most complicated program we wrote in Assembly was reversing a string of text, or something like that. It sounds really easy but is pretty challenging given the Assembly programming language.
Networks and Distributed Systems (CS3700)
I thought this class was going to be really easy, but I was very wrong. Most people take the Internet for granted. At the end of the day, the Internet involves transferring information from one computer to another through complex structures and ultimately through tubes of fiber optic cables that flashlights on or off (a 0 or a 1). There’s something known as the OSI model of the Internet that has a million different layers to interact with. As a programmer, you generally interact with the Application Layer, but there are 6 additional layers of abstraction beneath it that most programmers don’t need to think about. This class covered those layers. I passed this class but probably shouldn’t have…
Theory of Computation (CS3800)
This class focused primarily on two concepts in computing. Languages and Grammars: There are some concepts in computing called finite automata. Basically, these can easily match or not match certain strings of data. You could potentially use automata to determine if a string includes a number that is in a phone number format, for example. Basically, automata can be executed very quickly by computers and most programming languages have a feature called regular expressions, which leverages automata to make them work quickly. This class teaches the underlying mechanics about how regular expressions are implemented by most programming languages, but funny enough, doesn’t teach the concept of regular expressions, which is what programmers actual use in the real world. P and NP: In computing, there are categories of problems that are easy to solve and a category of problems that may (or may not) be able to be solved efficiently by computers. An example of a problem is known as the Traveling Salesman problem. This class discussed these categories of problems on the fringes of what computers are able to solve efficiently.
Programming Languages (CS4400)
This class involved implementing a programming language using a different programming language. When I took the class it involved building a scheme-like programming language using a different version of scheme (typed scheme). This class involved some of the hardest programming challenges I’ve ever faced. The programming languages involved are never used in the real world, but the process had me grow a lot as a developer.
Software Development (CS4500)
Software Development at Northeastern was really fun. It involved working with other classmates building robots that competed in a game using the Java programming language. It was a blast, and highly relevant for landing a job as a developer.
Algorithms and Data (CS4800)
This class involved learning and understanding how certain computer algorithms worked, but rather than focusing on writing code, it involved understanding the mathematical definition of the algorithms.
The Eloquent Presenter (THTR1170)
We needed to a 20-minute presentation to a class of around 100 people on a technical topic. I gave a presentation on git & GitHub, although at the time I had no practical experience with it (instead I focused on research I had done on the Internet).
Capstone (many options) Database Structures
It looks like this class isn’t around anymore, but I took a class on database structures. Rather than focusing on interacting and using databases, this class was mostly about binary trees and binary tree balancing. Like many other classes, rather than knowing how to use databases, I had an understanding of how databases are built.
There were other math, science, writing, and sociology classes, but these classes didn’t involve writing any code.
When starting University I thought a Computer Science was all about writing code, but I was missing the point.
Getting a CS degree is deeper than writing code. Computer Science is all about understanding how computers are able to solve problems for programmers.
If you review the rundown of the classes I took, you’ll see that I only took a handful of classes that heavily involved writing code:
- 2 classes involved writing code in a programming language that is almost never used in industry.
- 3 classes involved writing code in ways fairly similar to what development in the real world and the first two classes were really just preparation for the final course of Software Development.
And because of this, plenty of people who graduate with a CS degree are terrible programmers. Personally, I really struggled with my class on networking. Through cramming, all-nighters and extra help I was able to retain enough to pass the class and immediately forget everything.
Plenty of people who graduate with a CS degree are terrible programmers.
There are some people struggle with the actual coding classes but are great at everything else.
The people that do well at Computer Science often supplement course materials to learn topics that are more relevant for building projects. My roommate at the time taught himself Python and Django and encouraged me to do the same.
Instead, I taught myself Ruby on Rails by going through a book I bought at Barnes and Noble.
Coding Bootcamp Program
Coding bootcamps approach programming education from a different angle. The emphasis is on developing real-world coding skills that can be put into practice, rather than theory.
Coding bootcamps would focus on skills like:
- The network structures that you will use every day as a programmer.
- How to store and retrieve items from a database.
- How to effectively use a programming language to solve problems.
But most coding bootcamps don’t cover topics like:
- Underlying network structures that power the Internet, and other things you don’t need to worry about as a programmer.
- How databases are able to use binary trees to retrieve data quickly.
- Using an obscure programming language to design and build a programming language of your own.
Coding bootcamps cover materials selectively. However, it’s material that is much more practical for day-to-day use.
For example, after passing the Northeastern class I took on databases, I had no idea how to actually use databases. The class taught me how they are built and strategies to optimize things if it was ever needed.
Coding bootcamp students will usually have experience using databases in real-world applications, but will not fully understand the strategies that the people who built the database had to ensure queries are done quickly and efficiently.
Although both Computer Science graduates and coding bootcamp graduates often go on to work as developers in the industry, they often have very different perspectives, which is understandable.
People with a CS degree will understand all aspects of what they’re building, whilst coding bootcamp graduates will understand the tools that are used every day in the industry and how to build projects with real-world application.
Despite these differences, there is significant overlap between the two, as well:
- CS graduates and coding bootcamp graduates should have the skill to use a programming language to perform transformations on data.
- They should also acquire the skill to look at problems analytically, logically and work backwards from a premise or suggestion.
- Both Computer Science students and bootcamp students should be able to get jobs as developers after they graduate.
So, Should I Go For a CS Degree or a Coding Bootcamp Education?
Ultimately, I think the choice should depend on where you are in life:
If you’re graduating high school, a CS degree will be more expensive and longer than attending a coding bootcamp. However, it’s a smart choice.
If you’re looking to make a career change and the commitment of 4 years and hundreds of thousands of dollars isn’t an option, a coding bootcamp could be the right choice for you.