How to Learn Programming Without Feeling Bored, Frustrated, or Defeated

You’ve just bought 3 courses, 2 books, and have plenty of time to binge them all. As you start watching your new video course, the room turns black. After a while, you’re not even listening to all the words. It’s literally putting you to sleep.

Or maybe you got a subscription to an interactive learning platform like Codeacademy, Datacamp, Dataquest, or TreeHouse. You could now practice writing code alongside learning, which was exciting at first, but also became monotonous. You complete exercises just so that it shows up as 100% completed and doesn’t nag you later.

Or, you have the best book. Unlike the video courses or the interactive learning platforms, the book doesn’t make any claim of a high paying job or a rich career in machine learning. It’s just too much to the point. You get an uneasy feeling inside that you might be missing out if you don’t have the latest shiny course on Python. Reading the book feels like being stuck in the stone ages.

The wrong process that beginners follow to learn programming

I call this process “programming confusion.” This is how it works…

First… you decide that you want to build something. It could either be a mobile app, a website, or a robot, or a machine learning model. Your primary intention could be curiosity, or even getting a high paying job.

Second… you research online how to go about it. You even ask people on various forums and communities. A very small proportion would actually give you wise advice. But you won’t understand their importance yet, and such advice usually get buried under tomes of “non-helpful but helpful” comments. “You can do it, but it’s a lot of effort, so be careful.” Or, “You really think you would be able to build it by just learning Python?” Such responses seldom contain actionables, and they passively try to imply that since those people couldn’t do it, there is no way you could.

Third… regardless of where you ask, you now end up with 3 courses, 2 books, and download a special code editor that someone claimed is the reason for any developer’s success.

Fourth… you start with the first course. It gets so boring after a while, that you’re just skipping the video or playing it at 2x speed. The only reason you’re watching it fully is so that Udemy can say you completed it, and that gives you a false sense of progress. When you get stuck, instead of attacking the concept where you got stuck, you switch to “learning” something that you “already know,” so that you don’t feel confused and frustrated.

When I was learning to play the guitar, an instructor once told me that people tend to practice what they can already play well, instead of practicing what they’re not good at. Why? Because they don’t want to look bad. They don’t want to play bad after learning so many amazing things. How can they have difficulty playing anything after learning for so long? Their solution? Avoid things that are difficult, because the fault is out there, not in you.

Fifth… you forget your original ambitious goal in the midst of information and opinion overload. Rather than spending time wondering how you’d go about building your project, you spend more time researching which course to buy next. Each time, you set out to solve the wrong problem. Then, after a year, you look back and realize that you really didn’t achieve what you set out to achieve. Depending on how you see it at that point, you either blame it on your learning ability (and so you feel defeated), or you blame it on the course. At this point, the cycle starts again…

Before you start learning, understand the 6 levels of learning

This is not going to be useful just in learning programming, but anything else in your life too. I worked at an EdTech (education technology) startup for over 3 years. I met wonderful people specializing in instructional design. It changed my view about learning anything at all in my life.

You can view learning as comprising 6 levels. What I’m about to describe is called Bloom’s Taxonomy.

Level 1, remembering. This is where you recall facts and concepts. You can repeat what someone else did, or memorize something. When you learn the syntax of Python, this is what you’re doing.

Level 2, understand: You’re able to explain ideas and concepts in your own words. You don’t yet know the full implication of the knowledge. This usually happens when a course shows you 3 different examples of using for loops and you finally “get it.”

Level 3, apply: Now that you’ve memorized a few ideas, and have also understood them, you need to apply it. Courses generally have you do small exercises. It is important that you practice on problems that you’ve not seen before, so that you’re sure that you’re applying and not remembering.

Level 4, analyze: You draw connections between ideas. You figure out ways of translating a for loop in Python into an equivalent while loop. You figure out 3 different ways of reading CSV files, and what minor/major differences those methods have.

Level 5, evaluate: This is where you’re able to take your own decisions, and justify your actions. Let’s say that in the analyze stage, you could find similarities and differences between 3 different ways of working with CSV files. In the evaluate stage, you’d pick one of them with strong reason. Any job requires you to make decisions.

Level 6, create: This is where you’re able to create new things from scratch. Till you get to this level, you mostly follow tutorials to build a project that’s been already built. Remember, “new” here does not refer to the end-product, but whether you’re able to come up with an approach on your own. This level also includes you ability to research and investigate things on your own, which is learning from your own research rather than relying on instruction.

An image of the Bloom’s Taxonomy. Created by Vanderbilt University Center for Teaching.

Once you’ve understood this, figure out where you are on the Bloom’s taxonomy. One important thing to note is that you’d be at different levels for different concepts. For example:

  1. You can be at the create level for basic Python syntax
  2. However, you’d be at the apply level for web development
  3. Moreover, you could be at the remember level for machine learning at the same time

How to advance these levels without getting bored or frustrated

Now that you’ve understood how learning works, let’s do a better job with all the courses, subscriptions, and books that you have bought.

Step 1: Find your pace

You should always start with the most concise mode of learning. These are usually books. In Python’s case, it’s the official tutorial. Check if the tutorial makes sense.

If you get confused easily or find it too fast, time to slow down the pace. This is where you move to a book. If the book makes sense, then stick to it.

