Professional programmer, amateur writer, temperamental opinionator.
I learned to program as a child in the 90’s back in the era when PCs
came with sample games like
with included code for hobbyists and learners
to play around with. It was sheer luck that this random interest of mine
turned out to be a marketable, employable skill.
My personal story plays into the narrative of the driven young autodidact, usually male, usually socially awkward, who has that “genius” to be a “real programmer”, perhaps at the expense of other qualities. But this is not my take-away. Anyone can learn how to program, even if they don’t write a line of code – or even touch a computer – until arbitrarily late in life. And unlike other forms of math and logic, it is accessible even to young children, and should be taught in schools alongside other subjects.
I was very fortunate that my uncle and godfather encouraged me in programming from an early age, and also got me into Linux and open source software. I quickly developed an interest in operating systems and systems programming, running FreeBSD and trying to learn the Unix systems call API and the differences between the Unix flavors. I still feel most at home in systems programming languages, such as C; C++; and in our modern era, Rust (but more on that later).
After an embarrassing period where I got deeply into dynamically-typed OOP, Smalltalk, and Objective-C, I was introduced to functional programming and static typing at my university’s functional programming course (then called CS312 and in SML), and I quickly understood the benefits. My friends soon introduced me to Haskell, which I digested with enthusiasm. It is still my favorite GC’d language and applications programming language.
My career proceeded in the C++, systems side of things, as I worked as a low-latency programmer and later as an instructor at Tower Research Capital, but I never forgot my affection for Haskell and powerful static type systems. I excitedly embraced “modern C++” and C++11, and tried my best to use C++’s features to maximize safety and expressiveness.
After Tower, I wanted to avoid finance and low-latency programming altogether, and took a job at Obsidian, one of the largest Haskell consultancy shops, to work on a mix of embedded C projects and Haskell projects in Reflex, Obsidian’s open-source framework for “Functional-Reactive Programming,” a revolutionary up-and-coming paradigm for GUI programming.
But my interests in strong typing and in systems programming could not fully be reconciled until I joined Savant Power, my current employer, and discovered Rust. As I learned more about Rust, it overcame my initial skepticism, and it became clear to me that Rust was finally achieving what modern C++ had been striving for for so long: A high-performance systems programming language that was also type-safe, ergonomic, and composable. And that is where I stand to this day.