It’s Never too Late to Learn Something New

It’s been a while since I’ve had a blog. Blogging is what got me into coding in the first place, so I figured sharing my journey to becoming a software engineer — and the biggest lesson I learned along the way — would be a great way to kick things off.

Learning to Code

In 2013, after finishing my first bachelor’s degree in Physics, I took a gap year to do NGO work in Kenya. I raised funding from friends and family, and I wanted a place to share my experiences with everyone who supported me. I knew next to nothing about coding. My experience was limited to LaTeX (for writing math-heavy papers) and Mathematica (for solving equations and plotting graphs). Many of my physics peers had been programming since high school and were building Android apps, which made me feel like it was already “too late” to start coding. Setting up a blog seemed more approachable, and I didn’t just want to use an existing platform. I had time before my flight to Kenya, so I decided to learn the basics of how the web works.

I discovered a wonderful platform called Code School, with playfully illustrated online courses and interactive browser-based lessons. That got me hooked. I learned some HTML, CSS, JavaScript, and PHP to build and self-host a simple blog. Eventually, that blog grew into what I now realize was a (very) convoluted custom PHP static site generator. I didn’t fully understand everything I was building at the time, but it was fun—and in my downtime in Kenya, I kept learning the basics of jQuery, Rails, and Python through more courses. When I returned, I decided to pursue a second degree in Philosophy and Computer Science. From there, I worked at a Natural Language Processing startup, co-founded a startup in the movie industry, and then worked as a software engineering manager in the US.

It’s Never Too Late

It turns out I was very wrong to think it was “too late” just because I hadn’t been coding during my Physics degree. That mindset likely held me back for at least two years. I encountered that same lesson several more times throughout my career. For example, I was a big Apple fanboy who loved the idea of building apps, but I’d only ever created websites, and mobile development felt intimidating. Then our startup realized that building a cinema app was the best way to gather data on movie preferences, so I dove into React Native. Over time, I even learned how to write custom native components in Java and Objective-C for deeper OS integration. Ultimately, I became a React Native specialist, and that expertise helped me land a job as a senior engineering manager in the US during the pandemic when our movie startup fizzled out.

Although I began my software development career doing data science with R and NLP in Python, I then spent six years focused on front-end and full-stack roles. It seemed out of reach to jump back into machine learning — until I followed my boss to an AI startup last year where I had the opportunity to focus on machine learning again. This pushed me to learn PyTorch, train custom language models, devour papers on LLM architecture, and dive into the HuggingFace ecosystem of models and tools. Once again, I proved to myself that it’s never too late to learn something new.

Dive Deep

Not everyone wants to keep reinventing themselves, but if you have a passion for learning, don’t let the notion that you’ve “missed the boat” stop you. If you’re willing to invest the time, you can always pick up something fresh. Beyond my belief that it’s never too late, the other attitude that has fueled my career is a drive to understand things deeply. When I learned web development, I also studied the history and protocols behind the internet. When I first picked up React, I dug into how the virtual DOM works and how to implement the core of Redux in a few lines of code. When I wanted to improve my back-end skills, I read Designing Data-Intensive Applications and explored Domain-Driven Design. When I returned to machine learning, I took Andrej Karpathy’s courses on implementing a PyTorch-like framework and building transformer blocks from scratch. While I now rely on higher-level tooling like the Transformers library, those deep dives gave me crucial context and a stronger grasp of the fundamentals.

At the beginning of this year, I decided to start a blog again to hone my writing skills in an effort to explore moving towards a career in software architecture consulting long term. We’ll see where it leads, but I know it’s not too late — and that practicing consistently and digging deep are the keys to success.