If you don’t have a prior technical background, you may find the book hard to digest. In this case, switch to a interactive course or a video course. Video courses are long-winded. They don’t teach “more depth,” but teach the same thing using more examples so that you can learn it more easily. More hours in the video does not necessarily mean more quality content. This is the primary reason you get bored.

Once you’ve found your pace, stick to it. It doesn’t matter what you use to learn as long as it is working for you.

Step 2: Take notes to help remember – level 1

I don’t like detailed note taking. The video or text itself is a note of something, and it really doesn’t make for you to take detailed notes on top of those notes. However, you can make a note of key concepts or “words” being covered, just so that you can remember them.

You may not understand all of them. If you do understand everything, then you don’t need a note to remind you. You’ll just know.

Step 3: Try expressing concepts in your own words – level 2

Go back to your notes that have key concepts written down. Now, try expressing each of them in your own words. You can use non-technical analogy too. Even better, try explaining it to a friend.

At this point, if you are not able to explain a concept, then go back to the book/course and to get a refresher. If the book/course does not go into details to your satisfaction, search online or on YouTube. You could also refer to any supplementary books/courses that you would have bought (only if you already have them).

Step 4: Do exercises given in the book or course – level 3

For all the concepts that you could explain, do the exercises that come with book or the course. Make sure these exercises are not already familiar to you, or else you’d just be remembering rather than applying.

Good exercises are hard to come by. If your video course doesn’t have it, then look for them in books. Books usually have plenty of exercises.

Step 5: Take a step back and analyze – level 4

Do this step only after you’ve significantly progressed in the course. This is where you get the big picture. To get the big picture, the big picture has to exists, which means you need to have progressed to a good extent in the course.

Look at all the concepts that got covered so far. Group them by similarity. You’d realize that for and while statements are “loops.” You might group together concepts like functions, classes, etc.

Try looking at each idea and see what relationship it has to other ideas. Which other ideas are similar? Which ones are diametrically opposite? Which ones are not even related (orthogonal)?

Go back to the course material if you have to, but try having this idea in your head. Once you’re successfully done with step, don’t go back to your course. The course has served its purpose. It has introduced you to a new world. This is where you let go of the training wheels, so be prepared for it. If you keep going back to your course, you’ll end up being even more bored and frustrated, because you’d be wasting time without improving your ability.

Step 6: Figure out multiple ways of doing things – level 5

Go search for tutorials online. If a tutorial teaches you how to read CSV files, follow the tutorial and implement it. Now, look for 2 other tutorials that teach you how to read CSV files, but do it differently. Implement those two approaches too.

Now, compare the 3 approaches. What’s similar? What’s different? Do you have to look for more information online to get the answer? Do it.

Finally, try answering this question: “What’s the best way to read CSV files? Does it depend on the situation? What parts of it?”

This is where you’re entering the field of independent research instead of learning from instructional material.

Step 7: Create a project that you’ll not change – level 6

Yes, you’ve heard this a million times before. “Create a project if you really want to learn.” However, that’s not the only part. Most people I’ve seen start with a project, and then keep simplifying the project each time they hit a roadblock. That’s bad, and it’s a very dangerous attitude to have.

Decide on a project and don’t change its scope. You will hit roadblocks. It will feel as if you’re stuck forever on something. You’d be tempted to just abandon the project and do something that’s “productive.” Don’t.

One you decide to work on a project, stick to it. This is how you’ll learn what to do when you hit a roadblock. This is where you get to test the depth of your knowledge.

In the real-world, project scopes do change. They don’t get simplified, however. They keep getting complex. Thus, it’s important that you don’t give up easily.

Avoid the “courses handicap”

There is a phenomenon that can absolutely cripple your ability to keep making progress in programming. First, understand the difference between learning by instruction vs. learning through research.

As you advance in learning anything, the amount of instructional materials would start becoming sparse. This is the reason there are so many beginner Python tutorials, but so little “advanced” ones. You can learn how to build a simple blog, but no tutorial on how to build a full-blow, production-ready, search engine.

Although a lot of people hate the educational system, but the intent behind the Masters degree is to teach you how to research by yourself. Towards the end of your masters, you learn how to write a paper based on your original research.

Instruction is all about, “tell me how to do this.” Research is all about, “tell me the facts, I’ll figure out what’s useful.”

The problem with the endless dependence on courses are that, you’ll never learn/understand anything that’s not written down somewhere by someone else. You’ve outsourced thinking to the outside world.

If you want to reach the evaluate and create levels in the Bloom’s taxonomy, stop relying on courses. They can get you till the analyze level (that too, partly). After that, the only thing they’ll do is hold you back. Once you’re able to analyze ideas, never go back to courses just to “validate your knowledge.”

Evaluation requires YOU to make a decision. Creation requires YOU to design the solution. This is where you change your approach from relying on instruction to focusing on personal research. This is where you can’t blindly believe others, because other experienced developers would also make mistakes.

In conclusion

Make sure you’ve understood the 6 levels of learning, and how it applies to you while you’re learning. Once you’ve understood that, follow the 7 steps whenever you’re embarking on learning anything new. These steps will make sure that you’re always making progress.

Finally, avoid the “course handicap.” This is where most of the beginners get trapped for what seems like eternity. If you’re serious about getting a good job one day, or want to make a switch to a better one, don’t get trapped in the “course handicap.”

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Site Footer

Sliding Sidebar