I started my apprenticeship at Tandem roughly 7 months ago and walked into the studio at Wabansia Avenue with a swarm of butterflies in my stomach and my nerves on edge. This jittery young apprentice who, a year previously, had little to no interest in programming (and could easily be classified as a Luddite) was about to start his first day at one of the best coding apprenticeships out there. What attracted me to the apprenticeship model is that you get to work with actual clients and level up your programming skills at the same time.
When my apprenticeship started, I still remember the day I was handed my MacBook and was at a loss on how to even operate it. I had been stuck in the Windows environment for the few months that I had been dabbling with code building random “Hello World” applications.
Yet, there I was, about to be sucked into a completely different environment. As if things could not get any more stressful, I was also told that my first project would be a Rails project. I found out the same day that Rails was built upon a language called Ruby, which I had never worked with before. The maraschino cherry on top of the cake — I would have to pair with someone else.
To the uninitiated, pair programming is a concept in software development where two developers share the same workstation with their own keyboards and mice. Under this arrangement, one of the developers is the “driver” who does most of the typing and the other is the “navigator”, who is more focused on the overall direction of the coding. Also, both developers frequently switch these roles over the course of the day. To this day, I sometimes shiver when I think about my first pairing session and how I let my nerves conquer me when I drove for the first time. My navigator was a programming rockstar and I was a little fanboy sitting on the outskirts of the concert hall. I couldn’t even figure out where to start. Fortunately, my navigator was understanding enough and did a bit of the driving to nudge me in the right direction.
The first few days of the apprenticeship revolved around setting up my laptop, configuring Ruby and a whole list of other chores. There were days when I would be sitting with my driver watching him or her bullet away on the keyboard, and the words of “If I Could Be Like That” by Three Doors Down would come hauntingly to my lips. For example, there was this one time when I had a whole streak of windows on my screen and my pair had to help me “master” window management. Or the time when I was driving in a remote pairing session and would freeze up whenever my pair navigated me. Or the time when I had to create my first database migration file and was clueless about how databases work under the hood. Or the time when I had to push my first commit to Git via the terminal instead of Github Desktop. I could go on forever…
My fear, stress, and intimidation were getting the better of me and dramatically hampering my learning abilities as an apprentice. Instead of continuing to befuddle you readers with my fears, let me get to that fateful December morning when everything changed for me. I went to a nearby cafe to grab a cup of coffee, and on my cup’s sleeve were emblazoned the following five words that have since become my mantra in life:
“PUNCH FEAR IN THE FACE”
These words resonated with me so deeply as I headed to the studio, that I realized I had to act quick. This fear had to go. These people I’m pairing with are my friends, notwithstanding their superhuman coding abilities. They are here to help me learn. The code they are writing is pure logic, and if there is one compliment my high school teachers gave me, it’s that I think logically. So why not apply it here as well? Read the code, don’t just stare at it. And read it in your own time too. That is the best thing any new programmer can do. I confess that my bathroom reading for the first few months of apprenticeship was code that my pair had written for the day. Even if I didn’t understand everything, I had enough of an understanding to ask my pair some useful questions about the code. Why are we validating the uniqueness of this attribute? What is the difference between a job and a worker in Sidekiq? How is our deployment pipeline setup? (If you don’t know the answer to any of these questions, the Tandem(software development services) apprenticeship is for you!) As a result, not only was I able to get my conceptions about the code solidified but it also helped my pairing partners review their code one more time. That learning process and quick feedback loop is the essence of pairing and how it can be so beneficial in a project.
I also quickly realized that making mistakes is not only expected but encouraged at Tandem. In fact, during a 1-on-1 with my manager, he pointed out specifically that he would like me to make a mess. That resonated with me pretty well too because if you’re not making mistakes (causing bugs, joining the wrong conference call, not running a static code analyzer before an important push, etc.), you’re not trying hard enough. Fear of failure truly is failure itself and subduing it is the key to becoming a programmer.
With enough time and practice, writing clean, concise and well-tested code becomes second nature. It’s a matter of when, not if. In the meantime, the most important thing an aspiring developer can do is to put that fear aside and ask all the questions in the world. As wonderful and encouraging as the people at Tandem are, it is up to you, the apprentice, to be willing to learn without fear. Be bold, be confident and most importantly, be fearless. Fast forward 7 months and you have that same apprentice headed to the same studio as a consultant, having punched fear in the face…