Skip to content

Welcome

I started this site in September 2023 as a way to organize and easily reference my notes while learning how to code. The content remains a work in progress, shaped mostly by whatever time and energy I can spare on nights and weekends.

Since this is a hobby project, my primary focus is on the subject matter itself rather than polished presentation. I’m mostly here to have fun coding. As the sole author, working without editorial oversight or expert review, I’m well aware that there are probably mistakes throughout the material. While producing perfect documentation isn’t my goal, I don’t think any of us sets out to be wrong. If you spot something that needs correction, I encourage you to reach out and help me get it right.

The following list of projects represents topics I’ve found especially engaging and have spent the most time developing:


About

I started programming by auditing an introductory programming course in college. Unfortunately for me it never really clicked. I felt that I would never grasp pointer arithmetic, and I couldn’t tell you the difference between a pointer and an address, much less the significance of their differences. Over the years, I stumbled through hobbies, teaching myself enough C to fry an Arduino or two and enough Python to automate some personal bookkeeping tasks, but the code was always hacky, appropriated from code snippets I found online. I wasn’t sure what most of the code actually did. I always had other priorities and my code worked well enough through some trial-and-error. Now, well into middle age I’ve finally realized that if its worth doing, its worth doing thoroughly. It’s time to slow down and take a more structured approach, and this site represents my journey.

When I started back up again I set an initial project goal to learn how to build a simple web API on top of a CRUD app. I chose Java because of its reputation as a solid general-purpose language with a wealth of associated resources due to its age and popularity. Most of the back-end services where I worked were written in Java, so I figured having real-world examples could only help. Perhaps going into lower level nitty-gritty details before showcasing any real-world applications is what turned me off of C all those years ago. Maybe this time I’d have better luck.

I bought a pile of textbooks and got started. Initially I used tooling I was already familiar with to keep my cognitive overhead to a minimum. I’m a technical writer by profession, and I love learning and curating information, so naturally I decided to present my notes as a series of instructional documents. The project started as a mix of Markdown and rich-text (InDesign) notes. I managed source-code structures manually through my operating system’s UI. The project quickly became unmanageable. Not only were my artifacts tedious to maintain, but searching and referencing material quickly became difficult! What good is a library if you have to stumble through a broken card catalog each time you want to access the information? I decided to take a detour to build this website so I could keep the documents organized and accessible. I also needed to learn Git to manage everything.

Java was a fantastic introduction, but the deeper I dug the more curious (and confused) I got about how things actually work. Things like System.out.println appeared to be magic and the Java textbooks I had skipped over these kinds of details. I started chasing down concepts and realized that many of the answers were illustrated in either some flavor of assembly or C. Ruling out anything more than cursory briefs in physics, common instruction sets, and assembly languages, I decided to switch to C. Surely this was an appropriately high-level compromise. Somewhere around the time I was trying to figure out the difference between Make and CMake, attempting to read core dumps in GDB to debug my segmentation faults, and what felt like endless hours of online forum crawling I picked up the Rust book. I plowed through the first two chapters in a weekend and was almost immediately hooked. The rustc compiler, its borrow checker, the clippy linter, and all the fantastic error messaging felt so helpful in the absence of structured curricula and formal tutelage.

I progressed through The Book slowly, chasing down context and details at my own pace as curiosity inspired. This took several months, but by the end, I had a working multi-threaded server built from scratch in Rust. The only problem was that I still didn’t actually know how to solve problems with code in any language. Following several college program outlines I decided that my next major project would be data structures and algorithms. Rust is a new enough language that robust academic resources are thin. No matter, I kept getting told that the language doesn’t matter, but rather it’s the underlying concepts and when to employ them that are most important. Having some experience with Java I picked up a pile of DSA books in Java with the intent of launching a two-pronged attack; I’d spin up parallel repositories in Java and Rust to cover, and then translate, the material. This didn’t last long as I quickly realized I was thinking about the concepts in Rust despite reading Java code. I made my first commit in August of 2024 and by September I made the decision to focus on Rust exclusively, translating the Java examples as I went along. This is a decision that I have regretted at times, wishing I would have stuck with Java, or perhaps even C. As you may already know, Rust doesn’t really work like Java. I found myself totally stuck at times on patterns that I simply couldn’t translate directly and without any immediately or easily available examples. Ultimately, because this is a hobby project that I can pick up and put down at my own pace, I have come to view my approach as a blessing in disguise. Chasing down the concepts and translating them across languages has forced me dig deeper into things I thought I understood. I have also managed to (begin to) prove to myself that I was capable of tackling this kind of material all along. It’s finally starting to click.

As my language, conceptual knowledge, and problem solving skills grow, maybe I’ll start doing things like blog posts about web sockets that nobody wants to read. Maybe I’ll build an e2e-encrypted chat app or try to implement a hobby SQL-enabled home-cooked database as a learning exercise. Maybe I’ll just build a web server to blast out (de)motivational quotes and bicycle-related propaganda. Who knows? Who cares? I’m just out here to have fun with totally normal hobbies for a middle-aged guy who definitely has friends.