Learning to Code in 10+ Years

Published on: 2023-11-09

A reflection on my journey learning to code.

Written by Kyle Nicholson

learning

reflections

The Beginning

I started learning to code in 2011. I had just graduated from college with a non-CS degree, and I had no idea what I wanted to do with my life. I had been working as a security guard to try to escape my parents’ basement, but I realized two things very quickly: 1—I would never make enough money as a security guard and 2—I hated being a security guard. So, when I decided to quit that job in late 2011, I had no plans aside from knowing I had to find something else to do.

At the time, my best friend was working as a web developer at a small firm. He also came from a non-CS background and suggested that I learn to code. I was curious but had no real idea what that meant. Despite spending a lot of my life using computers, I had never taken any computer-related classes. I always thought programming was something that required a lot of math, which was never my strongest subject in school. However, I was encouraged by the fact that my friend did not have a math background, and he had learned to code on the job without any prior knowledge.

I started by learning the fundamentals of HTML and CSS. I built a couple of simple websites that worked, although they did not look great. I enjoyed the process of learning and had fun fixing bugs and making things work. Unfortunately, I was starting to run out of money, so I decided to look for a job. I ultimately wound up finding a position as a software tester at a medical technology company. The job didn’t involve any coding, but with paid relocation and a salary that allowed me to live comfortably on my own, I could not pass up the opportunity. I decided to put my coding journey on hold and moved to a new state to start this job.

In hindsight, I view my choice to quit learning to code at this point with some regret. I know now that I could have gained a lot of ground and potentially changed my career trajectory if I had kept learning in my spare time and tried to apply some things I was learning at my job. I might have realized sooner that programming was something that I enjoyed. Yet I can’t fault myself—I was young, broke, and trying to live in the moment. It just wasn’t the right time for me to pursue programming seriously.

A Detour

I’ll fast-forward a few years to 2015. I had worked the testing job for a couple of years before deciding that it was not how I wanted to spend my career. It was dull and passionless work — I spent most of my day copying and pasting test cases across Excel spreadsheets, repetitively pointing and clicking through outdated applications over and over. Although I did get to work alongside software developers and learned about their process, I never worked directly on the software. Eventually, the monotony wore me down, and I decided to quit to try something else.

As a full-time desk worker, I had observed the toll that spending 40 hrs/week in a chair was taking on my body. I realized that sitting still all day was the accepted norm in modern offices and thought it was a problem that I now understood well and could do something about. I decided to enroll in a Master of Public Health (MPH) program in which my emphasis would be on chronic disease prevention and the promotion of physical activity in office workers.

To my surprise, the classes that I gravitated to as an MPH student were those that involved statistics and data analysis. I learned how to analyze scientific data by writing programs using a statistical package called SAS. SAS was not a user-friendly platform, but I again found myself enjoying the process of getting the computer to do what I wanted. The feeling of getting my programs to run with no errors and to produce the output I wanted was exciting and rewarding.

At this point, I decided to start learning Python via FreeCodeCamp and Codecademy in parallel with my coursework. My motivation for learning python was primarily curiosity, but also wanting to develop some additional skills that would give me more opportunities in the future professionally and wouldn’t require me to pay for a SAS software license. I had read that python was a good option for beginners who are interested in learning programming fundamentals, so it seemed like the right choice for me.

I learned about variables, lists, loops, and conditionals. I was soon able to write simple programs that solved simple problems such as a calculator app and a to-do list app, both of which were based on the command line. With Python, I felt the same sense of reward from getting my programs to work. I was excited to continue learning, but would say I still had not found a passion for coding and was not sure if I would find a way to use it in my career.

I completed my master’s degree in 2017, and initially, I started looking for work in the health promotion space as I still felt strongly about the idea of fighting against physical inactivity in the workplace. The issue was that there were not many jobs in this field, and there were especially few jobs that wanted to hire someone with a master’s degree. Moreover, the pay was not all that great, and I had a lot of student loans to pay back.

