Teaching yourself software development is hard. Anyone who tells you different most likely hasn't done it before.
It's a huge life commitment to go from newbie to career programmer. You have to sacrifice a lot to make it happen. There are many good reasons people quit. People usually don't have the time or interest to put themselves through hours of watching tutorials or building demo sites.
After thinking about my own experiences, I feel like there is an aspect of self-taught development that people don't talk about enough. I believe there is an internal game you need to learn how to play to be successful. The people who learn how to play and win this internal game are the ones who make it through to the other side.
In this article, I'm going to describe the inner game of self-taught development and discuss how you can ultimately win.
Discomfort is unavoidable
Anytime you learn something new, you have to step outside your comfort zone and try things beyond your current abilities. From an evolutionary point of view, this makes sense. Breaking habits are dangerous because doing something new can put us in a situation where our survival is at risk.
As a result, discomfort is not optional in learning something new, it's a requirement.
Self-taught programmers experience the worst of it. In other learning environments, you have a coach or other peers to help you through the discomfort. However, teaching yourself programming often happens in isolation. Self-taught programmers are required to learn how to deal with the discomfort on their own. You are required to be the coach, student, and cheerleader all at the same time.
Learning programming can be an especially uncomfortable experience because it's often a non-linear learning process. There are times where you feel like you are at the same skill level for days or even weeks. You're still learning little bits of information but there are no signs of tangible progress. While teaching myself Android development, I vividly remember being helplessly stuck for over a week trying to set up and query my database.
I like to compare the learning process to doing a 10,000 piece puzzle without a picture to guide you. Even if you find a few subsections that link up, it takes a lot of time and energy to figure out how it all goes together.
On top of all of this, there isn't a guarantee that the skills you are developing will give you a future pay-out. The app you are trying to make might not be good enough or the job you are hoping to land might not be there when you are ready. Self-doubt creeps in and you start asking yourself "Is this worth it?"
The internal game
The internal pressures stated above, among others, are constantly working against you making the learning process harder. These opposing forces set the stage for what I like to think of as the inner game of self-taught development.
Since every game needs an opponent, the opponent of this game is best summarized by what Steven Pressfield, author of The War of Art, calls Resistance.
"Resistance cannot be seen, touched, heard, or smelled. But it can be felt. We experience it as an energy field radiating from a work-in-potential. It's a repelling force. It's negative. Its aim is to shove us away, distract us, prevent us from doing our work."
The ultimate goal of Resistance is to keep you out of 'danger' and in your comfort zone. It doesn't want you to progress in your life because progress cannot happen without risk.
This is why Resistance finds such a good friend in the learning process.
It's not a stretch to say everyone reading this knows exactly what Resistance feels like. It's that feeling you get when you know you have something important to do but just can't seem to make it off the couch.
The feeling itself isn't the dangerous part, it's how we act in response to it. Resistance will never show its facing directly. Rather, it will manifest through other means. You might be familiar with some of its greatest hits…
1) Binging Netflix
4) Happy hour
5) This article
These things are harmless on their own. The danger comes from letting Resistance win for multiple days in a row. If it wins too often, you will find yourself giving up and back where you started.
How do you win?
Here's the catch, you will never fully beat your internal opponent. Resistance will always be with you trying to distract you from the important work. Important work is something new and different and Resistance hates the new and different.
Which brings me to my original point. The people who successfully teach themselves programming have accepted the permanence of this internal opponent and have learned how to play the internal game anew each and every day.
Pressfield says it best:
"I feel it in my guts. I afford it the utmost respect, because I know it can defeat me on any given day as easily as the need for a drink can overcome an alcoholic"
Unfortunately, there is no easy strategy to winning this game. However, there are a few things you can do to increase your odds.
Know thy enemy
"I'm keenly aware of the Principle of Priority, which states (a) you must know the difference between what is urgent and what is important, and (b) you must do what's important first."
Don't just be aware of what Resistance feels like. Also be aware of all the different ways Resistance will manifest. As stated above, it's not always obvious.
The best way to identify Resistance is to be mindful of the root causes of your actions. For example, if you find yourself cleaning your apartment for no great reason, stop and ask yourself why cleaning right now is important. Once you think about it rationally the true reason usually shows itself (and you'll realize your apartment is probably not that dirty).
Keep your third eye strong and always be on the look-out. The more you notice the ways Resistance manifests itself, the more ready you will be to combat it.
Remember, anything that is keeping you from your important work, that's not urgent, is most likely the work of Resistance.
Value Consistency over Passion
"Resistance outwits the amateur with the oldest trick in the book: It uses his own enthusiasm against him. Resistance gets us to plunge into a project with an overambitious and unrealistic timetable for its completion. It knows we can't sustain that level of intensity. We will hit the wall. We will crash."
Passion is great. Don't get me wrong. But passion is short lived. It's like a sugar rush. The highs are high but there will always be a crash. Maintaining high passion over a long period of time is difficult and draining.
Resistance actually likes passion and will use it against you. You will find yourself saying stuff like, "I don't feel as passionate as I did yesterday. I should take it easy." Resistance - 1. You - 0.
The better strategy is to value consistency over passion. Consistency allows you to find freedom through discipline.
Rome wasn't built in a day, it was built brick by brick. I know, I know it's cliche, but it's true. It takes time and patience to learn how to become a software developer. Knowledge and skill aren't things you can just upload to your brain. You need to apply consistent pressure to make new things stick.
Habits are one of the most powerful tools human possess. They allow you to automatically do things without having to think about it. Resistance hates habits.
Resistance wants to you to think. It wants you to sit there and consider all the other things you could be doing. But don't let it. If you develop a good study routine, you can let your habits play the internal game for you.
If you truly want to succeed, you will need to embrace the tough reality of the self-taught programmer. Be ready each and every day for whatever the Resistance throws at you. Be aware of its tricks and keep the strategies from above in mind.
The game isn't easy, but it's winnable. We are all capable of winning this internal game because we all already have in some capacity of our lives.
So suit up, dig in and be ready each day for whatever comes at you.