Learning to Code: When It Gets Dark
A Handful of Useful Mind Tricks Addressing Your Innermost Fears
Let’s talk about how to stay on track. How to keep learning when you feel like there is just way too much to learn. How to keep going when it feels like you’re never getting that first coding job.
You find yourself thinking: “Maybe I’m just not cut out for it?”
It’s like a cloud that follows you around, blurring and distorting reality, so that it can present the case of how bad and hopeless the situation is and how there is no way you can do it.
Well I don’t know about you, but for me this happens every 4–5 days.
I have been learning to code since November 2014, slowly immersing myself into the field. I’ve used all sorts of resources: books, online courses, online challenges, blog posts, tutorials, etc. Free Code Camp has heavily influenced my learning by putting a positive spin on coding, and a clear path to advance along.
During that time, I often had to fight off my mind’s tendencies to scare me off the path. I am almost sure that you also experience this from time to time.
Steven Pressfield has famously dubbed this force “Resistance” in his book The War of Art. I highly recommend that you read this book. I find myself using the lessons from it on a daily basis (some days even by the hour).
In this post I will share some mental techniques that I use to dissolve the negativity “cloud” — the Resistance — that can be so hard to beat. All of the advice is based on what I’ve learnt so far, and if you have other ideas — please share them here as well!
I’m going to skip the most common motivational advice (which is usually too broad to be actionable), and focus on uncommon but effective advice. I’ve used these techniques and found them effective, and I hope you will, too.
Realize that Everyone Experiences Resistance
When learning a new skill, many people assume that if things don’t immediately go smoothly without effort, then it is not for them. We always have this fantasy in our minds of how, for some people, everything flows naturally, and they just rapidly glide ahead on the surface of it all, without encountering any problems and obstacles in their journey.
This could not be further from the truth. They might have had difficulties to surmount that we might not even know about. They might have been rejected, disappointed, they might have felt hopeless. We don’t know. Don’t judge yourself by the standard of what you imagine the other person’s journey has been.
Sure, one thing might come easier for them, and that could be coding, but I assure you there are 10 other things they wish they could do more easily but still struggle with.
(To give you an idea of how powerful this Resistance can be: I’ve started writing this article back in December 2015. Yep, I know.)
How to practice this:
Stop thinking of difficulties as these walls that have been built around you so that you can’t go where you want to go. Think of them as obstacles on your way to your goal — little challenges that make you stronger.
Don’t let yourself believe that the fact that you experience these emotions means that you are not cut out for programming. Everyone experiences the same uncomfortable emotions when they try to learn something new or do something out of their usual routine. It’s painful to push your boundaries and your so-called “limits” (Shhh. There is no spoon).
What you feel is Resistance.
It is natural, and it can be your friend if you use it as your compass. It is a sign that tells you that you are on the right path, the path of personal growth.
Every Day Counts
It’s very easy (trust me on this) to get discouraged when looking at the people who are already in the tech field. It’s even easier to get discouraged if you focus on the developers who have thousands of followers, and massive knowledge of the subject matter.
The problem is that these are the people you see on Twitter, or in Google results for videos, tutorials, and articles on coding.
You rarely see the regular developers who comprise the 98-or-so percent of the field.
I am not saying your goal should be to just become one among that 98%. (You should push way further than that). All I am saying is that it is easy to scare yourself into believing that there is a metaphorical Grand Canyon between you and professional developers.
So you’ve spent months learning to code, but it seems like you are still so far away from the pros that you are wondering: how can they be so far ahead? Is there any hope at all for me to ever reach that level?
Well, this is where your mind is playing tricks on you. You don’t look at a professional violinist and think to yourself: “Oh, I’ve been learning to play the violin for a year now, how come I’m not performing at anywhere close to their level?”
But with coding, many of us do that every time.
You take a person who you consider to be a solid developer and ignore everything else about that person. You think: “It’s simple. They’re a great coder, and I am not. That’s it.”
You don’t take into consideration how that person might have struggled with programming or math and worked hard to surmount those difficulties, or might have spent countless nights after work stuck trying to comprehend error messages, and worrying about the same things as you are. Or how they might have spent 4 years in university learning software development full-time.
Nobody said it would be easy. Learning to do anything well takes time. A LOT of time. Resistance is basically telling you, how come they are at that level, and you are not? What’s up with that? It should be so easy, there must be a quick way, a shortcut, a secret to it, something!
Remind yourself that there is no such thing as something for nothing. The key is that you should know that it is possible for you to get there. It takes time, yes, but so what? All worthwhile things take time.
How to practice this:
This has been one of my major struggles with learning to code, and the technique I share here has proven itself powerful many times over. Without this, I might have dropped coding like I’ve dropped many of the other things I’ve attempted to learn over the years.
Here it is: Imagine how many people out of those who have started coding on roughly the same day as you did have already quit — or will quit today — giving in to the same temptation to stop the pain and discomfort of learning.
Think of the strength (psychological, emotional) that you’ve developed during your journey. Your will and resilience increase each time you make a decision to go further, to not stop where you are and to not admit defeat. Every day you code is the day you’ve won.
Go All In
So you’ve decided that you will teach yourself to code. What’s stopping you from quitting after 6 months of not seeing the results you want to see?
You need a goal to work towards. Once you have that goal, it will be harder to stop, as opposed to a situation where you are dabbling with code, or learning without a specific, well-defined goal.
My initial goal was to find a job in coding. It took me around 14 months to do that. I had a full-time job in marketing at the time, so I couldn’t code all day and all night, but I’ve tried to squeeze in as much coding time as I could into every day.
Focus the light of your efforts. If they look like a Wind Rose, bring the individual rays into the center, and you will become a laser. And you know how effective lasers can be. From time to time, we all need to gather the light that tries to spread in all directions, and focus it back on our goal.
Once you’ve decided on your goal, go all in. Spend as much time as you can coding.
Who cares if you have all days available or only have 1 hour a day? If you don’t do it, it doesn’t matter how much time you have or don’t have.
I’ve read stories of people taking care of little kids and learning to code when they have a moment, but I haven’t read a single story of “How I’ve had my days free for a year and I still couldn’t learn to code”. You know why? These people have no stories to tell.
Use the time that you didn’t know you had: download an audiobook on coding and listen to it, get a book and read it on the subway or a bus, if you commute to work or elsewhere. Try to use multiple types of learning, but make sure you keep to the same subject.
The idea I am trying to convey is that if you worry that you don’t have enough time to learn to code, it’s probably just your fear that is lying to you. This happened to me — I would often wonder: how long will it take me to learn this while working full-time? Is there any chance I will actually follow through?
Remember that the more effort that you are put in today (not plan to put in tomorrow), the faster you will get there.
How to practice this:
Define a specific, realistic goal to work towards. A well-defined goal would be: “I want to find a job as a Front-End Web Developer within the next 12 months.” Or: “I will create 3 simple iOS apps within the next 8 months.”
Use all the time you can find and focus all your effort on learning to code. Why? Because it is not easy, and because the longer you spread your learning period (unless you have a specific time-bound goal), the more likely you will become discouraged by the feeling of “slow progress”.
You ARE smart enough.
Another big fear that I had when starting out my learning journey is that I just wasn’t smart enough to compare to those who’ve spent their youth solving math, physics, and programming problems. They started programming when they were 3 years old, and built a compiler when they were 5.
I had a false assumption that everyone in programming was an engineer with a Ph.D. from an ivy league university, and it was just too late for me.
First, I’ve come to know that there are all sorts of people in the tech industry, and they all had different paths to come to coding. So it’s okay for me to start relatively late.
Second, and more important, I still encounter the fear of “what if I won’t be able to get to the best software engineering jobs out there?” at the likes of Google and Facebook. I might not at first, but I am going to do all it takes to get to that level.
The thing I am sure about is — if a person stays with coding long enough and makes the practice deliberate — they will get to any level they aspire to.
By deliberate practice, I mean:
- examining the bugs and problems in the code
- going back to certain problems and trying to solve them in a better way
- reading other people’s code to see how they solved these problems
- refactoring your old code
To put it simply: doing rework rather than trying new things and switching topics all the time.
How to practice this:
Trust me, you are smart enough. Believe that you are, and don’t let the thoughts of “I am not good enough” slip in. They are destructive in their nature.
I will share with you an affirmation, and I don’t care what you think about affirmations:
“I am worthy of all the best in life and I can do anything I dream of doing!”
If you find yourself fearing that you are not smart enough, repeat that affirmation. You might want to repeat it 5 times whenever the fear gets ahold of your thoughts, or as many times as you need throughout the day. Your mind is like clay, and it’s your job to discipline it and mold it into your friend.
Look at us. We are the same as you. All aspiring to code and to get better. We all have this same fear.
The ultimate factor of whether you will make it as a professional developer is not your IQ or your “talent for code,” but your resilience and grit.
There is a Mountain-Everest-Higher chance that you will not make it because you will scare yourself out of success, as opposed to not being as smart as some other people (or people upon whom you project extraordinary brilliance in your mind).
If you are interested in self-image, and how it relates to success, I recommend you read Psycho-Cybernetics by Maxwell Maltz.
Don’t Spray Your Effort Around
Whenever the learning gets difficult — like when you start getting into intermediate stuff after having learnt the basics — you will find yourself exploring other not-so-closely related areas of programming.
If your focus is on Ruby, you will suddenly start finding Swift so fascinating and wonderful, and oh so magical.
So how to stay on track while also not growing too tired of the same topic?
How to practice this:
First, remind yourself of your goal. Next, my advice gets contrary to what you might have thought it would be. I say — go have that short honeymoon with that new exciting subject!
I recommend spending the next couple of days out to explore the new shiny subject that caught your interest. It’s okay.
What would happen if you didn’t allow yourself such breathers? Studying one subject for a long period of time is like being on a diet. You will do really well and be fine and happy, until that one day when you break and just can’t take it anymore. Say, you go nuts into this 6-month learning journey of a completely different topic, only to find that you haven’t mastered any of the many topics you’ve tried learning.
Also, food for thought: you never hear the stories of “I dabbled with coding in Ruby, JS, Python, C++, and Java, and then started my successful coding career.”
In order to get your start, you should have at least one thing that you are amazing (or at least good) at. Choose it, pursue it, and only allow yourself brief diversions in order to keep your sanity.
Consistency over Quantity
When we decide to take on something big, like learning to code, we usually make the “New Year Resolution” mistake of thinking that starting next Monday we will spend 3–4 hours daily after work learning to code.
What happens next? We do it for two days, then we get invited to a friend’s house for dinner, miss a day, and feel so terrible that we only start coding again after a couple of days or more have passed — if we return to it at all.
We need to understand that slower, but more consistent progress always wins out over the progress of a person who skips days, and then tries to make up for it by cramming for a whole day, or pulling an all-nighter.
Fifteen to thirty minutes of learning each day is better than 10 hours of learning over the weekend. You will remember more — and learn faster — if you come back to it every day, than if you try to remember what you did a week ago.
I know this is common knowledge, but we often forget all this when we get inspired with the desire to get better faster.
How to practice this:
Make a clear-cut, “bright-line” rule that you will code for at least 30 minutes a day. If you can do more, do it. But once you’ve done your 30 minutes, give yourself the permission to feel accomplished for the day.
Thus, your efforts will become more consistent and you will get to your goal faster.
Don’t trick yourself into believing you have to go back to University or to a paid bootcamp in order to become a developer. it isn’t true.
Yes, there are plenty of people who got into software development by going back to university for a second degree, or attending an in-person boot camp. But guess what? There are far more who got into the field by learning on their own. So don’t let yourself forget this.
How to practice this:
Stop worrying about this, and know that it is possible to get a job in coding without doing either of those things.
If you can get a degree or go through a coding bootcamp, you might consider doing so. If you can’t, don’t let that discourage you one bit.
Also, the time you are now spending feeling sorry for yourself (I know I’ve done that a whole lot), you can instead spend writing code and learning.
Find Like-Minded People
Okay, this might be the same advice you find in every article on this topic, but it makes a lot of sense. Go to hackathons and other tech events.
First, you get to know more people and learn their stories. It will help you see that there are millions of different paths that people took that got them to where they are now.
Second, you will get to ask all the questions you have, and hopefully get help with whatever problems you are having with the projects you’re working on.
Though these tech events may seem intimidating to someone with beginner-level knowledge, don’t worry about feeling stupid, or not understanding anything. Most of these events are welcoming of beginners.
What helped me realize the importance of coding events were the following. In late 2014, I found Free Code Camp. It was still early in its evolution. The site had a list of cities with groups of people who met to learn to code together called campsites. It also had instructions for establishing a campsite in your city if it didn’t have one yet.
There wasn’t one for Toronto back then. I love organizing stuff, so I thought: “Wow, what an opportunity!” I quickly created one.
I was surprised to see how quickly people started joining the new campsite! As the group grew, I decided to create our first event.
Today we’re approaching our “anniversary” meet-up in June, and it has been amazing. The group is now has more than 800 members, and I have enjoyed every single meeting we had.
Finally, there was a sense of community, and not only was I learning to code and sharing my experiences, I was also meeting the best people I could otherwise find anywhere . The people who were interested in developing themselves, getting better, doing new things, learning and, generally, getting more out of life!
Some of the people I’ve met became my really good friends, and I am enjoying sharing the resources, challenges and thoughts with them and the people who come to the events.
How to practice this:
Go to coding events, such as Free Code Camp’s coffee-and-code events, where the focus is not only on coding, but on the sense of community.
I don’t know which events are held where you live, but I am pretty sure you will find a local coffee-and-code event at the Free Code Camp campsite for your city.
If there isn’t one yet, you know what to do. ;)
Read other people’s Coding Origin Stories
Reading how other people learned to code is both informative and motivational. You quickly learn their circumstances and which resources they used.
I’ll be honest and say that some of these stories — of people going to expensive bootcamps for 3 months and getting a job after — were not inspiring for me. I had a job and other responsibilities, and there was no way I could attend one. However, if you are considering a bootcamp, these stories may have a different effect on you.
In spite of this, I’ve read some stories of single parents learning to code, of people using Free Code Camp, Coursera, EdX, and other resources to teach themselves, and succeeding. It helped me get the courage and confidence that I would succeed, too.
How to practice this:
Read people’s stories and I promise you will get inspired, and a lot of your fears will dissipate.
All right, enough reading, go write some code :)
If you have any questions about learning to code that are burning a hole in your mind, ask away — I would absolutely love to help you!
If you liked this article, please let me know — it would make my day!
If you are interested, follow me on Medium or Twitter: @ka11away and I will make sure to write more articles sharing my experiences!
Thank you so much for reading!