My Origin Story
Tags: career, programming, retrospective
Published: 2021-08-11 16:21:08

Next time you're faced with an awkward get-to-know-you-situation, try this one weird trick: ask someone how a particular topic or hobby first captured their interest. This question has the potential to reveal someone's most interesting characteristics and motivations. People are usually best at telling their own origin story.

Especially in software-land, these stories are as diverse as they are interesting, varying from familial influence to a nascent kinship with structure and order (it always starts with Legos). Often, they include a recollection of a journey of the triumphs, failures, and breakthroughs trying to materialize some idea.

When prompted for the beginning of my own journey, I recount a particularly poignant moment that happened around ninth or tenth grade—when I wrote my first program. My most faithful retelling occurs when I replay the wave of emotions ranging from the excitement of running code to the all-too-common knee-jerk frustration with errors, and then ultimate victory as the code printed out the answer in a fraction of the time that it would've required by hand.

Per the course requirements of one of my first high school math classes, my parents purchased an expensive TI-84 calculator, insisting I read its voluminous instruction booklet given their $100+ investment in my education. That's when I first encountered the words "TI-BASIC programming language". Meaningless to me at the time, I skipped ahead to see how I could connect the calculator to my family's HP desktop and download games from the internet.

A few weeks later, I noticed my math homework repeatedly showcasing a specific type of problem, geometric vector operations. These types of problems are formulaic, but require executing a series of steps by hand (well, typing on a calculator _by hand_). A series of steps that are the same every time, just with varying input. An algorithm. The wheels in my head began to turn.

"I already use my calculator to solve these problems since they require sine, cosine, and tangent," I thought. "But, I have to type in the same stuff every time. Couldn't I just plug in the two vectors and have the calculator run the steps for me?" The latent memory of seeing TI-BASIC in the calculator's instructions awoke and seeded an idea so deep in me that it still lives there today: can I program this?

In particular, I remember the bus ride home that day. It was a spring day, the windows were down, and the scents of diesel and flowering trees continually wafted through the bus. I hurriedly dove into the TI-BASIC documentation, poring over how I could enter the original vectors, use them in trigonometric functions, and print the final result. I knew it must be possible, but I was itching to discover how, becoming so engaged that I nearly missed my stop.

Throughout the evening I diligently worked developing, debugging, refactoring, and testing—the first taste of a familiar dev cycle that is now my day-to-day work rhythm. My fingers typed furiously on the calculator, or as furiously as one can type on a calculator (mostly because I hadn't realized there were PC-based IDEs for this calculator).

A few days and frustrating syntax and logical errors later, I had a working program. Perhaps foolishly, my thought was to unleash it during my next math test, potentially flying through dozens of exercises in record time. Until then, I had only verified my program's output using old homework problems.

So, on the day of the test, as I encountered the first exercise, and not trusting my own code, I did it by hand, and then again, verifying the answer was correct. With a sigh, I nervously opened my program and input the vectors. Less than a second later, my program abruptly printed out the exact answer I had reached by hand.

I couldn't believe my eyes. It worked.

I verified the next few exercises by hand, then run each through my program. Every time I expected to see the wrong result or worse, a crash (as it had after some unfortunate feature creep to add a looping mechanic for several vectors at once), I saw the solution I expected. It was nothing short of a transcendental experience. 

Sadly, `VECTOR_MATH` was my first and last TI-BASIC program. But having tasted the infamous Coder's High™—that euphoric rush of seeing my thought process turned code turned running program—I was determined to chase that elation.

Like all stories of growth, there isn't just _one_ moment that contributes to who I am today, but I now know this experience was a definitive turning point.  Maybe one day I'll write about them all, but for now, I simply want to capture the details of this story before they're too fuzzy.

As developers, many of our growth milestones happen in silence or simply pass by without significance, ethereally celebrated with a fist pump, relieved sigh, or satisfying commit message. We're continually on our programming journey, always experiencing growth and incrementing our experience level. 

If you've never thought about it, I encourage you to take a few moments and think about how you arrived where you are today. There's real power in retrospection.