Introduction
All of us deal with procrastination at some stage in our lives. Some of us deal with it on a daily basis. With beginners who are learning to program, however, procrastination is such a big problem that it can result in them completely giving up on their journey.
I have been a software developer for over 10 years and have been training beginners and junior developers for the last 5 years. And in my experience, I have seen many beginners go through this journey in a certain pattern that results in them procrastinating and eventually giving up.
Below I share some of the root causes of why some beginners procrastinate. I also share what I have found to be good, actionable solutions to be able to deal with each of those root causes.
1. Being Stuck in Tutorial Hell
Problem
With the infinite number of tutorials at their disposal, it is extremely easy for beginners to binge-watch them. At the beginning watching these tutorials feels exciting. Feels like you’re achieving something.
This is similar to watching intro videos for those home workouts programs. You click play and instantly you can feel like you’re putting on muscle and shedding that extra fat with every minute of the video you watch!
Programming tutorials perpetuate the same problem. The first few videos are so basic they lull the viewer into a false sense of “achievement by watching”. You feel like you could just passively watch and/or listen and become an expert programmer. This is akin to running in place and expecting to get to your destination.
Sometimes people go a step further. They try and build the program along with the tutorial. But once again, the beginning is easy but as you progress, it starts to get more and more difficult. Usually the jump from easy to difficult is so wide it’s impossible to bridge that gap.
Once you hit that wall, it’s easier to start putting off dealing with it than to face it head-on.
Solution
Go with courses and tutorials that focus on hands-on practice as part of the progress. This doesn’t include material where courses are added as an afterthought. Do not fall for 8-9 hour “courses” on YouTube that rarely teach you anything and are a giant waste of time. These types of videos are designed to get the channel’s watch hours up and to upsell other courses.
It’s also fundamental to find a good supportive community to help you in your journey.
Once you’re familiar with the basics (not a master, just familiar), start working on a nontrivial project that you’re personally invested in. It’s important that this be nontrivial so you are forced to figure out how to deal with different challenges. When you hit those challenges, go and find help specific to those things.
This will help you learn better, faster, and in a more focused way. And you get out of the cycle of watching endless tutorials for the sake of watching endless tutorials.
And remember, you do not need to know everything about something before you can start implementing a solution.
2. Setting Unachievable Targets
Problem
A common problem when you’re just starting out, and even as a junior with some months of experience, is the habit of setting targets that are simply unachievable. The biggest culprit of this is a lack of understanding about the scope of what you’re planning.
I’ve seen countless examples of “first projects” that are more suited for experienced developers. These include e-commerce projects, “simple” video game engines, complex mobile apps with the coolest effects one can imagine, among others.
While all these projects would be “so fun” and “such a great experience!”, they’re simply unrealistic to achieve in a reasonable amount of time as your very first project.
Simplified versions of these and other projects can definitely be made but the problem, in this case, can be a simplification to a point where they become extremely trivial for projects of this category. This results in you losing interest as well since tasks that do not keep you sufficiently engaged result in burnout setting in very quickly.
Solution
Think of projects that automate something for you. This has to be nontrivial but also of a small enough scope so you’re able to both conceptualize it and use it when it’s done.
To make this exercise easier on yourself, think of software as a means to automate information processes. For example, if you use a traditional planner, see what you can create to supplement your planning habits (not necessarily replace your planner). If you wake up to an alarm and have little handwritten notes of encouragement on your mirror, see if you can create an app that displays some encouraging message when you wake up. None of these things are designed to replace your existing habits or ways of doing things but rather supplement them.
This ensures three things:
Keeps the projects small and manageable.
Keeps the projects nontrivial as they solve an actual problem
Gives you an insight into the type of reasons behind the conception of most business applications.
There are an infinite number of projects you can come up with but whatever you do, don’t bite off more than you can chew.
A project that you’re familiar with, one that’s important to you, is also easy to expand on later. Nothing says the small applications you create can’t turn into successful commercial projects later down the line.
A simple rule of thumb is: don’t fret over getting to the summit of Mount Everest, just plan to get to the next peak.
If climbing mountains isn’t your thing then think of it as losing weight. Do it one pound at a time.
3. Taking the Wrong Advice
Problem
The software industry has the unfortunate situation of being inundated with subpar training material that serves only one purpose, which is to confuse everyone who happens upon it. This is the result of a lack of any kind of standardization when it comes to teaching software engineering. Even decent university courses are divorced from reality on the ground.
Given this plethora of choices, it is no wonder that a lot of beginners are unable to discern the right choice from wrong in their particular case and for their specific situation. Most new developers suffer from decision fatigue1 and then end up going with the first piece of advice they come across.
It isn’t surprising that this ends up being the wrong choice in most cases which eventually leads to the beginner getting disheartened and then either giving up or putting off the training process.
The training isn’t just bad for beginners2. It’s bad industry-wide. Even experienced developers fall for things that end up contributing to this cycle of bad advice.
Solution
There is no magic bullet for this one, unfortunately. The best way that I have seen around this for beginners is to find a mentor. This doesn’t mean you go find the first experienced developer you see. Most developers, experienced or otherwise, aren’t well suited to act as mentors.
It is essential that you find someone who is experienced in training people. This mentor should be someone who is knowledgeable in the market space you’re interested in.
Another, very important thing is that the mentor should not be someone who’s dogmatic or they will only preach to you, rather than give you advice.
Read books instead of watching tutorials or courses if you have the luxury to choose between the two. Books written by field experts are still of relatively better quality than most of the courses you find in the wild.
Be selective in your choices of people who you choose to learn from and online materials you choose to follow. Just because something shows up in your video feed or has a ton of likes doesn’t mean it’s necessarily good advice. If you feel like your time is being wasted, it will naturally demotivate you.
4. Lack of Commitment
Problem
This may sound a bit controversial but the reason a lot of the times beginners procrastinate is that they are simply not committed enough.
This can be partially related to the point above. There are seemingly too many free resources that give you the perception of little to no investment required to learn this new skill. This plays tricks on your mind where you end up putting in little to no effort and then realize you’ve wasted the most valuable of commodities at your disposal: time.
Another issue is that while you could start out fully motivated and ready to go, over time, especially after hitting some roadblocks, that motivation wanes. In the absence of someone or something keeping you accountable, this results in you losing that motivation completely and you either giving up or procrastinating.
Sometimes even having someone to keep you accountable isn’t enough as beginners don’t even know why they’re learning to become a developer in the first place. “It looks like it’s super fun” and “I want to sit on a beach and earn big bucks while sipping martinis” can only take you so far!
Solution
I once spoke with a missionary who refused to give away Bibles for free. It baffled me as to why he thought charging for Bibles was a good idea when anyone interested in the subject could just walk over to the nearest church and pick one up for free.
He told me that he found that when people paid for the Bible they actually read it and came back to him to ask relevant questions. Mind you, he wasn’t charging an arm and a leg. He was just charging $5 dollars per Bible.
Obviously, learning to become a software developer is no spiritual matter. However, the same principle applies. Too many beginners are attracted by “free” courses or “free” tutorials. But the fact of the matter is, nothing at all is ever for free. Even if you’re not spending money on the course, you’re investing your time, and time doesn’t come for free.
I am not advocating that you buy any random course online, either. Most courses on platforms like Udemy are of the same quality as free online courses, if not worse.
Choose your courses wisely and if you’re able to spend a little money and get active support from the course creator, then it is, in most cases, a better route than wasting your time on “free” resources.
The unfortunate reality is that most people do not associate time with having any worth at all. This is why I recommend you spend money on courses.
I recommend you spend a couple of hundred dollars but even if you spend $1 dollar you will see that it will keep you more motivated than when you don’t spend any money on it at all.
5. No Destination
Problem
I touched on this in the point above but this bears repeating. In fact, this is the most important point of all.
Many beginners don’t know why they’re learning to become software developers. Most of the answers revolve around some fun and idealistic understanding of what software development is all about.
Most tutorials online and those “day in the life of” videos online show a picture that isn’t true at all. Tutorials make everything look easy, and when you try your hand at the same thing, it feels like you’re just not cut out for it.
All of these things can make it very easy to either give up or procrastinate. Why should you keep going if you’re having such a difficult time with the simplest of things?
So many beginners don’t have a destination. They don’t have a deeper understanding of why they want to become software developers.
Software development is hard. It is hard when you start learning and it is hard when you’ve been developing software for over a decade. When you don’t have an anchor to keep you steady, you will do anything to put off less than enjoyable tasks, which the software development journey is full of.
Solution
This one is more straightforward and requires no monetary investment. Take the time to understand why you want to become a software developer. It is quite possible, by the way, that you might come out of this thinking software development really isn’t for you, and that’s fine.
There are these memes and job ads where they talk about software developers as if we are creatures who live and breathe code. This couldn’t be further from the truth. We all have our reasons for which we started working in the industry. In most cases, it is just as simple as wanting to take care of ourselves and our families. And these are perfectly valid reasons and potentially even more motivating than “I love code”.
You have to find your reason. What is it that you hope to achieve when you've gone through the whole journey of learning software development and then getting work as a software developer? If it’s your family, use that to keep yourself anchored. If it’s money, focus on that to keep you motivated.
No reason is an invalid reason as long as it serves the purpose of being a constant. And this is important. If your reason for doing something is always changing you will find it very hard to stay motivated as the next day you will have found a new reason and the previous anchor will be long lost. So, make sure that your reason for becoming a software developer is something that will stay the same for the next 5 years.
Once you have this clear, get to work. With this newfound focus, you will swim past even the most difficult challenges that the software development journey throws at you.
Conclusion
Many people deal with procrastination as if that’s the root cause of the problems they’re dealing with. But I’ve found that procrastination is just a symptom of some of the things I’ve covered above.
It’s very easy to just try and “stay motivated” but those empty words serve no purpose other than to further frustrate you in your journey.
I believe that if you apply some or all of the things that I recommend above as solutions, you will find yourself better equipped to stay motivated.
I’d love to read your perspective on this. What are the things in your journey that have resulted in you procrastinating? What are the things that have worked for you and what haven’t?
Greg Young - Stop Over-Engineering