So, intending to pay my loans off as fast as possible, I decided to apply for work locally in healthcare IT. I ended up getting an offer from the first job I interviewed for as an application analyst, which was essentially a technical support position that is one step above the help desk.

I’ll be honest: I was a little disappointed. I had just spent two years getting a master’s degree, and in some sense, I felt like my career change had been a failure, and I was right back where I started. However, I was grateful to have found a stable job that paid well. I figured that I could always come back to health promotion once my loans were paid off, and I felt good about the fact that my work in IT would benefit healthcare providers and patients. I also figured there might be some opportunity to use and improve my coding skills in the IT space.

Finding My Way

I’ll fast-forward again to 2020. By this point, I had moved to California, where I had spent the past year working as an IT consultant for UC San Francisco. When COVID-19 hit, the main project I was part of was canceled, and all the contract employees, including myself, were let go. I wound up accepting a full-time analyst position based in Bend, Oregon, hoping that it would give my (soon-to-be) wife and me some additional financial security amid the turbulence and uncertainty of the pandemic.

The job had many elements that reminded me of my time as a software tester—particularly the repetitive tasks of data entry, filling out forms in old programs, and moving files around from one place to another. I started to wonder if this sort of stuff was just going to be part of my job forever. If it was, I knew I had to find a way to reduce the time I spent on these tasks. After some Google searches, I stumbled upon the book Automate the Boring Stuff by Al Sweigart. Although I felt like it was probably going to be a programming book that might be too advanced for me, the title spoke to me, so I decided to give it a shot.

I ended up working through the book and Al’s Coursera course with the same name. Automate the Boring Stuff is essentially a beginner’s guide to python and how it can be used to create programs that perform manual tasks such as web scraping, sending emails, and manipulating files. I found the material to be accessible, and it helped solidify my understanding of python while also teaching me things that could have direct carryover to my work. I found that having a practical application for my learning was a great motivator to continue. My IT job soon became a playground for practicing python to solve my own problems.

After several months of trial and error, I finally wrote my first legitimately useful program. It was a script that could read through a folder of PDFs, extract specific data, and rename each file based on that data. This was necessary because the original PDFs were auto-generated with filenames that were useless strings like DxAS1X2GOAM4cAS4rER. Instead of having to open each file to find the user’s name, copy, close, and rename the file, I could run my script once and rename all the files in a matter of a few seconds.

I know it might not seem like much, but I believe this was an important milestone in my learning journey: I finally saw firsthand what I could accomplish with programming when I had a real-world problem I could solve. Although the process I automated was small and fairly inconsequential, my program made it much faster and less prone to mistakes. It solved a real problem for a real person. I believe it was invaluable for me to experience that firsthand, and I view it as the accomplishment that solidified my passion for programming and desire to write software professionally.

Present and Future

The possibility of saving time and reducing the burden of repetitive tasks has been a source of motivation for me ever since. Over the past three years, I have continued to learn and practice python and have written several more complex programs that have saved my team time and made our routine processes more efficient. I have also started to learn about web development and have built a few simple web apps using Flask and Django, and I am now diving deeper into the world of javascript.

As I have gotten deeper into python and programming in general, my passion for problem-solving through technology has only increased, which led me to decide to work towards a degree in computer science. I have taken two university level programming courses and am currently enrolled in my third. Eventually, my goal is to transition into working as a software engineer full time to help build and improve products that solve real problems for real people.

Deep down, learning to code has always felt like something I was meant to do, which I think is why I kept coming back to it over the years despite my setbacks. I know this post is rather long. However, I wanted to share my journey with others who may be struggling with similar setbacks to show that it can take a few tries, and perhaps several years of starting and stopping, before you really find your footing. I believe losing your way is a normal part of the process and everyone can expect to get derailed and lose sight of the end goal at some point.

With that in mind, my aim is to continue this blog to help others who might be still in the early stages of their journey—I know that I would have appreciated having a resource like this when I was first starting out. I also plan to continue sharing my projects on GitHub and my portfolio site, which I hope will be useful to others as well.

Here are some of the beginner python resources I used and would recommend:

Thanks for stopping by, and I hope you’ll come back soon!