I recently read an article called Coding is not ‘fun’, it’s technically and ethically complex, which makes the argument that labeling “coding” as fun paints a rosy picture as to what programming is, dismissing the discipline and underlying complexity required to do it. Reading the article is really not worth it, but it did get me thinking about how I got into programming and my own perspectives on the skill.
Growing up in the 2000s meant that I grew up alongside the rise of gaming. Even in elementary school, I remember having large computers that we had the occasional opportunity to use for typing practice (or Flash games, when the teachers weren’t looking). Although Flash has lost its glory over the years, leveraging the existing browser technology to create interactive cross-platform games was really ahead of its time. For many in my generation, I’d imagine that their initial interest in programming stems from the plethora of games that were made possible by coding.
Over the years in elementary school, there were countless times that I wanted to delve into programming. I’ve tried reading various references to languages like Python, C++, and Java and ultimately ended up nowhere. The issue is that playing around with a programming language is heavily restricted when you’re not sure what you want to do with it. It was an early lesson into the truth of software development – the most difficult part of it is knowing what to build; building things is (relatively) easier. My crowning achievement in 2008 was creating my masterpiece, my game… 1/2 done. Twelve years later, it’s unfortunately still only 1/2 done. Nevertheless, it was still something that I was able to create using nothing but the power of Flash. ActionScript then became the first programming language I’ve ever learned.
In high school, my interest in programming gradually waned. It wasn’t that I didn’t enjoy the thought of learning more, but my time was taken up by being a high school kid. In grade 12, I forayed back into the world of programming by taking a class that the school offered. Turns out, the class was taken by people who wanted an easy grade and already finished all the cooking classes. It was taught by my art teacher, Mr. Williams. Although he was one of the kindest teachers I’ve had, I’m pretty sure he didn’t have any programming experience. We would read this C++ textbook that he had lying around, spin up CodeBlocks, then finish the questions at the end of the chapter. There was one time where we could skip class to take this two-hour programming challenge hosted by Waterloo. I ended up finishing the challenge with a high score of 15/75. That was definitely the moment I saw my bright future in programming.
University was probably the time that gave me the most exposure to what computers were truly capable of. I somehow ended up being admitted by one of the most prestigious schools in my country and my software development journey began. In my first year, I had one of the highest scores in my introductory computer science class. At the start of second year, I once again used ActionScript to create some mini programs for practicing pedigree tree analysis for an entry-level biology class I was in. Finally, I thought, I was able to use what I had learned to actually create software. Better yet, these applications ended up progressing past the 1/2 done stage.
A separate development that unfolded at the beginning of my second year was a friend of mine introduced me to the world of Linux. One day I saw that my friend Dmitry (a Russian hacker) used a really cool desktop environment that I wanted to try out. He told me that it was something called elementaryOS, which was derived from Ubuntu. 6 years later and elementaryOS is still my main distro.
The first programming job I found was through the co-op program in my school, in the second semester of that year. I only ended up finding a job at the end of October, after sending out dozens and dozens of applications. Miraculously, it was my knowledge of Linux that gave me an edge. The place I worked at was a Linux shop that built their API with Java. Interestingly enough, the UI was also written in Flex, a framework that was based on Flash technology. I was really happy when I got that job offer, as the only other offer I was able to get prior to that was for QA positions. Working at that company is still one of the most enjoyable times in my life. My coworkers and I were super tight, and I felt like I learned all the skills that I can leverage even to this day. Git. Web frameworks. Server technology. Debugging. Agile (done really really well). A lot of the things I look for in a workplace are based on the experiences I had there.
So, where did programming play a part in this story? Every step of the way, the reason I wanted to dive deeper into coding was because it was technically rewarding. Learning a lot about a certain system, practice, or abstraction is a really rewarding feeling. You become intimately familiar with structures that were created from the knowledge, expertise, and creativity of others. While there is a degree of discipline required to build software, the discipline is in knowing what problems there are to solve. It’s in utilizing one’s experience and knowledge to improve performance, minimize security risks, and deliver sophisticated features as required by users. I firmly believe that anyone who is interested in building software is capable of learning how to do it. One just has to remember that coding alone is not programming.