Programming has always been a frustrating joy for me.
I grew up solving puzzles. Every summer, my family would vacation for two weeks at some property on the California coast where the height of technology was a refrigerator and a radio. My brothers and I would hang out at the beach, play in the fields, read several books, put together jigsaw puzzles and play games. My mom was fond of doing Variety Puzzles and once I figured out my first puzzle, I was hooked!
I got my first glimpse at the craft in high school when I got a summer job as a QA intern for a software company. We would create test scripts by recording actions in their software and replaying them to try out various scenarios. Some of the engineers at the company recommended I try to learn programming while I was there. So I went to the library and picked up the K&R C book. After diligently reading the first chapter about four times and absorbing maybe 10% of it, I decided to attempt the hello, world program.
I can still taste the bitter flavor of defeat when running into that first compiler error. At that time, the internet was still pretty nascent and I was not savvy enough to discover the bulletin boards and forums of people that could have helped me. All I had was this book - which didn’t really prepare me for parsing compiler output. I checked and checked the magic incantations that I had typed into the text editor, but it all looked correct to me. Fortunately, one of the engineers gave me five minutes of his time to point out that the standard library came with stdio.h not studio.h! The sweet joy of seeing those words print out in the console instantly dissolved the bitterness I had felt for the past hour.
I had pretty lackluster success with C for the rest of that summer and never really got the hang of debugging. It wasn’t until a few months into my Introduction to Computer Science course that I gathered enough knowledge to solve problems on my own. Finally solving the Knight’s Tour problem without running out of memory was a turning point for me. I made the connection back to those logic puzzles and how applying those simple rules step-by-step led to remarkable results. I was so excited to learn all about this cool new world of programming!
Early on in my career, I would voraciously tackle new problems, just to see if I could solve them. It was several years before I learned that coming up with a single approach to a solution was only the beginning. Balancing the tradeoffs of speed, cost, maintainability, operational stability, and introspection/debuggability was the next big puzzle to solve. I got into leadership, trying to solve problems at a larger scale through the imprecise language of English. I was coding less and yet more responsible for systems I barely knew. As my career progressed, I got further and further away from what I loved about programming in the first place.
It is time for that to change… This is the record of my journey back into the craft.