Learning to Program — Part 1: Student to Startup

John Lee
10 min readMar 23, 2020

--

Hello, and pleasure meeting you! My name is John, and I’m a pharmacist who self-taught myself into a software development job and then returned to UBC to pursue a second degree in CS. I’ve been meaning to write this series for a while. Now that I’m at a period where I’m waiting to graduate, I don’t have any excuse to avoid using this time to reflect on my journey thus far, practice writing a bit, and maybe learn something new.

I also hope that you will get something from this. Perhaps you’ll find some questions to ask yourself. Maybe find that confidence to jump at that opportunity. Or you can just scroll really really quickly to enjoy the pretty pictures.

Get comfortable. Take a hot shower. Brew a fresh cup of tea and don’t forget to inhale its aroma. Relax. This is a long story, and hopefully an engaging one as well. Here, I narrate the unconventional journey from pharmacy student to software developer.

This is Part 1 of Learning to Program.

Pictures of the UBC campus and Pharmacy building from around 2013 — please excuse the quality.

Alongside its renowned faculty, cutting-edge research, and world-class ranking, no discussion of the UBC Pharmacy program would be complete without mention of its rigorous curriculum. And rigorous it was.

I entered the program after completing just one year of undergrad. Following the first week of orientations, I was hit by an unforgivingly never-ending stream of cases to assess, trials to appraise, labs to practice, drugs to memorize, pizza to eat, notes to note-take, pre-readings to pre-read, and calculations to calculate. And as soon as you thought you were on top of things, just around the corner were assessments galore and several hundreds of gorgeous slides to review over the weekend. As they say — “It’s like trying to drink from a firehose”.

Being the keener that I am, I sat in the second row.

Alongside the basic medical sciences such as anatomy and physiology, the curriculum included pharmacology, pathophysiology, therapeutics, biopharmaceutics, medicinal chemistry, genomics, non-prescription care, clinical skills labs, and clinical case tutorials. The minimum passing grade for all of the courses was 60%. Truly a test of grit.

It was here where I became accustomed to failure. Coming from a background with just decent (not amazing) grades, I had the pleasure of being comically whipped around by the rigorous curriculum. I even got to experience my first remedial assessment after harming a severely asthmatic patient with a propanolol recommendation. But that is why we have classes, so that our mistakes sting enough such that we remember to avoid them in real life.

How does this have anything to do with learning to program?

It doesn’t really haha I just felt like sharing it :)

Okay okay okay I know.

So in my program, we had to take a certain number of non-pharmacy elective credits. This included “Interprofessional Electives” — courses where you learn with students from other health professions. One of the courses that sounded interesting and easy was IHHS 302 — Healthcare Technology.

My interest in technology started here. Clinical Decision Support Tools. Telehealth. Bioinformatics. Electronic Health Records. The course made me think about how I could use digital tools to become more efficient and effective at my job.

Scrawled over my notebooks were various EHR designs. On my Feedly app, a tailored assortment of digital health news. My inbox — a confluence of newsletter subscriptions. And amidst the noise, I wondered what bureaucratic workflows could be reduced into an elegant one-click solution.

“If you don’t know, then look it up”

We were having an orientation for our upcoming fourth-year clerkships, and the severity of the program director’s expression seared this phrase into my brain. I wanted to become good at my practice, so when clerkships came, I took this lesson to heart and wrote down lists of diseases, medications, and other topics to look up at home after work.

Google-searching ninjitsu consequently emerged as one of my core competencies.

Among the topics that I searched was learning how to program. Python seemed like the best language to start with. It was minimalistic, encouraged good habits, had a bustling community, and was popular in the industry.

I started off with the online course Learn to Program by the University of Toronto. The instructors guided me through my first official “Hello World!” and “Hello John!” programs. I made it 80% of the way through before searching for books. I’m too impatient to sit through videos.

Humble beginnings.

There was something about writing and running my own programs that felt empowering. “If this, then do that. Otherwise do this”. Like architecting some complex plan and then watching all the pieces fall into place. Oddly satisfying.

Then I wondered.

If I could build a function that returned values from a dictionary, could I extend this to retrieve dosing information for common drugs?

I could even slap an interface on top of it, adding error checks and smart recommendations.

What about a mobile app? Could I even connect it to a fax machine?

Then I went further.

What other tools could I build to enhance my clinical practice? What can I build to get rid of all the busywork, and spend more time with my patients? Perhaps there were overlooked opportunities in pharmacy to automate some workflows.

I bought my first programming book, Learning Python by Mark Lutz. Page by page, I highlighted, sticky-noted, and coffee-sipped my way through each chapter. I installed my first text editor, Notepad++ and followed along with the examples.

Numbers, strings, lists, functions, classes — I made a commitment to explore and learn the language. I wanted to do it the right way.

It’s a thicc boi.

At this point, I would like to ask fellow coworkers, hiring managers and Python aficionados to quickly scroll past the next set of pictures, lest your eyes be cauterized by the savagery of my code.

I started with a drug reference CLI program. Then I later found out about the tkinter GUI library.

