Just as there are many things you can do with the ability to program, there are more options for how to learn programming than ever before. This is simultaneously really good, and really overwhelming. This article will try to help you navigate the many potential options available and pick a pathway that works for you.

The truth is, there is no one-size-fits-all method for anyone to learn programming. However, there is probably a best way for you to learn. I hope that by the end of this article you will have a clearer idea of which path you should follow.

Option 1: Computer Science Degree

Cost: Varies widely depending on the provider, from $10,000 to $100,000+ in the US

Speed: 3 – 4 years depending on your country

Job Prospects: Some companies won’t consider applicants without STEM degrees. Some go further and won’t consider applicants who aren’t graduates of a top-tier university. Other companies don’t care about your formal credentials.

How it works

You’ll learn much more than programming as part of a good Computer Science degree. In addition to coding skills, you’ll learn lots about computers in general: how they work, how to use them to solve problems, and the underlying science that drives the design of computer systems. Though these skills err toward the theoretical, understanding the fundamentals of computing can help improve the overall quality of your code, as well as your ability to debug problems that occur outside your code, for example, in the network or operating system.

On the other hand, a Computer Science degree isn’t the fastest way to gain the practical skills to build a modern web application. Even if your Computer Science degree is progressive and covers web development (not all of them do), you are unlikely to learn up-to-date web technologies. Web development changes so quickly that college curriculums struggle to keep pace. If you’re learning to program so you can build something specific then a Computer Science degree is likely to be the slowest and least practical route.

In general, a Computer Science degree could be the best way for you to learn programming if:

You’re not in a rush and are planning to have a career in software development

You want to work at a highly competitive tech company like Google, Facebook, or Uber (these companies generally require a degree in the field)

You learn best in an academic environment and struggle to learn on your own

You want to solve problems that require a deep knowledge of computation, like artificial intelligence or machine learning

You have the time, money, energy, and opportunity… and you think it would be fun!

Option 2: Coding Bootcamp

Job Prospects: It’s becoming more common for coding bootcamps to take some shared responsibility in getting you a job when you graduate. It’s entirely possible to get a Junior programming position after having completed a coding bootcamp, though you may be excluded from some companies that only hire those with a formal education.

How it works

Coding bootcamps are usually part-time or full-time, private, non-accredited courses in programming. Some occur online, while many take place in-person in a classroom environment with instructors and students.

Coding bootcamps are focused around giving you as many practical skills as possible in the shortest period of time. Often, the yardstick of success for any given coding bootcamp is whether you gain the skills to build a complete (albeit basic) web application using modern technologies like HTML & CSS, Ruby on Rails, and JavaScript.

Coding bootcamps are an excellent choice for learning programming if you want to build something specific or get a programming job quickly. In general, bootcamps move really fast. The fast-pace is excellent if programming comes naturally to you. You’ll feel challenged, pushed out of your comfort zone, and will be able to see yourself progressing every day. However, the intense pace of most bootcamps can also be a source of problems, but there are ways to survive these bootcamps. Not all bootcamps do a great job of bringing along students who fall behind, or get stuck on a particular concept. They may also gloss over important topics in an effort to cram as many buzzwords as possible into the curriculum.

Option 3: Self-learning (MOOCs, tutorials, books)

Cost: Anywhere between totally free and ~$5,000

Speed: 3 months to 1+ years

Job Prospects: Self-taught Junior developers have similar job prospects to those who’ve gone through coding bootcamps. While some top-tier tech companies may require a degree, other companies will be impressed with your obvious grit and passion for programming. If self-learning comes easily to you, you may forget that many people struggle with it and are impressed by those who have the discipline to learn on their own.

How it works

If you learn best when you’re free to work alone, follow your curiosity and try things out, you may be well-suited to learn programming your own. This is arguably the most affordable way to learn to program, as there’s an incredible array of free resources available on just about any programming topic you can imagine. On the flipside, this method of learning to program can be the hardest, as you may not have someone to reach out to if you don’t understand a particular concept, or get stuck on a frustrating bug.

You’ll need to be very disciplined about learning on your own. With no clear structure or curriculum, it’s easy to get sucked down rabbit holes. You may also find it difficult to figure out what not to learn. This is one of the hardest aspects of learning to program: with so much you could potentially learn, what do you ignore and what do you focus on?

If you can look back on your life and think of other instances where you’ve taught yourself a skill through self-learning, then you might be able to teach yourself how to program. Even if you end up going down one of the other learning paths suggested here, having some knowledge of programming basics can give you a head start in all of them.

If you do decide to try to teach yourself, you have a lot of learning styles to choose from: books, YouTube videos, written tutorials, interactive code exercises and online courses. There are even some games that teach you some of the basic concepts of programming.

It’s inevitable that you will get stuck occasionally. Make sure that you have a support network in-place if you decide to learn on your own. This could be an online community like Code Newbie, the contributors at Stack Overflow, or a friend with programming experience.

It’s worth noting that many of the other options in this article require you to be in a really good life position, with abundant time, money and energy at your disposal. How lucky! It’s possible to learn programming even if one or more of these elements is missing, but it’s more challenging. Self-learning offers the most flexibility if you are strapped for time, money or energy, as it flows at your own pace, and costs as much or as little as you want it to.

