Cover image a compilation of images from Cal Poly, NESA by Makers on Unsplash, and me!
One cool thing about programming is that there are many different roads to learning how to do it. I think that these are a few of the most common ways:
- Go to college to get a degree in Computer Science, Software Engineering, Information Technology, or a similar focus.
- Attend a Coding Bootcamp either online or in-person. These are relatively short, intensive programs that are heavily focused on getting students up and running with relevant and marketable skills with the ultimate goal of getting a job.
- Set your own curriculum and pace, learning from online videos, courses, books, coding challenges, and other free or inexpensive resources.
I've seen people wonder about the pros and cons of each option a number of times on places like Twitter, StackOverflow, and Dev.to. I've had a little experience with each of these options, and I thought I'd share my experiences and recommendations. One caveat: I've never had a software job. I'm just sharing my learning experience, along with some knowledge I've absorbed from books/videos/podcasts/talks/tweets given by a lot of really smart people.
Keep in mind that everyone's learning style is different, and your mileage may vary. I'm just providing some things to think about when weighing your decision.
Multi-Year College Degree
The Facts
The academic setting really works for some people. You'll know if this is you. If the thought of going back to school (or heading to college for the first time) fills you with dread, this probably isn't you. That being said, sometimes, a hiring manager will tell you that you need a particular degree for a particular position.
Side note: If you don't have the degree that a job posting is asking for, but you think you could do the job and would enjoy it, definitely apply anyway. Don't take yourself out of the running. Wait until the person that would be hiring you has met you and heard all of your qualifications, and then, if they tell you you need a degree, you can believe them.
While in pursuit of a college degree, you usually have all of the benefits of learning in a classroom setting: a professor that knows the subject, classmates that are all learning the material at the same time as you, a structured learning environment (syllabus, learning goals, scheduled homework and tests).
Depending on the workload and the student, that structured learning environment can be extremely stressful, because the timelines are fixed and there are real consequences for failure. That being said, it is possible to do a degree program in smaller doses -- maybe a few hours per week, at night -- if you want to get a degree while still continuing to work full-time.
The quality of the education will vary wildly from professor to professor. While many professors teach, not all of them are teachers. Some are really amazing and they make the class engaging, enjoyable, and you learn a ton. Some are not that great. If they teach in a hard-to-understand or demeaning way, it can demoralize you and make you feel like you're not good enough or smart enough to code.
Fun fact: The statements "I am not smart enough to code," and "I just don't have that kind of brain," are always false. Everyone can code. They just need the right teaching approach. And determination, because coding is hard.
My Recommendation
I would suggest pursuing a programming-related degree for the following reasons:
- You really love it and want to dive deeper.
- You have the determination to stick through the classes that are hard or confusing, the confidence to know it's probably not your fault that it's hard, and the wisdom to accept that and put in the work anyways.
- You are able to spend the money and the time it takes to get a degree.
- Your end goals require you to have this degree.
- You already have been programming for a while. You'll have real-world context for the concepts that are taught and why they are useful, which is incredibly helpful.
I would not suggest pursuing a programming-related degree if:
- You don't know how to code and you're not sure if you would like it or not. Paying for college tuition is not a wise way to figure that out. At least try out Codecademy or something first.
- You don't like school and don't need a degree for some reason.
- You can't afford it, don't want to pay loans, and don't need a degree for some reason.
- You don't have the time to allocate and don't need a degree for some reason.
Coding Bootcamp
The Facts
I haven't personally been through a bootcamp, but I've got family that has, and I've tutored someone who was going through one. If you've got experiences that differ from what I've seen, I'd love to hear about it.
Coding bootcamps are great if you currently don't know a ton about programming, but your goal is to get a tech-related job in the near future anyways. Most of them will have some sort of pipeline/network for getting their students jobs at the end. They'll probably help you with your resume, interviewing skills, and help you research companies that might be a good fit.
There are some significant costs associated with them, but not as much as most college degree programs. Now, some bootcamps are even willing to waive your tuition until after you've graduated and gotten a paying job.
The main downside to a bootcamp is the time commitment. Many bootcamps require a few months of full-time engagement, which would require you to take time off from work or work but never sleep. But, if you've got a company that will let you take that time off and still have your job (or even better -- a software job!) waiting for you when you get back, that's an amazing opportunity.
Similar to how the teaching quality can vary from professor to professor, the experience can be very different depending on which bootcamp you choose. Definitely do your research, read reviews, and, if possible, talk with people who have gone through the program to get their feedback. Because of the time and money commitment, you really want to get the right one.
Even so, regardless of the quality of the bootcamp, if you're ready to put in the work and be the best in your class, you'll most likely come out the other side mostly ready for your first tech job no matter what.
The one downside I noticed while working through the courseload with the people I was tutoring was that the program spent a lot of time showing the students how to do things with the current frameworks, libraries, and languages, but not very much time explaining why things worked. The students I've encountered all felt a little shaky on some of the basics of their programming languages, but were pretty comfortable with things like Git workflow, npm
, and the particular functions and usages of popular libraries.
Again, getting comfortable with the basics of programming may mean some extra hard work and practice on your part. This will depend heavily on which bootcamp you choose.
My Recommendation
I would recommend attending a bootcamp if:
- Your primary goal is to get a programming job as quickly as possible.
- You like programming and really want to learn those skills, but you have a hard time keeping motivated on your own.
- You are able to make the significant time commitment.
- You can afford the tuition and/or you find a program that will wait until after you've gotten a job to bill you.
I would not recommend a bootcamp if:
You're just curious about programming and have never tried it. Try a couple of free online learning resources first, just to make sure it's something you want to spend the money on.
You don't learn well in a fast-paced environment. They go fast, because they've got a lot of material to cover in a short time, and you have to be able to be willing to do research on your own or ask for help outside of class.
You're not looking for a programming job.
Self-Taught
The Facts
"Self-taught" is actually a little bit of a misnomer, because even though your learning is "self-paced," in fact, you're learning from hundreds or thousands of amazing, smart people who all put their knowledge out online for free (or relatively cheap).
No matter what path you choose, you will need to do some amount of self-teaching. In fact, being hungry for knowledge and always trying to learn new things is an important skill to cultivate for a budding developer. Because this industry is always changing, if you stop learning the moment you graduate from college or your bootcamp, you'll immediately be behind the curve.
It's important to note (for your sanity and mental well-being) that there is an enormous amount of knowledge out there.
A. Lot.
There is no way that you could ever learn everything there is to know about programming. So don't stress too hard about being "behind." Just stay curious, willing to experiment, and open to new ideas, and the growth will come.
That is the main benefit -- and drawback -- of the self-paced path: it's a long and winding road (#dontsuemeBeatles). It's hard to stay focused on learning one specific skill or set of skills. There's so many cool topics out there, it's easy to get distracted -- and often getting distracted is okay! You're not on anyone's timeline but your own, so if you want to take a weekend to learn how compilers work or use a Raspberry Pi to make an LED blink, there's nothing wrong with that. But it will take time away from the other skills you're trying to learn.
So, if your end goal is to get a programming job, and you are trying to do it all on your own, know that it may take a while, and you may have some random gaps in your knowledge that might be surprising to others. However, as long as you are willing and able to go back and learn the things you might have missed when you need to, that might not be a problem.
The last thing to note is that, even though this section is all about "teaching yourself to code," you don't have to do that alone. There are a ton of great communities of people out there who are learning to code right along side you, and it can be really helpful to have them there to share your pains, struggles, and victories with. Dev.to, Code Newbies, and people doing the #100daysofcode are three that are especially great.
My Recommendation
I would recommend the self-taught path if:
- You don't have pressing needs for a programming job or degree.
- You love coding for fun!
- You can't afford tuition but you can afford a laptop, internet, and are ready to push yourself.
I would not recommend the self-taught path if:
- You need a little more structure to your learning environment. Even still, you should probably practice learning things on your own, because that skill will come in handy.
- You urgently need a programming job.
Don't Wait. Decide and Go to Work
The worst thing you can do is to do nothing and agonize over which is the "right" way to do it. Start learning on your own, and then look into a degree program or a bootcamp if you feel like you need to supercharge your learning pace or deepen your understanding. Remember that degrees and bootcamps are an investment, so do that math and make sure your investment will pay off (salary-wise, time-wise, remote-work-wise, or other-wise) before you make that commitment.
And remember that, no matter what, at the end, you'll be able to code, and you'll be a better learner. And that's important. And it should make you feel like a gosh darn superhero.
Originally posted on assert_not magic?
Top comments (16)
I did a bit of formal CS and then was mostly “self-taught”. If you’re already in university either way, I’d say it’s cool to just take a handful of very useful CA or coding classes, and only go deep if you really feel like it’s the right time. You can catch up later (like I did) if you are not yet ready to totally dive in.
Yup -- same here. So many good ways to learn how to code, there's no one right solution.
Definitely. Good advice for sure.
In Europe, a degree might be, in fact, the cheapest way to learn. College fees are low or none in many countries, and in many cases you can work at the same time. So getting a CS degree might be a slow-but-cheap way of learning programming.
There's also another hidden advantage to universities: you'll get to network with people that are going to be hired pretty much at the same time as you. They might even create their own company. So there's that.
Plus, universities are community hubs around which many user groups are created and nurtured. So they are the best way to engage the local free software scene.
In the US, colleges have become outrageously expensive over the past 20 years. There are several reasons for it, but most of it comes down to the way student loans are structured and excessive, non-academic, overhead costs.
The loans has served to enrich the companies that have provided them along with college administrators and politicians (left and right) who assist in the process while hurting students, their families and even college professors. This process is crippling US higher education and causing a slower economy.
Overhead costs come from excessive spending on sports teams, primarily football (US style). Head football coaches are typically one of the highest paid employees at most colleges. The infrastructure costs of building stadiums is huge. There are other high costs in the university system but this is perhaps the largest one.
That's bad. Higher education should be the equalizer of people coming from different backgrounds.
That’s cool. Thanks for the international perspective 😁
Good breakdown of these options.
One of the self-learning options I use are MOOCs. I've found they work well for me when I want to learn something new.
The quality of courseware available completely for free is mind-blowing. I'm basically auditing MIT 6.006 from my couch - all the lectures, notes, supplemental reading, problem sets...it's nuts.
Yeah, resources like edX are great. Taking Harvard’s CS50 was one of the best decisions I’ve ever made!
I'm of the opinion that bootcamps are an overpriced way to jump into a narrow segment of web programming. I point to the closure of some of the best known ones as evidence that it's not a productive way to join the field: twitter.com/codinghorror/status/90...
Being self-taught is certainly a thing, and everyone needs to be a self-directed learner eventually in order to keep pace with changing technology, but a university degree is very nearly required for professional work. That's where you're going to be exposed to computer science theory and algorithms in ways that bootcamps don't have time for.
That said, I've interviewed plenty of candidates with university degrees that couldn't code their way out of a paper bag. But being self-taught makes you a bigger unknown during the hiring process; we have to target questions to see if you have knowledge gaps that we would have assumed you'd have covered in a degree program.
I went to a Bootcamp back in the era when they were relatively new, and I think the thing that they help with the most is teaching you what questions to ask so you can be an effective self-paced learner in the future. However, there are just too many boot camps now, producing too many grads for the market, and they’re of varying quality.
I’m going to disagree that you need a college degree for professional work. If you want to do well in the field, you’ll study and learn low level stuff and algorithms on your own time, after a class or Bootcamp has helped you get a feel for the unknown unknowns ahead of you.
Definitely agree though, that while I wholeheartedly recommended my Bootcamp (which is now dead) back in 2014, I don’t think I’d recommend a Bootcamp to a new learner now. The market for juniors is totally different, in large part because of those very bootcamps.
What a great article - thank you. I’ve been on track #3 (“self” taught) for 10 months and it’s been amazing. But I did agonize over options 1 & 2 for a long time.
A couple of things I’ve heard indirectly from people who’ve done CS degrees is that while it can be great for gaining a deep understanding of CS theory, some programs don’t focus much on actually coding, and if even they do, these programs are sometimes less-able to update their curriculums at the speed that technology & languages are changing.
Yeah, I have noticed that so far in my program (2 classes in). We’re using Java and the instructor had us all install Eclipse at the beginning of the class. So far, I’ve gotten away with using Vim instead without much problem 😉 Not that there’s anything wrong with Java. I just like working in other languages better. It would have been cool to do algorithms in Go or Rust!
I am a self taught React dev turned boot-camp mentor and I have to say I agree with all of this! lol
Great! Thanks!