Introduction
Continuing my thoughts on broader programming topics for August, I’d like to share my opinion on the differences between learning programming as a self-taught individual versus obtaining a formal computer science degree. As with all opinions, this one is subjective and shaped by my own experiences. However, having been on both sides, I believe I can provide some valuable insights on the subject.
Since this turned into a rather lengthy post, I’ve divided it into two parts. The first part will discuss the differences in the knowledge one can acquire, and the second part will focus on the differences in developing essential soft skills.
But first, some background: I’ll be discussing this in the context of a formal computer science degree, not a bootcamp certificate. I started programming at the age of 10, but my experience was different from others at that age. My parents insisted that if they bought me a PC, I would also have to enroll in a private programming school. Back then, it was a four-year private program that began with basic procedural programming, emphasizing the “clean” code of that era (this was in the early ’90s, so the “proper” way to design and write code was quite different from today’s standards), and later moved on to Turbo Pascal and object-oriented programming with Object Pascal.
In the late ’90s, I took entrance exams and was accepted into a university to pursue a computer science degree. However, I quickly stopped attending. Since I had been programming for many years and could already find programming jobs, I didn’t see the point in pursuing a CS degree, especially when some of the coursework seemed unnecessary (and, as I now know, some of it truly was).
This continued until the late 2000s when I decided to go back and earn my CS degree. In this post, I’ll describe why I made that decision, what my expectations were, what actually happened, and my thoughts on why someone should pursue a CS degree if they have the opportunity. However, please keep in mind that these reflections are based on my subjective opinions and experiences.
Lastly, I’d like to mention two important things: First, I didn’t have to pay any tuition for attending university, as I live in a country where education is free. If you live somewhere where you have to pay, only you can weigh the pros and cons based on the cost and your financial situation. Second, pursuing a degree doesn’t mean you won’t need to teach yourself. It’s less a matter of choosing between formal education and self-teaching, and more about combining both approaches.
What A Computer Science Degree Is Not
Let’s begin by unpacking the phrase “school AND self-taught.” If you think that earning a CS degree automatically labels you as an excellent and exceptional student, regardless of how prestigious the institution is, you’re mistaken. While some institutions are highly regarded, in the real world, a degree is often just a piece of paper that may serve as a filter at best.
The second point to understand is that no matter how much knowledge you gain, if you believe that it will be all you ever need, you’re gravely mistaken.
If you’re wondering whether getting a computer science degree is enough to guarantee you a good job with a good salary and favorable working conditions for the rest of your life, the answer is no. In fact, the degree and the programming knowledge you acquire aren’t nearly enough to secure those things. If that’s all you expect to gain from your studies, you might be better off not wasting your time. A degree provides a solid foundation and is a great starting point, but it doesn’t guarantee anything beyond that.
A Degree Acts As A Filter
The primary, and perhaps the only, immediate advantage of holding a degree is that it serves as a filter, helping to place you at the top of the candidate list for a job. Some positions even require a bachelor’s degree or higher. While this shouldn’t necessarily be the case—there are self-taught programmers who are just as good, if not better, than those with a CS degree—many employers use degrees as a way to play the odds.
A friend of mine who frequently hires programmers for his company always includes a bachelor’s degree or higher as a job requirement. In conversations we’ve had, I can’t say I disagree with his reasoning. He acknowledges that some excellent programmers don’t have a degree, but his time is limited. With the abundance of online courses that allow people to build impressive portfolios without necessarily having deep knowledge, and the many who believe they’re ready for a job after just a 10-hour course, the chances of finding a truly capable candidate are lower among those without degrees than among those who have one.
He explained that it’s easier and less time-consuming to narrow down a pool of twenty candidates out of a hundred than to sift through forty out of a thousand. The difference, he said, is significant because of the number of applicants who may be overconfident after completing a simple course on Udemy, or those who apply despite knowing they’re not quite ready because they have nothing to lose.
We both understand that a degree doesn’t automatically make someone fit for the job, and not having one doesn’t mean someone isn’t qualified. But when time is limited, employers often use degrees as a filter. While it shouldn’t be the case that just the degree should give you an advantage, in many cases, it does.
5% Of The Knowledge You Will Need You Learn It In School
Let’s move on to the knowledge aspect. I’ll start by saying that the things I learned at university and actually use in my job make up less than 5% of what I know—perhaps even less than 2%. The exact percentage doesn’t matter, though. What’s important is that this knowledge provides a solid foundation to build upon. As with anything, having a strong grasp of the basics is crucial, but acquiring that knowledge can be challenging. Not because it’s hard to find, but because there are so many different opinions on what those basics should be. Relying on online opinions and trying to discern what’s accurate can be difficult, especially when you’re starting with zero knowledge on a subject.
This doesn’t mean that the rest of the knowledge you gain in school outside of that core 5% is useless. While a significant portion may not be directly applicable to your everyday job, some of the knowledge you acquire in a CS degree is about more than immediate application—it’s about learning more efficiently in the future. For instance, understanding basic algorithms and data structures may seem unnecessary if you’re using languages where they’re already implemented. However, knowing the theory behind these concepts—their pros and cons, complexity, and when to use them—makes it much easier to understand their implementations in different languages. Without that theoretical knowledge, you’ll need to start from scratch each time you learn a new language, framework, or library. In contrast, familiarity with algorithms and data structures not only speeds up your understanding of their various implementations but also encourages you to actively seek out how they’re implemented, knowing they exist in one form or another across different languages.
The Internet Is A Treasure Chest Of Information And Knowledge
All the valuable knowledge I mentioned earlier isn’t limited to schools. The internet is a vast treasure trove of information. You can find everything I discussed online as well, but there’s a challenge. The internet is like a treasure chest filled with a hundred real diamonds and a million fake ones. If you don’t know much about diamonds, you could spend a lot of time admiring a fake one, only to realize later that it’s not real.
To evaluate anything properly, we need to have some knowledge about it. When we try to learn something online, our critical thinking ability is often limited because our knowledge on the subject is limited or nonexistent. Unlike computers, humans don’t have separate areas for storing data and performing logical operations. As soon as we perceive something, we start making logical connections—this applies to any tutorial or course as well. This means we’re still judging the quality of the course, but our judgment is often influenced more by the presenter’s personality, charisma, friendliness, and how easy it is to understand them, rather than the accuracy of the content.
Don’t get me wrong; these are important soft skills for anyone teaching something. However, they’re only useful if the information being taught is correct. Without some foundational knowledge, we might end up following someone simply because they’re charismatic and personable, even if what they’re teaching is completely wrong. I still remember a popular YouTuber with nearly half a million subscribers explaining Actions in C#. At one point, he said, “We write static event Action because all Actions always have to be static.” This is problematic because if you learn something incorrectly, it’s harder to unlearn the wrong information and replace it with the correct one than it is to learn the right information from the start.
This is where the 5% of solid foundational knowledge becomes crucial. Having a small amount of reliable knowledge helps you evaluate what others are saying. If you know something to be true, you can judge the credibility of a teacher or source based on how accurately they explain that subject. If they’re correct about the things you already know, there’s a good chance they’ll be reliable for the things you want to learn. However, even when you trust someone, it’s important to trust but verify.
Getting Information Vs Getting Knowledge
Another valuable lesson you can learn in school is the ability to distinguish between information and knowledge—often referred to as “learning how to learn.” Having someone push you to thoroughly understand a topic and then test your understanding through exams is very different from trying to replicate that process on your own. There are times when you might think you’ve mastered something, only to discover, after facing questions or problems posed by someone with deep expertise, that you’ve only scratched the surface.
While it’s possible to push yourself to gain deeper knowledge by tackling challenges independently, can you do that consistently? Can you do it when you’re feeling lazy, tired, or simply want to go out with friends? It’s easy to make excuses when you don’t have someone holding you accountable. This lack of accountability won’t last forever—eventually, in your job, you’ll encounter situations where a deeper understanding is essential. However, before we can truly master something, we often have to fail at it a few times. It’s better to experience these failures while thinking you’ve learned something in school rather than on the job. The consequences of making mistakes in the real world are far more severe than failing in school.
A Good School Doesn’t Try To Please You, Honest Feedback
Finally, when it comes to acquiring knowledge, attending a good school—one that doesn’t rely on your money to survive and consistently fills its available positions—offers the advantage of honest feedback because you are not treated as a client.
The unfortunate reality of online courses and tutorials, even if they’re free, is that the creators often have to cater to the feedback of all participants and strive to make the experience as pleasant as possible. This isn’t inherently a problem, as long as the instructor doesn’t have to compromise the quality of the content. However, issues arise when people start complaining about aspects like the course’s difficulty, length, or other factors that don’t relate to the accuracy or depth of the material.
Even if you enroll in an online tutorial with a strong commitment to work hard, not everyone will share the same mindset. Some participants may expect an easy way out—hoping the tutorial will offer shortcuts, simplify complex concepts at the expense of accuracy, provide quick projects to pad their portfolios, or teach them “tricks” to avoid putting in the effort needed to truly learn. If a tutorial doesn’t cater to these expectations, it can become the target of what I call the “angry vocal minority.” Just twenty dissatisfied participants out of two hundred can start giving low ratings, trash-talking the course on forums and social media, and leaving negative reviews, ultimately leading to fewer enrollments.
For someone who makes a living by creating courses—whether directly from course fees or indirectly through views and subscribers—this situation can create pressure to compromise the quality of their teachings to appease that vocal minority. These twenty disgruntled individuals can sound like two hundred. In contrast, a reputable college or university doesn’t face this issue. They won’t compromise the accuracy of their teachings to keep students happy. While this uncompromising approach might lead to other challenges, it ensures that instructors are teaching what they believe is correct, without sacrificing integrity.
Conclusion Of Part 1
These are my thoughts on the differences in knowledge acquisition between attending school and being self-taught. While it’s possible for a self-taught individual to gain the same level of knowledge as someone with a computer science degree, the path can be much harder. It requires significantly more dedication, time, effort, and most importantly, a good mentor to guide you when you feel lost.
Although learning on the job is possible, it’s common to fail repeatedly before truly understanding something, and failing at work carries far greater consequences than failing at school. However, attending school doesn’t automatically guarantee you’ll acquire the necessary knowledge. In fact, it might make you feel more relaxed, leading to the false belief that simply earning a degree is enough.
This post isn’t about finding the “easiest” way. If you’re looking for an easy path, programming may not be the right field for you, degree or not. This post is for those who are willing to put in the work, effort, and time required. If you’re ready to do that, pursuing a degree increases your chances of gaining the essential knowledge needed to start your career on solid footing.
However, knowledge alone isn’t the only crucial element for becoming a successful programmer. Soft skills—like communication, teamwork, meeting deadlines, and time management—are also vital. Some might even argue that these skills are more important than the technical knowledge you possess. In the second part of this discussion, I’ll explore the essential soft skills needed for success and how formal education versus self-teaching can influence their development.
Until then, thank you for reading, and as always, if you have any questions or comments you can use the comments section, or contact me directly via the contact form or by email. Also, if you don’t want to miss any of the new blog posts, you can subscribe to my newsletter or the RSS feed.