Last time I blogged I wrote about how programming was something that comes unnaturally to me. The post seemed to resonate with lots of people — several reached out to share their own experiences, which was extremely encouraging. If you ever want to chat to me about the id, the ego, the superego, and programming, by all means do!
What I didn’t really explain very well in that blog post is how I get things done, on a day-to-day basis, if the stuff that I’m doing doesn’t come to me naturally. The answer, simply, is to get used to being uncomfortable.
Doing things that you’re not naturally great at is uncomfortable. Every step of learning is a struggle and you’re constantly battling your own limitations. The most common feeling I have is that I can recognise good code when I see it, but I’m damned if I can implement those same techniques in my own work. I guess it’s like any language — often learners are able to read and listen a lot better than they can speak and write. Unfortunately for me, Spanish verb conjugations make a lot more sense to me than programming design patterns.
It’s okay though. I’m not an expert at this by any means, but I’m learning to embrace the discomfort and get shit done. When I go to work, or sit down to do some coding on a personal project, I know that I’m going to experience a lot of frustration. I know that whatever I do, I’m going to run into things that I don’t understand. Or, more likely (and more frustratingly), I’ll encounter concepts that I almost understand, but are just outside my grasp enough that I struggle to recreate what I’m seeing.
I also know that I am going to experience fear. The main fear I experience when starting a project is that, obviously, I’m not going to be able to do it. This is a trap! If I let this fear put me off, I can dither for weeks before trying anything. It’s a silly, unfounded, and generally unhelpful fear that can stall my productivity for too long.
To give you an example: for several weeks I had been putting off writing the code for API authentication in my personal project Gifery. It’s something I hadn’t done before, didn’t really understand, and didn’t really know who to consult about. I knew that it would be a frustrating process and I just wanted it to be magically done for me. So… I didn’t do it. For weeks. I let my project stagnate, and the guilt build up as my Github streak floundered and faded.
Finally, yesterday, while lying in bed with a terrible hangover and gassy cat (my Sundays are generally this glamorous, yes), I decided just to get that shit done. I found some resources online, I trialled and I errored for an hour or two. Surprisingly, it works! But even if I hadn’t reached working code, I shouldn’t have let that stop me.
Too often I’m afraid to program because my work won’t be ‘perfect’. I’m scared that people will tell me that I’m doing everything wrong, that I’m a terrible programmer, and that I should go back to my books and verb conjugations.
The thing is, though, coding is not a competition. I know it feels like it, most of the time. It is so easy to compare yourself to others who are smarter, quicker, and more productive to you — especially with everyone blogging, sharing their projects on Github, speaking at conferences, and tweeting about all of the above. But comparison is the thief of joy, and when I start comparing myself to others I can easily spiral into a grumpy and counter-productive mood.
You know where this advice is leading: compare yourself to your past self, celebrate your own successes, and learn everything you can from others. You’ve heard it before, countless times. But that shit is hard. When you’re deep in a period of discomfort, you feel like everything you do is sub-par, and that your successes are puny, it is hard to be happy for other people and to focus on your own growth.
I don’t really have any helpful advice for you on how to work through that. But just try to remember these things:
If your code doesn’t work, it’s okay. You probably learned something along the way, right?
If your code is terrible, it’s okay. During the process, you probably ran into a whole bunch of problems, and you’ll know how to do things different next time, right?
If you’re afraid to start something because you don’t think you can do it, just start it, okay? If you need to, set a timer for an hour, or even just half an hour, and see how far you get. You’ll figure things out as you go. And if you don’t, see the first point above.
If you’re trying, you are learning. If you’re learning, you are growing. The only way to get better is to keep on learning and growing. Amazing skills aren’t just going to magically manifest while you sleep. You’re going to have to struggle onwards. I’m sorry, that sucks. I don’t make the rules, and all I can offer is solidarity.