When it comes to becoming a professional programmer, there are three paths that people usually take.
- Go to school and get a bachelor’s (at least) degree in computer science.
- Attend a coding bootcamp.
- Teach themselves how to program using online resources.
All three options are tried and true, but here we’ll see which is best for you.
Things to consider 🤔
Like most important decisions in life, we will have to consider the following:
- How much money you have.
- What obligations, or how much free time, you have.
- How self-disciplined you are.
There are other factors you might have to account for in your decision, but most of our constraints are related to the above in one way or another.
Pros and Cons
Yes, it’s cliche. Yes, we’re going to do it anyway.
Computer Science Degree 📚
Graduating from a university with a CS degree is historically the “default” way to get a programming job. For the sake of argument, let’s consider a 4-year CS degree.
Pros 👍
- Easiest way to get in the door - Employers see a CS degree as proof that you’ve done some amount of programming and understand the underlying theory. It wasn’t until recently that major tech firms like Google removed it as a requirement. When you are competing against self-taught devs or bootcamp grads, having a CS degree is a surefire way to set yourself apart.
- The college experience is about much more than just the classes - I think this is the biggest upside, particularly if you are young and still trying to make sense of the world. You will learn about time management, work with people from diverse backgrounds, pick up some soft-skills, and learn about topics outside of your major. Plus, you can have a lot of fun along the way! Though I don’t practice as a pharmacist anymore, I wouldn’t trade away the memories and friendships I made (it’s where I met my fiancé after all). Some of the soft skills I learned in that time have been crucial for leveling up quickly as an engineer.
- Deep dive into computer fundamentals - These days, we have amazing abstractions that allow you to write meaningful software without really understanding the underlying technology, which is amazing. However, I’m often in awe of the way some of my CS-degree-wielding coworkers understand the technology we build our systems on. I do think there’s an advantage there even if it’s hard to quantify.
- Easiest way to build a network - Somebody once said “Your network is your net worth”. So far in my career this has proved to be true. Since I was a Sandwich-Artist at Subway, I have never gotten a job by randomly submitting applications. Strong relationships are the number one way to find out about new opportunities and to get your foot in the door. Sure, you still need the skills, but having an old roommate put in a reference for you is going tome your resume to the top of the pile.
- Structured learning and accountability - This is huge for a lot of us. Though the curriculum can also be considered a con (see in next section), having guidance on what to learn and what order to learn it in is important. On day one, you learn about ones and zeroes, by year four you’re learning about distributed systems. The curriculum will vary depending on the institution, but you will undoubtedly graduate understanding how computers and their related technologies work. The grading/exam/project systems will keep you accountable in the process, which is great if you aren’t disciplined enough to work through one of these curriculums by yourself (like me 🙂 ).
Cons 👎
- The curriculum might feel dated - Large academic institutions are slow to adapt to the quickly-changing technology world. A CS degree is designed to provide you with an understanding of fundamentals and theory, rather than, say, the latest JavaScript framework. If you understand the fundamentals, you can learn the rest. So while you may never use C in your day-to-day, having learned it you can probably pick up whatever language you’ll need rather quickly.
- Usually the most expensive of the options - This shouldn’t be a surprise. The average cost of college over 4 years is 122k, while the average coding bootcamp is 13.5k, and self-teaching can be done mostly for free.
- Might take the longest to complete - Coding bootcamps are 3-12months in length, while obtaining a CS degree usually takes 4 years. The amount of time you would have to spend self-teaching will vary widely and could be shorter or longer than the other two options.
- Having to take unrelated classes - This could be seen as a pro, since being a well-rounded individual is likely to make you a better engineer in the long-term.
Coding Bootcamp 💻
A coding bootcamp is a short, accelerated, program designed to get you job-ready as a programmer in an average time of 14 weeks.
Full disclosure: This is the path that I ultimately took so I might have some bias towards this option. I’m trying to be as objective as I can but I wanted to be up-front about this.
Pros 👍
- Less time investment than a CS degree and potentially less than self-teaching - Again, with most CS degrees requiring at least 4 years, and self-teaching time varying widely, a bootcamp is likely to be the fastest method for becoming a job-ready developer.
- Nimble curriculum - Unlike universities, bootcamps are smaller institutions that are able to pivot with market trends. Because of this, you will usually see bootcamps teaching modern frameworks and languages that will match job posting demand in the area where the bootcamp is located and beyond.
- Potentially bigger ROI than CS degree, but less than self-taught - Though there are different ways to pay for a bootcamp, almost all of them will run you less than 4 years of college tuition.
- Tight-knit alumni network — Though smaller than university networks, bootcamp grads love to help each other out. Because the cohorts are generally pretty small, you are likely to build strong bonds with your peers which can lead to job opportunities in the future.
- Accountability is built in, but what you give is what you get - Bootcamps differ in their curriculums and how they measure performance. Usually you will have to do individual projects, team projects, or both, which can give you some experiences mimicking what you might do on the job, which is great! Don’t believe that you can cruise through the program and have a job waiting for you at the end, though. You will have to put in serious effort if you want to see good results in such a short time.
- Ultimate goal is to get you a job - Bootcamps are judged harshly on their job-placement rates. Because of that, they want ensure people get jobs. If they don’t do a good job of helping graduates find employment, their business ceases to exist. Because the incentive to get you employed is so strong, any decent bootcamp will spend a lot of resources to help graduates find positions.
Cons 👎
- The competition is fierce - There’s lots of bootcamps and a limited amount of jobs in any given area. There’s also people with CS degrees hunting for the same jobs. There’s also self-taught programmers throwing their hats in the ring. You will not have jobs falling in your lap just because you completed a bootcamp. You will be competing with your classmates for the same jobs. It will require significant effort to stand out. The time it takes for bootcamp grads to land their first job, if ever, is all over the place. Know this up-front if you decide to take this path.
- Lack of accreditation - Most states/countries don’t have the same regulations for bootcamps that they do for other academic institutions. This lack of quality control means you really need to do your research before choosing one. I recommend CourseReport.
- Less depth in knowledge - By the end of a program you will be able to build a usable website. You will know how to write software in a high-level language. These are valuable skills. It’s likely, though, that you won’t understand much about how the technologies you’re using work under-the-hood. For most cases, that’s totally fine, but if your plan is to go work at FAANG, it might not be enough.
- Less flexible than self-teaching — There are bootcamps that do part-time programs or night classes. Because they’re not as immersive as full-time programs, it can be harder to learn the material as efficiently. Not everybody can quit their full-time job in order to attend a full-time program, and even part-time programs might be more of a time commitment than some can muster.
- More expensive than self teaching and payment plans can be considered exploitative - Again, make sure to read about what you’re getting into with the different payment plans, one plan, the Income Share Agreement has come under particular scrutiny lately.
Self-Teaching 🤓
One of the great parts about the tech industry is most companies care more about your skills than your credentials. If you can prove you are able to do the job, companies will be happy to pay you.
With an endless amount of online resources, it is possible to teach yourself the skills needed to be a professional, and many people have done so!
Pros 👍
- Highest potential return on investment - Because there are so many free resources on the internet, even if you only make one dollar as a professional, your return on investment is already better than the other two options. We could probably come up with some complex calculation for how much your time is worth, and multiply it by how long it takes you to land your first job, and figure out a more accurate estimate that way, but that misses the point. Self-teaching can be FREE, or at least extremely cheap.
- Most flexibility out of the three options - For the parent that has two jobs, this might be the only way. Even part-time schools/bootcamps maintain some sort of schedule. Maybe you can only focus on programming at 5am or at 10pm. Most online resources are self-paced, meaning you focus on them when you CAN focus on them. The flexibility of teaching yourself is unmatched.
- More freedom to focus on a specific domain - When you get a CS degree, you’re going to learn a little about a lot. When you attend a bootcamp, you’re going to learn a lot about a little. Maybe neither of these options will cover the domain you’re interested in, say game development, at all or in enough depth for you to be productive in it. When you’re teaching yourself, you can start by figuring out where you want to end up, and tailor your curriculum towards that goal.
- Could get paid to learn - There are people out there who managed to convince clients to pay them to learn. Say you’ve taught yourself some HTML and CSS and feel confident that you could improve your local bakery’s website. They agree to pay you $1000 to update their online presence, but they’ll only do it if you can add an online ordering mechanism. You tell them, “Sure, no problem!”, knowing full-well you have no idea how to do that. Now all-of-a-sudden you are going to get paid to figure it out.
Cons 👎
- Harder to build network - Though there are online communities that exist to help self-teachers succeed, it is more difficult to build a network of strong relationships when your didactic experience happens in isolation. You can attend meetups and network online, but it’s still going to happen less organically than if you’re going through this experience with a bunch of other people in the same room.
- Accountability is harder to come by - When you decide you’re going to follow along with a tutorial series on YouTube, you’re the only person in the world who cares about whether you finish or not. Nobody is going to grade you on your performance, you don’t have any skin in the game financially, what’s to stop you from quitting once things get hard? If you are self-disciplined enough, you can overcome this, but for a lot of us this is the downfall.
- Without structure, it is hard to know what you don’t know - Most people self-teaching will, at one point or another, find themselves in tutorial purgatory. When you don’t have a clear curriculum that gets you from point A to point B, you’re likely to take a million detours that you might not be relevant. There’s so much to learn, and when you don’t have the full picture, you can get lost learning low-impact material.
- Will be more difficult to compete for jobs - Without the network advantage of a Bootcamp or a CS Degree, it is going to be tough to land that first job. You’re going to have to go above and beyond to set yourself apart. Even though graduating from a Bootcamp doesn’t hold the same weight as graduating with a CS degree, it still shows employers some level of dedication and passion for the position. When it’s just you, you have to prove that to them all by yourself, which can be hard.
- Might take as long as CS degree or longer - Your mileage will vary depending on how much free time you have, how self-disciplined you are, and how lucky you get. There are no guarantees with any of these methods, but if, for example, you’re only able to dedicate 5 hours a week to learning while a CS student is spending 20 hours a week in lectures and a bootcamper is spending 80 hours a week going at it, the numbers aren’t favorable if time is of the essence.
🤷 So which one is right for me? 🤷♂️
Only you can know what’s right for you, but I would recommend something like the following:
CS Degree - This is a great option if you have lots of time, you don’t have many external obligations, and you have enough money to pay for 4 years of tuition or are willing to take out student loans. Out of the three options, this is the easiest one to get a job with, plus, college can be a ton of fun!
Coding Bootcamp - This is a great option if you can’t dedicate 4 years towards a degree, but you want some structure and accountability. Though cheaper than getting a CS degree, you will still have to pay something, and/or take out loans for it. Bootcamps can also be difficult if you have kids and/or can’t take 3-6 months off of your job. Coding bootcamps can help to keep you accountable and provide you with a modern curriculum. If you chose this option, go here next to decide how to choose one!
Self Taught - Great if you are self-disciplined, are low on money, and/or don’t have time. If you are naturally curious, are willing to hold yourself accountable, and are okay to play the long-game, self-learning is an awesome option. This is particularly great if you can get clients to pay you to build them websites so you get paid to learn. This is the most flexible of all the options.
Lastly, keep in mind that everybody’s journey is going to be different. There’s too many moving parts, so try not to fall into the trap of comparing your results to those of others.
With enough determination and curiosity, you will get where you want to go!