DEV Community

Victor Cassone
Victor Cassone

Posted on • Updated on

The Inner Game of Self-Taught Development

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
2) Self-doubt
3) Procrastination
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.

Did you enjoy this article? Sign up for my email list to receive similar content.

Top comments (10)

jonrandy profile image
Jon Randy 🎖️ • Edited

My experience was very different, and I have to say I never found learning to program hard at all. I started aged 7, in 1983. I had a ZX Spectrum and back then pretty much anything you did on it involved typing commands. The software that came with it was written in BASIC so it was easy to stop the program and look at the code. After exhausting the 'fun' potential of the provided software (limited) - curiosity took over - 'what happens if I change this, or that'. It was a voyage of discovery - largely figuring out concepts for myself, referring to the BASIC reference manual when things didn't work, borrowing inspirational kids programming books from the local library, and typing code in from computer magazines. From there, there was a natural progression via different machines and languages to be the developer I am today. It's always been fun and interesting - still is

victorcassone profile image
Victor Cassone

Thanks for sharing your experiences! I think you bring up some good points.

When I was teaching myself programming, I was so focused on the destination (I wanted to make an app) that the process of learning seemed like something I just have to force myself through. I wish I would've let curiosity drive me rather than the end result. Now that I code full-time, I find myself enjoying playing around with the code a lot more.

Where do you think your initial curiosity with software came from? Was it something you always had?

jonrandy profile image
Jon Randy 🎖️ • Edited

I think, as I said, it was partly due to wanting to see what else this little machine could do after exhausting the possibilities of the software that came with it (on cassette tape!). The idea of being able to make it do what I wanted to, combined with the imagination and creativity you have when aged seven - was a potent mix. I had ideas about what I wanted to make it do, and tried my hardest to find a way to do those things.

The fact that machines were a lot more limited back then I actually think was a positive thing with regards to learning to program. These days, the sheer number of things you can do, and the number of ways you can do them can probably be slightly overwhelming to someone starting out

nichartley profile image
Nic Hartley

I think the ease of teaching yourself coding correlates directly with your age when you learn it. A survey of my peers has shown:

  1. The people who taught themselves to code younger than about 10-12 found it extremely easy.
  2. The people who taught themselves to code after that found the opposite.

Obviously that's not scientific -- I had about 70 data points total, and I didn't make any special efforts to eliminate bias -- but anecdotally, it is interesting.

Also anecdotally, I taught myself to code at a very young age (very slowly from 5-8, and then diving headlong into it at 8) and I don't remember it being hard -- at the time, I thought learning it was easier than learning my letters.

danchann profile image

5) This article

So true! :D

theague profile image
Kody James Ague

First thing I thought of when reading this was Finn's line from Star Wars... I'm WITH the Resistance!! lol

Thank you for this article.

saviobosco profile image

Thank you very much for this piece of article.This is a very big problem for most self taught developer.

yusufkolawole profile image
Yusuf Kolawole

Great article, kudos to you

felnasa profile image
Ahmed Ben Abid

Does distractions and interruptions count as Resistance ?

victorcassone profile image
Victor Cassone

I would say interruptions no, distractions yes.

Interruptions are most of the time out of your control. If you are working on something and someone barges into your room there isn't much you can do about that (except design your environment better)

However, distractions are something you have more choice over. If you are working on something hard and you feel stuck, you are more likely to open up Facebook or Twitter. Resistance doesn't want you to feel uncomfortable and distractions are usually things that put you back inside your comfort zone.