Solving Coding Frustration
I recently had a couple of coding mentoring sessions on the same day about the same topic — frustration.
Here are some of the specific questions that I heard:
- How do I deal with frustration?
- Is there a way to avoid it?
- Do I have any advice for people experiencing frustration?
In this article, I’ll give you my answers to these questions in the hope of helping others deal with this extremely common scenario in the world of coding.
Note: the source of frustration that I’m addressing is around learning a new skill — specifically learning to code. The tips I’m going to give will be with that view point in mind. I imagine this will be applicable to other skill development but not as applicable to other sources of frustration like interpersonal conflicts or external pressures.
How Skill Development Works — The Framework
Not too long ago, I coached my sons’ little league baseball teams. All of the kids wanted me to help them get a big hit and make the big play. The parents wanted their kids to become the next Chipper Jones — or at least not to strikeout with their eyes closed. I did a lot of reading and researching on how to coach and teach new skills.
One of the best sources of practical tips for skill development came from this gem — The Little Book of Talent. In it, Daniel Coyle provides 52 tips on improving skills applicable in all fields and I highly recommend it.
One of the gems, I remember from this book was around how tasks have to be just challenging enough in order to optimally develop skill.
If tasks are too challenging, then successes are too spread out to learn from and generally the learner will simply abandon the task before too long.
If tasks are not challenging enough, then you do not actually acquire new skill — you are instead just reinforcing old skills.
Daniel Coyle suggests that the sweet spot for success is around 70%. This means a baseball player is catching the ball most of the time but not all the time.
In coding, this means what percentage of challenges can you pass easily. Challenges like — you are debugging an issue, you are setting up an environment, you are writing some new code, you are trying to understand someone else’s code. If you are not having any (or little) success with these then you’ll experience frustration.
But it is OK for there to be some challenge to what you’re working on — in fact it’s necessary for growth.
Tip 1 — Fundamentals first
Let’s keep the percent-of-success framework described above in mind as we talk about fundamentals.
Fundamentals of sports are things like catching and throwing and fundamentals of music are playing notes, scales, and chords.
Fundamentals of coding are things like language syntax (data-types, conditionals, loops, etc), standard library familiarity (string functions, array manipulation, etc) , and tooling (command line, git, debugging, etc)
Some illustrative scenarios:
- If you try to play a complex game like baseball without first acquiring skill of catching and throwing…
- If you try to play a song on a guitar until you know some chords and strumming technique…
- If you try to build an app before you know the basics of coding and app development environments…
Then you will be on the very low end of the of the success percentage scale. Maybe you’ll be about 10% successful. Maybe just playing in any of these will be exciting at first but you’ll find that you’re not growing very fast this way and you’ll find yourself wanting to give up before too long.
Imagine instead that you focus on fundamentals first. Get the basic skills up. Now when a challenge a rises in the game, the song, or the project you’ll have a much higher chance of success. Getting a good result 5 out of 10 times instead of 1 out of 10 is going to bring much more enjoyment and also lead to better reinforcement because the successes are coming more frequently.
A note for coders:
It’s not necessarily easy to know where you are on your journey. However, if you find yourself stuck on a project and googling doesn’t unblock you after an hour or so — it’s probably time to think about fundamentals.
If you can’t get a regular expression to work after some time just trying things (and not really understanding why it’s not working), then take a step back and go read an article about them . It’s not a setback — it’s taking the time to work on fundamentals. I guarantee after you do this work of learning fundamentals and return to your project you’ll have a much, much higher success rate.
For coders, practicing fundamentals often looks like learning.
Tip 2 — An Epiphany: Challenge is the Goal
I used to really not like that feeling of not understanding.
In school, I would think the teacher was doing something wrong if I had that feeling. Meaning that it was so uncomfortable that I’d subconsciously make excuses for why it was happening and deflect blame.
I loved to play the games that I was already really good at and avoided others.
I would work on projects similar to previous ones because I knew I would be successful.
Putting this in the context of the percent-of-success framework, I was selecting tasks and challenges so that I would be 95%+ successful. Sure this feels good but I was not growing as much as I could have with better challenge selection.
Moreover, I needed a change of mindset that didn’t dawn on me until embarrassingly late in life.
I realized that I should run toward that feeling of discomfort not away. That’s where the pay off is.
The team lead needs someone to give a presentation because she is on vacation. Does the idea of standing in front of customers and presenting frighten you?
Let’s say you run away and someone else does the presentation OR you run toward, put your hand up, do the presentation and you get to the other side of the (possibly bumpy) task.
Which direction lead you to more growth?
Epiphany: That feeling of dread and frustration is not telling you to avoid the task. It’s telling you where you need to grow.
This means that you can actually use frustration and dread to your advantage and let it be your guide in a sense. It’s not necessarily a negative thing.
A final thought
These two tips are complementary. That dread and frustration is telling you the Where to go. Skill development in the fundamentals is How you get there.