Option 4: Mentoring

Cost: Free, though you might want to buy your mentor lunch now and again

Speed: 3 months to 1+ years

Job Prospects: Programmers who learned through mentoring have similar job prospects to self-taught programmers. However, if your mentor works as a programmer, they might be able to help you with the process of getting a job.

How it works

Having a mentor when you’re learning to program is invaluable. They’ll be able to target things you need to learn, spend more time on concepts you’re struggling with, and help you when you get stuck. If your mentor works in the industry, they may be able to give you up-to-date recommendations on what you should focus on.

The benefits of a good mentor are many. If you’re lucky enough to have someone willing to help you learn how to program, then you should make the most of it.

There are, however, a few things to be wary of. The first is that you don’t want your mentor to be a single point of failure for your learning. If they’re unavailable, or can’t meet with you as often anymore, your learning shouldn’t stop. Make the most of your mentor when they are available, but don’t be totally dependent on them. For this reason, I’d recommend learning from a mentor in-tandem with one of the other learning paths mentioned here.

Another thing to be wary of is that your mentor is just one person, with one way of doing things. Even the most well-intentioned mentor brings certain biases and preferences to the table. It’s important to expose yourself to a broader variety of influences and other programmers. You can participate in online programming communities, attend local programming meetups, or even find an additional mentor for a contrasting (or potentially complementary) perspective. Websites like Codementor give learners a platform where they can ask for immediate coding help or set up long-term mentorships with expert developers from all over the world.

Option 5: Build something and learn as you go

Cost: Free, other than the cost of any tools, subscriptions or services you need in order to build something

Speed: Anywhere from one weekend to several years

Job Prospects: For the most part, your job prospects will be the same as most other self-taught developers. However, having something that you’ve built and can show prospective employers will help you stand out in the interview process.

How it works

Not all of us are lucky enough to have something that we desperately want to build. If you are one of the lucky ones, this could be a great way to learn how to program.

In essence, this method involves a lot of “just in time” learning. You need to figure out how to get to the next step of what you’re building, so you do some research, learn how to do it, and then apply it. You’ll spend a lot of time Googling “how do I” questions and looking at answers on Stack Overflow. Though it seems a little hacky, this can be one of the best ways to learn, since you’re not learning in the abstract. Instead, you’re learning and immediately applying what you’ve learned in the context of something that you care about. This is one of the best ways to retain more information and make progress quickly.

The biggest risk with this way of learning is copy-paste driven development (sometimes called cargo cult programming). You need to do something, for example, create a clickable button with rounded corners. You find an answer on Stack Overflow; someone has shared a snippet of code that seems to do exactly what you want. Awesome! But if you go ahead and copy and paste the snippet into your project without understanding what it does, you aren’t really learning. This is where it’s important to be clear on your goals. Are you building in order to learn? In which case, you should stop and take the time to understand the code snippet before you use it.

Working towards a finished project can be a fantastic source of motivation when learning to program. In fact, in my time spent mentoring people who are trying to learn to program, those who are applying what they learn to a personal project tend to progress faster than those who aren’t.

Option 6: Or… some combination of all of the above!

There’s nothing that says you have to pick one path and stick to it. My own personal path to learning programming was a winding one: I started learning on my own through books, tutorials, and online courses, then did a coding bootcamp, then worked on a personal project, then had a mentor… I even briefly enrolled in a Computer Science degree! Different methods of learning will work for you in different situations, and at different times. One single method may not give you everything you need to reach your programming goals, whether that’s getting a job at a great company, or building an MVP of your latest startup idea.

If you’re still not sure which path is best for you, I’d suggest trying self-learning first. It’s the cheapest option, and the lowest risk. If it works, then you’ve potentially saved yourself a chunk of money you’d have otherwise spent on a coding bootcamp or college degree. If it doesn’t work, the learning you’ve already done will give you a headstart down any of the other paths to learn programming.

Best Way to Learn Programming – Postscript

Many people struggle to choose between a coding bootcamp or self-learning, or even a coding bootcamp or Computer Science degree. My advice: if you’re in a rush to break into the industry or learn how to build something, do a coding bootcamp. If you struggle with formal education or have dropped out of college in the past, do a coding bootcamp. If you’ve got time, enjoy academic environments, want to be able to work anywhere in the industry and you like the idea of having a well-rounded knowledge of computers, do a Computer Science degree. Of course, there are many other personal factors that will influence your decision, but all things being equal, this is my advice.

If you’re impatient to get started working as a programmer but still want to get a Computer Science degree, another option is to learn on your own or do a bootcamp, get a Junior programming position, then study Computer Science part-time. This route requires a lot of passion for programming, because you’ll be programming all day at work, then coming home and programming more for school! This isn’t for everyone, but it’s a viable option if you’re up for the challenge and want the best of both worlds.

Insights and tips found in this article are based on Natasha Postolovski’s experiences as a self-taught developer, now working as a software developer at ThoughtWorks in Australia. You can follow her on Twitter at @npostolovski.