In a recent post I wrote about my long journey getting into programming, it made me remember some funny moments from the most intense period of my programming education which took place Spring/Summer 2016.
I attended a coding bootcamp, and to say that it was a challenge would be an understatement. There was so much going on. I had just moved states, recently lost my dad, and kept getting really bad headaches (whoops, I needed glasses! Go figure).
The specific memory that sticks out is, my anxiety during this period was through the roof. I didn't have a particularly fluid transition to coding, I wasn't great at it. To attempt to deal with my nerves/stress I remember trying at various points to meditate. Ultimately, if I could clear my mind at all I would immediately wind up stress-napping. What a mood, as they say.
"Stress napping" I think is a response perfectly indicative of all the chaos involved with learning to code: it is mentally exhausting, emotionally bruising, and in my case an ego-shredding experience. So today I want to unpack a little bit of why that is, how it manifests, and most importantly some things I would recommend to help with it. (Help, not solve - ultimately this is a hard thing to do and in some ways there is no path but experiencing the difficulty).
What makes learning to code so grueling
If I had to distil the difficulty of learning to code into main areas or themes, I'd probably organize them as follows:
Mentally challenging: I had always been a good student. Not just in one thing, across the board. A-B student, quick learner, and in some cases didn't need to try particularly hard to do well. Coding changed all of that. I could not let my focus drift a single bit. Applying every bit of determination and attention I could muster, still things were going over my head entirely. Things that looked "simple" as other people did them immediately became mystifying hieroglyphics the moment I was on my own.
Distractions and conflicting information: Learning to code alone is tough. Learning to code while learning Github while learning about IDEs while learning about the
inspect browser options while learning about Trello while also being a new Mac user was BANANAS.
This gets arguably worse at the point when you have a working knowledge of what I listed above and think "ok now to get a job".
To be clear, none of these things will HURT you if you are able to work on them and make progress and through that progress gain experience and practice. These things may hurt or hinder you if they are so overwhelming that you don't know what to do, or if you nervously rotate among them and are context switching so much that you aren't getting traction or practice with code. (More on that and approaches to manage it later). I don't know if this is a real term but I would like to coin it if not: panic-cycling. I see a lot of new programmers panic-cycling through approaches and due to the churn, feeling stalled.
Exhausting hits to self esteem: Neither of the two previous points are particularly helpful to feeling good about yourself. People have told you five million different things you are supposed to do to become employed, and doing any of them feels like a herculean feat. The interview process is also bruising. If you are in dev communities, you may start to pick up on that developers can be dismissive and rude about beginners, Stack Overflow answers are downright hostile sometimes. Trying to use Stack Overflow literally the messaging you receive is often "This question is too dumb to ask" in the form of "this was asked elsewhere" or "this question doesn't meet our criteria". (More on this later too).
Weird industry cliqueyness: In the background of all these other things, as you start coding you start to pick up on the social strata, which might seem bizarre to an outsider. Why is frontend or PHP perceived as less prestigious? Is this thing I'm about to learn "dead"!? (People loooove declaring various technologies "Dead!", its bizarre honestly). So although you are in a poor position to do so, most new coders I know feel immense pressure to pick the correct "path" before they realistically know what it should be, an added worry on everything else.
Phew. I was exhausted just WRITING this list, just REMEMBERING these feelings even though they were six years ago!
How these stressors manifest
Something I find funny that writing this post made me think of is related to travel, something I love. I started traveling solo when I was 17 and have been to sixteen other countries total. Would it surprise you to know, travel is so tiring that on almost every trip I take I have a moment in the first 24 hours where I think "this trip was a mistake". Whether it is a malfunctioning GPS in Iceland, getting stuck in a bathroom in France (door broke!), there is always some logistical mishap that makes me doubt all my life choices.
Invariably, after my "freak out moment" I get a good night's sleep. Wake up the next day. And am a new person. I start to feel the vibe of the city, and stop feeling self conscious about my language barrier and start enjoying myself and just taking it all in. Even knowing this will happen to me, it happens every single time without fail.
What does this have in common with learning to code? Exhaustion.
Ways that stress and exhaustion manifest learning to code:
- Panic-cycling: (talked about this a bit already). I'm no doctor but whenever I think of panic cycling that new devs do, I can't help but also think of decision fatigue. New devs feel pressured to make so many decisions that I think their thinking gets frenzied and they wind up trying to do it all and even more exhausted by context switching in a nasty cycle
- Emotionally charged relationship with coding: There was one person in my bootcamp who I will never forget who really struggled with this. In talking through debugging, you could hear the person's voice get noticeably emotional with frustration as they felt like they were trying everything and nothing was working. Debugging conversations would turn into frustration conversations, and it was obvious that the person would not be able to productively continue until they calmed down
- Fatigue errors: It has been studied that being sleep deprived can have an impairment effect comparable to being actually drunk. For me, this is absolutely true. I get physically clumsy when sleep deprived very noticeably. I also miss things. Tired junior coders are very prone to making errors in my experience
Thought distortions: If you haven't heard this term, a thought distortion is what happens when a logical thought becomes emotionally charged and then spirals. Learning to code, it is the difference between
I'm not cut out for this. One of those things is a logical thought. One of them is a projection spiral based on that thought. Other common ones in this vein:
I don't have what it takes,
I'll never be able to do this,
I'm not smart enough for this.
- Procrastination/avoidance: When I first learned to code, like many people out there, I initially assumed backend was out of reach for me. I thought my artistic skill could carry me through on frontend if I could pad my work with design related activities. I avoided exploring my options or trying to fairly evaluate my interests because I was operating from a place of fear and doubt. Which leads me to the next point --
- Limiting beliefs: These show up in a lot of ways. Delaying the job hunt because you think you aren't ready and no one will hire you. Blanket judgment of certain topics as "hard" and beyond you. Heck, in my bootcamp there was someone in the same area who wanted us to be friends. I initially avoided her because she was too good a coder and made me feel bad about myself. (Happy ending, I joke that she "bullied" me into us being friends, and here we are six years later good pals. She is a CTO!)
So what actually helps?
So first of all, I discussed the fatigue thing. I will say one thing I did differently than the people in my program was, I never stayed up even close to 3am working on projects (some peers did!). I'm a person that needs my sleep, and I was self-aware enough to immediately see that coding tired just made me break my code even worse. Draw from that what you will. For me, I just couldn't. I was getting killer headaches (needed glasses, lol) and was just very quickly like, no. I'm not going to do it. I'm not going to stay up all night.
Second, I will address the context switching thing. Would it surprise you to know that I have never meaningfully learned code from a specific book or video series? I don't like videos and for whatever reason never got into O'Reilly books or anything else either. I've never done open source. I've done Hackerrank maybe 3-4 times ever for interviews. I don't have a presence answering questions on Stack Overflow. I didn't meaningfully network early in my dev career. I didn't bother trying to learn algorithms meaningfully until I was a couple years in. So take a deep breath. This knowledge isn't going anywhere. If at some point you are unhappy with your learning materials, you always have room to change them.
"Changing them" is different than panic-cycling or feeling like you HAVE to do them all, immediately, right away. When evaluating switching resources (let's assume you are in a program to learn to code or have a specific goal that means you have some basic learning resources as core materials).
In picking your materials and practices, learning to code is a lot like developing a fitness regimen: what method is the best? Generally the one you are willing to keep doing on a daily basis. Pick something you can deal with. Focus on being consistent. Focus on showing up.
I also am a huge proponent of arguing with your limiting beliefs and thought distortions. As I left bootcamp and prepared to get a coding job, I would often talk out loud to myself in the car preparing answers to imagined interview questions. Maybe since I was already talking to myself aloud more than normal, I started also talking out loud against my negative thoughts:
Negative thought: You aren't cut out for this
Me: Hey wait a minute, you just started! This isn't magic, people are learning this all around you. Why NOT you?
Negative thought: You're not going to get this job
Me: Fine, but I'm going to apply anyway. I have the interest, so if someone is going to say no its going to be them, not me.
Negative thought: You can't hack it as a real dev, better be sure your portfolio at least looks pretty since that's all you are good for
Me: Maybe I will, but maybe I'll try to learn some backend too. Maybe it isn't for me but it won't hurt to try to become more well rounded
Negative thought: Everyone else is understanding this material faster than you
Me: So what, I am enjoying what I'm learning and I can't stay bad at this forever. Who cares about everyone else
Maybe it sounds kind of hokey, but as I told my therapist about how I interrupt my thoughts she pointed out that I'm essentially doing cognitive behavior therapy within my inner dialogue. Hokey or not, it helped! It helped with the rejection, the negative thoughts, and the hits to my self-esteem.
I would love to give you a recommendation to deal with the last point I outlined,
cliqueyness, but for that one all I can tell you is that there are not some special social rules that mean the behavior is OK in tech where elsewhere in life we recognize that it's toxic. Cliqueyness is toxic everywhere. Early in, I realized I was never going to spend time in spaces with that vibe and I've been happier for it. Outside of occasional forays onto stack overflow, I rarely tangle with that side of the tech world.
I wanted to write this to say, I truly get it: there are a confluence of factors that make it truly a marathon of emotional regulation to learn to code, on top of all the hard learning and the non-emotional challenges!
I told you already, I was NOT a fluid coder. I felt like the ugly duckling of code for a good year or more. The one thing I did have going for me though were techniques to regulate my emotions and discipline my disappointments enough to continue on.
I was telling someone the other day that I feel like my first year of coding was more challenging than all the other years combined and god if that isn't the truth. I never wanted to forget that feeling and it has made me passionate about mentoring and being part of a community that could make newer developers feel more supported than I did. Thanks for reading, and if you have any of your own tricks for staying grounded while learning to code, drop them in the comments!
Oldest comments (7)
Fantastic article. I feel every single point which I'll expand on here (with some additional unrelated commentary stemming from that).
I tried the academic route for tech multiple times and it was an emotional disaster for me, my qualifications stopping at an ITC diploma from community college as my last "success". I am not naturally "left brained" and logical so this is a labour of love for me rather than born proficiency.
I have extreme anxiety in school/class settings so those endeavours went as well as you would expect even if my marks were in a good range: people pleasing by trying to be a "low maintenance" and autonomous student, judging myself harshly on marks, comparing myself to people who "naturally got it" and competing with them, trying to piece together everything while keeping up with the pace, large class sizes that left me lost, feeling panicked if I didn't fully understand a concept which turned my brain off, and in the end... the emotional exhaustion of learning complex concepts with undiagnosed ADHD while looking after a house, a kid, and myself. Decision fatigue stemming from anxiety in the first instance with the added challenges of coding each day (let alone life outside of that) burnt me out severely.
There was no joy, excitement, or passion in that scenario, and I often wondered why I was doing it at all when I just felt anxious and avoidant whenever I sat down at my desk. I knew I could do it and I wanted to do it but my heart wasn't in it.
I chose a school to be a qualified software developer because I had zero confidence I could do anything on my own in this field. Then I failed the second paper three times on backend and was told to withdraw, and I really broke. At the end of every term I had gotten behind and my turned in project was a trashfire. I had no emotional regulation skills or resilience against that predictable outcome of withdrawing let alone the lead up to that. How do you keep pressing on towards your dream job in something you enjoy when your tutor tells you it's the end of the road with them? How do you believe in yourself after three cohorts have progressed without you? They were so patient and encouraging with me but I couldn't manage it and I felt embarrassed.
Fast forward a few months later. I've had to completely reprogram my head to keep pursuing this. Introspective journaling, meditation, affirmations, the whole works. It's made a massive difference, I finally have my spark back to learn, and I'm gaining traction now.
I've realised an academic environment is the antithesis of progress for me; it doesn't mean I'm stupid, it means that way of learning does not work for me and I learn better when I have the time and freedom to solidify concepts. Learning requires more time for me, and I'm okay with that now, because once I learn something it stays in my head and I can move forward without issue. A generalized dev diploma with mediocre marks doesn't have much meaning for me (or employers) compared to well made projects for a portfolio that showcase my creativity and skill in my chosen niche of backend. I can be proud of the latter and provide evidence that I love what I do instead of just going through the motions to get a pass.
Finding online communities like this are important for my journey becoming less daunting for me, because I have a place to share my wins and participate in giving and receiving support when things aren't going so well. I feel like an actual developer doing it this way instead of a struggling student with bad marks.
My learning process now is as follows:
I'm getting good results from that small amount of direction. Working with myself instead of trying to force a style of learning and achievement that took me backwards every time, even in these small ways, has had a profound impact on how I feel every time I open VS Code.
Personal recommendations for grounding when your head is a mess:
Thanks for coming to my [somewhat unrelated in places] TED talk lol, your article inspired some good reflection for me which I hope will be helpful to others :)
This tore right into me, wonderful article.
I believe that for some people the hustle mentality can work temporarily(never long term, you will burnout eventually), but for most of us, consistency is actually the key to everything in life, and sometimes I really need to be reminded of that. Thank you for it.
Mostly this article makes me sad that the entry point into tech has become so stressful and high pressure.
When I started 9~ years ago I had no relevant qualifications, no bootcamp, just passion. Admittedly I got lucky getting a job with 0 experience, but I never felt that intense pressure. Every day was an exciting learning experience, I would dream about code and wake up excited to go to work.
Obviously the landscape has changed a lot and not only do companies expect juniors to hit the ground running, but juniors also want to go straight into the "good" jobs. Maybe we should be asking what can we do to make it less stressful to get into this career path...
Oof, that's a good point.
This is a Really Good article. I felt your pain so well because 1. I felt it ALL TOO and 2. you stated it so clearly. For me, it was actually a difficult read. I felt my own angst come out as I read. I am teaching myself coding and find it tough. I am a 'One-to-One' type of speaker so blogging and posting on places like this have been up and down. I often feel that I should spend 23.5 hours a day learning this material but know that will ruin me and the fun that I initially had for the subjects. Working alone has been my biggest hurdle for all the reasons you list. It all rings true for me.
OMG - this is a wonderful article, I really felt this on many levels - everything I learn/do is intertwined with "Panic-cycling" through every possible source.
TY for sharing both sides - how you got there and what you did that helped.
Very well written. Very complete. You've done a lot.
BTW, I completely hear you on StackOverflow. "Your reputation is not high enough to answer questions."
How do I get reputation? "By answering questions."