Snake Wrangling and Coding
As a kid I didn’t like snakes all that much. They’re cold, slippery, and have a good chance of posing a terminal inconvenience to whomever ventures near. Which makes it all the more surprising that I did a fair amount of snake wrangling in my childhood. Of course, I’m not talking about herpetology’s raison d'être. No, I am talking about Python, “the world’s most powerful programming language that you can still read”, which happened to be my introduction to the world of programming.
I was born in Moscow near the turn of the millennium, around the time when people were starting to seriously question the use of two-digit codes to represent four-digit years. I don’t remember much of Russia, only a few images that have cemented themselves in my memory: the park in the courtyard of our apartment building, a snow-covered oasis amidst the grey cliffs of surrounding buildings; a street full of people, packed to capacity by a collective need to get to work on a Monday morning; the omnipresent pigeons, waddling and pecking their way along the sidewalks, oblivious to the ocean of pedestrians around them.
My memory comes into focus around the time my family moved to Canada. I was four and started school soon after we arrived. It took me a little while to learn English, and my grades reflected that. It wasn’t until halfway through elementary school that I achieved a modicum of academic respectability. But grades aren’t really what school is about. The people you meet, the ideas you seed and are seeded with, that is the true purpose of an education. Of course I didn’t realize this at the time, and looking back it seems like an unbelievable coincidence that school worked for me as well as it did.
High school was where I took my first course in computer science. Being the son of a software engineer, this was not my first exposure to programming. Throughout my childhood I had, on several occasions, picked up one of the copies of “Snake Wrangling for Kids: Learning to Program with Python” that my father had strategically planted around the house. I worked through the first couple of chapters, then put it down to go play basketball with friends, not to pick it up again for a few years. It wasn’t that I didn’t find programming appealing- on the contrary, I knew it was what made all the super cool programs on my computer possible. The idea of being able to write one myself definitely tickled my fancy. The problem for me was that the quantum leap between “Hello World” and the latest video game seemed infinitely large. How does one even start a project like that? I had no idea, and having the fleeting attention span common to preteens everywhere I didn’t spend too much time dwelling on it.
My high school computer science class changed that. Funnily enough, it wasn’t the class itself that did the trick. The course material was quite similar to the books I had read (albeit in C++ this time), an introduction to the fundamentals with little attention paid to potential applications or interesting examples. No, my classmates were what made the difference. The chance to see what other people had already accomplished and were in the process of accomplishing was what made things click. One person had made their own text editor, another had made a bacteria colony simulator, another their own dungeon-crawler RPG. If they could do it why couldn’t I?
My first “useful” application was an inbox manager that I built for my mother, back when Gmail wasn’t as smart as it is now. My mother was subscribed to many mailing lists, and the deluge of information was becoming unmanageable. So I made a super simple program that would organize her inbox based on specific email addresses or keywords (so all emails containing the words “sail” or “boat” would be grouped together, for example). It was poorly designed, even more poorly implemented, and bordering on unusable but I was proud of it nonetheless, and my mom was proud of me (or so she told me, anyway). I had created something of value, and it felt good.
One of the most pivotal moments in my life was undoubtedly joining Shopify’s Dev Degree program, through a miracle of happenstance and timing. There are many things that I was expecting from a computer science degree at Carleton, but a paying job in an industry-leading company directly from the get-go was not one of them. I remember the whole onboarding experience feeling surreal; I wasn’t even 18 yet, what was I doing at a place like Shopify? The feeling soon dissipated however, and I began to feel at home. My fellow Dev Degree students and I were not put onto development teams immediately, thankfully. We spent the first term learning the ropes, gaining the skills we would need to contribute as developers down the road. For our teachers, from the Shopify Computing Education team, this was no easy task. All of us were coming from different backgrounds and had varying levels of experience. Some of us had previous developer internships, some had worked as designers, some had developed and launched apps, some had participated in computing competitions in school. To make life more interesting, this was also the inaugural year for Dev Degree. We were the metaphorical guinea pigs of this experiment in education.
Not surprisingly, the program changed quite a bit in that first year. Course sequences were rearranged, content was adjusted, and teaching styles were experimented with. Personally I quite enjoyed this period of tweaking and tinkering - as the first cohort of Dev Degree students we participated directly in the program’s evolution. I had the sense we were involved in something special, a method of education that had the right mix of theory and practice that is so often absent from today’s university curriculums.
As much as I learned during the my first few months at Shopify, it was nothing compared to the first couple months after being placed on a team. In January of 2017 I joined a team called Merchant Optimization, who were in the process of reworking Shopify’s data model. My onboarding there was probably the most information-dense period of my life so far. I had never heard of Apache Spark, Hadoop, Dataframes, MapReduce, Kafka, or Presto, and had no idea what in the world an SLA was. Not to mention I had never developed software at a company of several thousand people before.
My first pull request to hit production at Shopify had forty-odd comments and took me almost a month to write. It was nothing too complicated, what I was doing was combining two datasets into one. This pull request was, in essence, the entirety of my onboarding. This learning-by-doing approach sums up the ethos of the Dev Degree program; learn while getting your hands dirty. This approach makes a lot of sense in most fields, but especially in computer science. Most of the time the biggest problem that newcomers like me face is that they don’t know what they don’t know. Diving into a problem is the perfect way to discover which questions you need to find the answers to.
One particularly interesting project I worked on was not even strictly for Shopify. Shopify uses many open-source tools and frameworks, and like many other software companies, we like to give back to the open-source community. Which is why I spent several months working on Kubeaudit, an open-source Kubernetes auditing tool. In short, the goal of Kubeaudit is to allow developers to quickly and programatically audit and secure their Kubernetes clusters. Not only was the problem technically challenging (at one point I resorted to modifying Golang’s yaml parser, an exercise I do not recommend), but it was also of great relevance to Shopify and the development community as a whole. With an ever increasing percentage of the world’s computing power migrating to the cloud, security is quickly becoming a top priority. It was incredibly motivating to contribute to a potential solution.
I always find it interesting to look back on my time at Shopify. Every few months feel like a few years in terms of the shift in perspective they bring about. Every time I switched teams I met new people, with new mindsets, new opinions, and new things I could learn. I’m not at all certain what my future holds, or what I want it to hold. There are so many possibilities to explore; that’s one of the most attractive aspects of this field. From artificial intelligence to visual reality to blockchain to cloud computing to whatever novelties tomorrow will bring, there truly is a never-ending spectrum of opportunity. Which one of those will my future self find the most interesting? I couldn’t say. But I sure will have fun finding out!