And that’s how I did it. Piece by piece, I built programs of increasing complexity. With the Googolcipittal Lobe of my brain, I looked up more specific topics, such as how to add fancy animations to my GUI applications. I read snippets of PEPs, digested tips and techniques offered by the community, and discovered who our BDFL was.

As I developed my skills, I realized that there wasn’t a limit on what I could build. From web servers to fancy dashboards, the formula was always the same: break things down, learn the sub-problems, build their solutions, and assemble it all back together in the end.

As my former manager often quipped, “in the end, it’s all just a bunch of ones and zeroes”.

In my final year of pharmacy, I pondered my long-term career goals. A high-level 10/20/30-year perspective.

I didn’t want to be “just a pharmacist”. I didn’t want to be conventional — a rowboat bobbing about in the Ocean of Ordinary.

I wasn’t going to let life just “happen” to me. If I were to spend a big chunk of my time working, by golly was I going to make sure that it was the most interesting chunk of my life. I was going to inject some creativity into my career, and I knew that technology was a part of it.

Consulting the Oracle of Collective Intelligence, I found myself drawn into the world of productivity hacks, leadership articles, entrepreneurship, and innovation. Hidden among the noise I uncovered a video that permanently shaped my attitude towards work and life.

“Everything around you that you call life, was made up by people that were no smarter than you.”

This made me think.

Was it fair to think that building the world around me required the traits of a stereotypical genius? Perhaps in certain topics some element of “genius” — whatever you call it — made the job easier.

But interwoven in the background of most high-achievers were common themes of persistence, passion, astute observation, curiosity, focus, and continuous learning. The pattern so common, so predictable, that I could anticipate the punchline of every book I read, and every interview I watched.

And whether they be researchers, inventors, writers, artists, musicians, politicians, founders, or legal figures, they had to start from somewhere. They had to start from zero.

I also found inspiration from people around me. My friends, classmates, professors, and coworkers.

That being said, if you know me and you’re reading this right now, and I’ve complimented you on something, there’s a good chance that I’ve tried to adjust some slice of my life based on your example :)

I read about people and how they work, and I try to incorporate their best qualities into my life. Concert pianist Martha Argerich.¹ Author Stephen King.² Concert pianist Valentina Lisitsa (I Hate Rachmaninoff).³ Engineer & entrepreneur Elon Musk.⁴ Former Starbucks CEO Howard Schultz.⁵ Korean singer Zion T. (a perfectionist of his own music).⁶ There were others whose pictures weren’t available on Wikipedia: top Canadian criminal defense lawyer Marie Henein (interview — highly recommended!), concert pianist Mitsuko Uchida (Is Talent Enough?), and former PlanGrid founder & CEO Tracy Young.

So, what’s stopping me from becoming like one of them?

We’re all ordinary people and some try harder than others. Why should I be discouraged? What if the barrier to making a dent in the universe wasn’t as impossibly high as previously thought? I looked towards all the people who outclassed me, and I thought to myself, “wow, maybe with enough practice I can become as talented as them!”

A new mindset emerged. Challenges became opportunities. Small interactions spawned downstream effects. Constraints changed. The insanity of invention — not as insane as previously thought.

Note: Here are some of my thoughts on mindset.

Motivated by this energy, I found myself joining a classmate of mine who was trying to build a product — IntelliMed — a sort of workflow management tool for pharmacists. I volunteered to help build the prototype. We started with a Python GUI framework called Kivy.

Learning Kivy. Baby steps.
I followed a tutorial on how to build Pong. Then I tweaked the code to make the puck bounce around the screen.
My code was terrible, my applications were buggy, but I loved what I was doing.

After we recruited more team members, we decided to switch over to React & Electron.

The start of my web app journey.

New language, new book.

The application was complex, but I was determined to build the front-end and learn whatever was necessary to do it. If I could learn Python, I could learn JavaScript. If I could pass third-year pharmacy, I could build IntelliMed.

I engorged in as many articles on React, JS, Electron, HTML/CSS as I could get my hands on. I found great resources online, and devoted time to learn about every single package in my package.json file. I signed up for newsletters, followed people on Twitter, and watched tutorials on YouTube.

React was particularly appealing to me. I was hooked by its motivations and I liked how the framework encouraged me to decompose my interfaces into smaller, reusable components. I invested a lot of time towards understanding React and it quickly became my new “bread-and-butter” skill.

I never saw myself becoming a software developer. The original plan was to become a pharmacist who had the skills and knowledge to innovate on the job and become more effective and efficient at delivering high-quality patient care.

But as I soon found out, things don’t always go according to plan.

Photo Credits:

[1] Martha Argerich. By Prensa TV Pública — https://www.flickr.com/photos/prensatvpublica/19538922379/, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=41702690

[2] Stephen King. By bunkosquad / Michael Femia — https://www.flickr.com/photos/bunkosquad/17915541/, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=1544684

[3] Valentina Lisitsa. By Michael von Aichberger — Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10436296

[4] Elon Musk. By Duncan.Hull — Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=76353307

[5] Howard Schultz. By Gage Skidmore, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=76227124

[6] Zion T. By Pabian — 150906 DMC 페스티벌 MBC 라디오 DJ 콘서트 Zion.T, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=45045023

--

--