Being able to code is one of the most useful and profitable skills you can have. More than ever before, companies need programmers. Advances in AI, blockchain, VR, and other digital technologies ensure that this demand won't slow down any time soon. So it's no surprise that many people want to learn how to code.

And it is indeed a thrilling world. But if you dive into programming without any prior experience, it can be quite a confusing path. It's not always easy to understand what you should learn first and where you should focus.

I have been a programming teacher for more than three years. I teach basic programming, data structures, web programming, and I help my students prepare for job interviews. Over my time teaching students how to code, I've identified some questions that they keep on asking. My intention with this blog post is to answer those questions and give some advice on what you should focus on to move from programming beginner to programming expert.

A Survey of Experienced Developers

I didn't want to lean entirely on my advice. That's why I surveyed 21 developers who have more than five years of experience. Here are their answers to some of the most common questions my students ask.

Do I need a degree to become a programmer?

84.6% says no and 15.4% says yes

The simple answer here is no. I know many successful programmers who don't have a formal programming degree. There are enough online resources that teach you how to code.

This being said, I wouldn't ever discourage anyone from perusing a professional degree if that's what they want. The rigor that an academic environment demands, with its deadlines and tests, can help those who lack the initial discipline to do things on their own.

Do I need to know math for programming?

53.8% said no and 46.2% said yes

As you can see from the almost 50/50 split, this is a controversial question. There doesn't seem to be a consensus here. However, it's undeniable that programming requires both the logical and abstraction skills intrinsically linked to mathematics.

I often hear engineering students complain that half their curriculum is math and physics, which they think they won't need professionally. But I believe that the value you obtain from them isn't just about their direct applications in real-life scenarios. It's about the problem-solving skills they help you develop.

Moreover, math and physics help you understand concepts that are directly related to programming. All the below concepts are fundamental concepts in computer science (CS):

  • Vectors and arrays in linear algebra.
  • Logic and graphs in discrete mathematics.
  • Functions in calculus.

Regardless, a significant percentage of experienced developers don't think math courses are the only way to acquire these skills. That's why it's reasonable to say that math is preferable, but not strictly necessary to learn how to code.

If I want to learn math, which courses should I take?

It's always a good idea to check the CS curriculum of any college to understand what courses are important. In my survey, the math courses that developers highlighted as most useful for programming were:

Probability and statistics 61.5%, discrete math 46.2%, linear algebra 46.2%, calculus 15.4%, physics 15.4%

Most of these courses have some prerequisites. For example, probability and statistics require you to understand calculus, which requires you to understand algebra.

Where do I find good programming courses?

The websites that the surveyed developers mentioned most were:

There are many other options out there, so I encourage you to explore. Try a few sample lessons on different websites to see what teaching style suits you best. Also look at the ratings of each course and what other people think of it to choose the best course for you. Just make sure that the courses are up-to-date. Technologies evolve fast and a course can quickly turn obsolete if it's not properly updated.

The Programming Path

Step 1: Understand How a Computer Works

Before you learn any programming language, get familiar with a computer. What are its main components? What's the role of the operating system? How does a CPU work? What about memory? How does the Internet work? Learning this first will help you understand how programming languages work, particularly lower-level languages such as C and Assembly.

Step 2: Learn Your First Programming Language

We could spend hours discussing which programming language is the best one to get started. In the end, it's a matter of preference. Based on my opinion and those of the developers in the survey, I suggest you start with one of the following languages:

  • JavaScript: a tremendously popular programming language. Also comes with the advantage that you can use it both for front-end and back-end purposes.
  • Python: widely used for machine learning. Has a clear syntax and is relatively easy to learn and use.
  • C# / Java: both have similar syntax and support object-oriented programming (an important programming paradigm you should definitely learn about).

Your first programming language is meant to familiarize yourself with core programming concepts such as control structures, conditionals, loops, functions, etc. It needn't be the language you'll use professionally, but that's okay. A developer is never married to one programming language. You'll most probably learn several as you gain more experience. As a programmer, you should always be willing to learn something new.

Step 3: Follow a Programming Roadmap

Once you've learned your first programming language, it's time to move on and learn other technologies. This is where it gets confusing. There are so many options out there! It can be really difficult to know what to study in what order. This is where a good programming roadmap can help a lot. Here's an example of a full-stack developer roadmap:

The above roadmap shows that a full-stack path has two sides: front-end and back-end. On the front-end side, you learn three fundamental languages: HTML, CSS, and JavaScript. Once you've learned JavaScript, you can continue with a framework or library such as React or Angular. On the back-end side, you'll find languages such as Python and C#, as well as options for handling data with SQL and No SQL databases.

This roadmap is meant as an example. It's not the one you necessarily need to follow. Maybe you want to be a data scientist instead of a full-stack developer! You can find many programming roadmaps online. Here are just two examples:

Step 4: Explore Advanced Topics

If you want to sharpen your programming skills, you must have a good notion of data structures. Although most programming languages will handle data structure automatically for you, thoroughly understanding them will equip you with ideas to construct your own algorithms. Knowing how to build arrays, queues, hash tables, trees, linked lists, heaps, and graphs will certainly improve your coding skills.

Another important aspect of algorithms are search and sort techniques. Understanding the time complexity that comes with an algorithm is paramount to understanding its performance.

Step 5: Practice

There's no way around it. You'll need to practice to get good. I advise solving algorithmic puzzles, because these are used to filter out candidates in most job interviews. I also recommend the book Cracking the Code Interview by Gayle Laakmann McDowell. Inside, you'll find plenty of exercises commonly used in job interviews.

In addition, work on your personal projects and explore open-source projects where you can either contribute and get code reviews from experienced developers or simply check the codebase and see how things are done.

Step 6: Beware of Frustration

It's important to understand that you'll inevitably face moments where you'll feel stuck. Even when you follow all instructions, step by step, things won't go as expected. Patience you must have, young Padawan. Google is your friend and will help you out in most scenarios. Alternatively, you can ask a programmer friend for help.

Just don't assume that "you're not good at this" or that "your brain isn't meant for programming." That's your impostor syndrome speaking. Learning how to code takes time and consistency. If you have the endurance and perseverance to continue in spite of the setbacks you'll inevitably face, I can assure you that you'll have no regrets. On the contrary, you'll quickly realize that the programming journey is incredibly worthwhile.