Managing feelings of inadequacy when writing code
Writing code as a newbie developer can be rather intimidating. It’s very easy to feel like rubbish while writing code that you think is rubbish or while struggling to understand what a certain method does or grappling with API documentation or whatever. I think being aware of your limitations as a developer is great because it keeps you humble, on your toes and on the straight and narrow to becoming a genuine software craftsman.
While it’s great to be sceptical about the quality of code you produce, e.t.c, it’s horrible to feel like less of a human being simply because you are going through your developer struggles. You know how people say joy comes in the morning, and that there is light at the end of the tunnel? Truth is that stuff does not apply to the life of a developer. When you signed up for this semi-colon-filled life you signed up for a life of feeling out of your depth, of feeling in over your head. I think that’s perfectly fine.
There is light at the end of the tunnel but only temporarily. Before you know it you’re back in another darker, dingier tunnel. Learn to love it. Learn to love your tunnels. If you ask me, this is the secret to developer happiness.
Learning to love your tunnels is difficult though. I mean, who smiles through NullPointerExceptions and Missing Attribute Errors? Hear ye now, it’s difficult but not impossible. In addition to having enough patience and a nice rubber duck, there are a number of things that can help any dev lean into the pain. I am not the most experienced developer but in my short life in front of the editor these are the things that I have identified to be most helpful in terms of managing my emotions:
- Don’t compare yourself to others / your code to other code in an “ugh, he/she is so awesome and I suck” way. Instead do it in a “wow, he/she is so awesome and I suck but I could be awesome too” way. Too much of the negativity in life and in all our respective hustles come from looking around us and immediately feeling like rubbish. Obviously what I’m advocating here is much easier said than done but I believe that if we are conscious of how we view other people and their work in relation to ours then we can train our minds away from this destructive way of thinking.
- Embrace Google, but in a constructive manner. A lot of the times when I’ve felt like muck, like a fraud even, about the code I’ve written have been when I came across a challenge, Googled it and found a solution, copy/pasted it (sometimes without even upvoting on SO) and just carried on with my life without taking the time to understand what I had just done. This obviously sucks. By taking the time to understand whatever a Google search unravels, you’re not only protecting yourself from the tyranny of copy-and-paste and the feelings of inadequacy but you’re also increasing your programming knowledge and thus becoming a better developer.
- Read code. Dig into code and get a feel for what it does. Understand what this does, why that is there. Do this on your own or better still, in a group. This is very important because it builds confidence in your skills and abilities as a developer.
- Go one step further from reading code and play with code. I find that I understand stuff better when I fire up a console or IDE and play around for a bit. Doing this also creates a feeling of satisfaction from getting results out of a concept you presumably have just encountered. That feeling is great.
- Do a lot of small side projects. Getting stuff completed is very instrumental to feeling good as a creative individual.
- Contribute to open-source projects. Even if you are just correcting a typo somewhere. I think that experience of being part of a collaborative effort involving developers of all skill levels will do wonders for how you feel about your abilities.
- If you’re paired with someone, do not let your partner carry on while you feign understanding. Stop them where necessary and ask questions until you get a firm enough grasp of what is going on. Oftentimes you will find that your pair might not have understood the code as much as he/she thought. Having both pairs understand what is going on and not feel lost and confused is obviously very important to a successful pairing session and to you feeling great about your abilities.
These are the seven tips I can think of now but obviously there are a million things you can do to manage you cringing at your every keystroke. More experienced developers tell me that this feeling never completely goes away, even though *they* act like it does. Oh well. Point is it is important to take active steps to make sure the feeling is properly dealt with. That way productivity, happiness and awesomeness are enhanced.