Have you ever noticed how programming can sometimes feel like you are in a foreign country playing charades with a shopkeeper tucked away in their little corner of a street, trying to find roundabout ways to ask for whatever item you need? And just as it is with the shopkeeper, communicating with your computer can sometimes be pretty tough.
if human_being { speak_tongues } else { code_bytes }
Unlike humans, computers are pretty terrible at inferring meaning. With humans, you can get away with using broken sentences—such as “museum - where?”—or you can pronounce all the syllables in “Leicester Square” and have a Brit roll their eyes at you because they insist it’s “Lester Square,” but the chances are that you will eventually find a kind soul to point a finger in the right direction.
Computers, on the other hand, like precision. They need to be told exactly what to do, in a precise manner, with the right characters in the right place. If you forget to close a bracket, or your condition is a little odd, your computer will probably give you an error message and make you try again. Learning to talk to your computer is just as difficult as learning a foreign language, but for different reasons.
The vocabulary and grammar of your chosen programming language are likely more succinct than that of a natural language. However, you will need to undo the years you have spent extrapolating and inferring meaning, reading body language, making connections between seemingly unrelated ideas, and instead bend your thoughts to follow a much stricter set of rules.
Prog-ARGH-ming
Programming is hard. There are so many languages, so many tools, paradigms, libraries, frameworks, development practices that all make it so easy to feel out of depth and stupid. Being constantly faced with errors makes it easy to think that we can’t do it, that we are not smart enough, or that others get it but that we don’t. It’s not uncommon to feel that we are a fraud and that our employer will soon find out, or that we should leave the industry and go raise cows in Scotland (or is that just me…?)
The good news is, none of this is true, at least insofar as most everyone feels the same about programming at some point in their learning, or their career. Over the last three years I have spent programming, there have been days when I felt I was too slow to learn, or too slow to understand. There have been days when the only thing that kept me coding was fear. The fear to hear that “women can’t code,” the fear to disappoint my mentors, my family, and myself.
But I have fewer of these days, as I slowly figured out what worked for me. I was able to find strategies and tools that helped me take care of my mental health as I transitioned into programming, and I hope you will find them as useful as I have.
Practice self-compassion
Self-compassion is three things rolled into one. It encompasses mindfulness, which you practice by focusing on your breathing or the task at hand, and which is great for alleviating worries; self-kindness, which is not so much being indulgent as extending the same kindness you do to friends to yourself when you find yourself in a pickle; and common humanity, which serves as a reminder that despite the perfection we see on social media, we all experience failure and hardships, and that we are just like everyone else.
I usually practice mindfulness through meditation. I use an app and try to practice every day through guided meditations. I also try to pay close attention to what I am doing, be it eating a meal or walking to work. This has made me better at focusing in general, but it has also reduced my worries greatly as I take it one step at a time. Self-kindness was a little more difficult to tackle, but I do not call myself an idiot anymore when I spend an hour hunting a missing bracket in a JSON file. I simply tell myself that mistakes happen and that I can always improve.
Reframe your thoughts
The brain is wonderful at learning everything under the sun, but it is terrible at rewiring itself when it has picked up a bad habit. Reframing negative thoughts is an incredibly powerful tool that is frequently used in Cognitive-Behavioural Therapy, but it takes some time and effort to pick up. The process is simple: you recognise that you have had a negative thought, you analyse the thought to figure out why it popped up in your mind, and you reframe it in more objective terms.
Reframing thoughts helps greatly when you want to be kind to yourself; and once it becomes ingrained, you might even find yourself manipulating thoughts and ideas in ways that will help you find different angles for the problems you are tackling. You can also practice gratitude by writing down a short list of things you are grateful for (I found a nice theme for my IDE, I got a seat on the train into work…). This trains your brain to see the positive in things, and makes the process easier as you find joy in the little things.
Monitor your progress and recognise your achievements
As developers, chances are we have learnt a couple of new things during a day at work. However, it is easy to dismiss the progress we have made and the successes we encountered as the challenges we tackle soon become second-nature. While gratitude makes it easier to recognise achievements, another useful tool is to keep a blog and (or) a daily log. These help keep track of what we learn, what we accomplish, the problems we encounter, and the solutions we find.
I like to write blog posts about topics I am interested in and want to explore more in-depth, often using them as a way to do research into that topic. I also write daily logs in which I keep track of what I intend on doing, what I have learnt, what I want to explore, and the useful resources I found that day. These then become tangible proof of our progress, as well as an archive of knowledge we acquired, and it becomes easier to look back and see how far we have come.
Adopt a productive mindset and ask for help
Psychologist Carol Dweck conducted fascinating research into our mindsets, and posited that people either have a fixed mindset, and see intelligence as set in stone and immutable despite efforts; or have a growth mindset, and accept that failures are stepping stones toward success. Adopting a growth mindset makes you less afraid of making mistakes, which helps reduce perfectionistic tendencies, and enables you to spend more time learning and practicing as you are not desperately trying to avoid the discomfort of being wrong.
It is also discomfort that sometimes stops people from reaching out to others to ask for help. The fear of sounding incompetent, or of bothering others only helps to make us more frustrated as we spend too long stuck on a problem. But spending 30 minutes on a problem before asking for help usually ensures that we have given it a good try, and gives us specific questions to ask of coworkers or your favourite search engine, so that you can understand where the gap in your knowledge is, rather than simply solving your immediate problem.
In conclusion
Of course, there are still days when I will want to curl up under my duvet because programming can be really tough and frustrating, but they are not so frequent anymore, thanks to the changes I made to how I took care of my mental health. All these strategies take time to adopt and adapt to, but they are worth following, and they have helped me greatly in reducing my self-doubt, ridding me of my procrastinating tendencies, and of my hesitation to try things out. I now experience less stress, I am more productive, and I can give the best of myself to my team. This makes programming a joy and keeps me passionate about it!