Skip to content

From Tinkering to Transformation: My Journey into Programming

Embarking on CS50P was more than just a decision to learn Python—it was a pivotal step in advancing my career and bridging the gap between foundational knowledge and advanced bioinformatics skills. Through this course, I didn’t just learn programming; I transformed how I approach problems, analyze data, and craft solutions. From developing a structured way of thinking to completing a challenging final project, CS50P has been a journey of profound growth and discovery.

A Chance Encounter in the University Library

It all began in the unlikeliest of places: my university library. At the time, I was juggling academic responsibilities and a budding curiosity about technology. My personal laptop was an old machine that struggled to keep up with the demands of modern software. Despite its limitations, it was my window to a world of endless possibilities.

When I started university, I got my first personal laptop—one that I wasn’t obliged to share with anyone. That’s where it truly began, even though I had tried learning to program since my high school days. With this laptop, I realized I could do anything I wanted. I came across the concept of Linux and spent days in the CPUT library learning and tinkering. Fortunately, the internet speed there was unparalleled, allowing me to download gigabytes of data in minutes.

I soon realized that my laptop’s potential was limited by its Windows operating system. This led me to dabble in Linux. Removing and reinstalling operating systems became second nature. As my studies required Windows, I learned to dual boot. After a few months, I became comfortable in Linux. To maximize my laptop’s performance, I fully migrated to Linux, though I frequently hopped between distributions—Ubuntu, Linux Mint, Pop!_OS, Kali Linux, Fedora, and Manjaro, to name a few. Eventually, I mastered the art of carrying an entire operating system on a USB stick, allowing me to work seamlessly from any computer.

Many nights were spent in the library tinkering with Linux when I needed a break from studying for immunology or cell biology. This dual focus on biology and technology sparked ideas that bridged the two fields. Sometimes, instead of studying for upcoming biology tests, I found myself solving Python problems late into the night. Though I initially struggled with concepts like object-oriented programming, I couldn’t resist the pull of combining biology with computation.

When I discovered that my course included a specialization in molecular pathology, I was thrilled. It was a perfect blend of my love for molecular biology, which began in high school, and my growing interest in computation. During this time, I stumbled upon CS50x on YouTube.

From CS50x to CS50P

The excitement I felt while tinkering with simple algorithms during CS50x encouraged me to explore further. By the time I completed the course, I was hooked. I wanted to go deeper—to understand not just how to program, but how to use it meaningfully. That’s when I discovered CS50P, a Python-specific extension of the original course. Python, with its versatility and relevance to bioinformatics, was the perfect next step.

CS50x challenged me to think at a low level, showing how computers operate at the memory level. While I found C daunting, the Python section was a breeze—at least the functional programming part! After graduating, I enrolled in CS50P, my favorite language-focused course. Python felt intuitive, almost like English for computers. Enrolling in CS50P marked the start of a transformative journey.

Balancing work and study was challenging, but David Malan’s lectures kept me motivated. Sometimes I would complete an entire problem set in a few days; other times, it took weeks. Despite the challenges, I persevered, driven by the desire to integrate programming into my career.

Lessons from CS50P

David Malan’s mantra of breaking big problems into smaller, solvable parts became my guiding principle. Through problem sets and projects, I learned to approach challenges methodically. Concepts like loops, functions, and data structures transitioned from abstract ideas to powerful tools. Debugging, once a source of frustration, became an opportunity for growth.

As I reached the end of the course, I secured a position at CPGR, working with microarray data. For my final project, I combined my biology and computational knowledge to create the Genomic Data Processor. Using Python’s pandas library and the Biopython Entrez module, I built a tool to process genomic data—a realization of my dream to leverage programming in bioinformatics. While Python isn’t yet as adept as R for bioinformatics, I’m excited for Biopython’s future and plan to supplement my skills with R for statistical analysis.

Gratitude for the Journey

Looking back, my journey into programming wouldn’t have been possible without the wealth of free resources available online. Harvard’s CS50, YouTube tutorials, and MIT OpenCourseWare played pivotal roles in shaping my skills and fueling my ambition. These platforms didn’t just teach me how to code; they empowered me to dream bigger, see problems as opportunities, and embrace continuous learning.

Looking Ahead

Programming has become an integral part of my career in bioinformatics. What started as curiosity in a university library has evolved into a lifelong commitment to bridging biology and technology. As I continue to grow, I carry with me the lessons from CS50P and the gratitude for the educators and resources that made it all possible. To Harvard CS50, YouTube, and MIT OpenCourseWare—thank you for making knowledge accessible to those willing to invest their time and dedication.