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?