I studied Computer Science software at Brown University's Computer Science Department, starting around 2008 after some existential angst, graduating in 2010.
I'd say my interests are primarily in programming languages, though most of my professional experience is in the mid-level application domain, working on large projects in Python, Java, and C++.
Your neighborhood friendly Scrabble solver.
August 2010-2011. Erlang, Ruby, C. GitHub
This was my first major side project after graduating college. I wanted to write a bot for Scrabble, and I wanted to learn Erlang. I did it! Here's how it breaks down:
Finally, the data structure required was ~300MB when built with Erlang, so I designed a compact binary representation that I constructed in C. It lives here.
It's actually pretty challenging to do this! Boggle is a common interview puzzle, but Scrabble has a lot trickier constraints. The trick is to use a variation of a Trie called a GADDAG, a bizarre data structure more-or-less invented for this kind of problem in 1995. I wrote the Wikipedia page for it!
Markov-chain Twitter bots
I was miserable at Google and thought I might find love if I joined a programming language team. Issue is, I didn't actually know any Go. So I learned by writing this!
Static site generator in OCaml.
January 2018. OCaml. Github.
Baby's first OCaml project: I used to generate this site with Frog, an amazing site generator by the inimitable Greg Hendershott, but decided I wanted a few other features (like adding OpenGraph tags per-post) and/or a different templating model.
I started hacking and kept waiting for my sense to catch up to me; it never did and I finished!
August 2012. Racket. GitHub.
Did I mention I was miserable at Google? I was miserable at Google.
The daily commute had me on a Google Bus for ~4 hours every day where I couldn't work on company code: you must tunnel into their machines (no company code in your laptop), my team's project was in Java and needed a graphical environment like Eclipse, and I was competing with ~80 other Googlers to use the bus Wi-Fi. It wasn't conducive to tunneling a full X session.
Advent of Code 2016
22 languages in as many days.
I challenged myself to do Advent of Code every day in a new language. There were 25 days, I got through about 20 to completion, with half-solutions to another 3 or 4.
Chess! But with more screaming!
Summer 2017. GitHub. Python, collaboration with Karen Castelletti and Sara Drakeley.
For Burning Man 2017, we built a physical chess set that used a plexiglass board, a Raspberry Pi, a webcam, speakers, and some software to build a chess set that reacted to the game. So pieces would mourn their deaths, give soliloquys, and heckle the player.
IMDb for live performance web app (or most of it, anyways).
Summer 2015. GitHub. Erlang, Postgres.
I wanted to write a Real App that interested me, and I've always liked the idea of something like IMDb for live performance and theater. I got pretty far and modelling the data was super fun, but then I had a tough breakup, put it down, and haven't picked it up again. Learned a lot about Erlang, and using odd tech for products.
Plugins for StarCraft Streaming.
Fall 2011, GitHub. Java, ActionScript 3
Around when Twitch.tv was rebranded from Justin.tv and StarCraft streaming was starting to boom, I wanted my stream to have some features like post-game stats. The most popular streaming software at the time (XSplit) allowed for ActionScript plugins, and a StarCraft replay tool allowed for Java plugins, so I wrote two plugins (Pizza Hut and Taco Bell) which communicated over a socket to provide and display stats.
This was also a way to Get Involved in my company's product: I was working on the Flash Runtime, and felt like I wasn't engaging the customer enough since I wasn't a Flash developer, so I built this entirely with our open-source ActionScript tools.
Most of us are pretty jaded having been on Hacker News or /r/programming and seeing a million "Why I switched to X" articles. That said, a few have really shaped how I approach programming in industry.
- Don't Call Yourself A Programmer, And Other Career Advice, by Patrick McKenzie. I was pretty bright-eyed and bushy-tailed as a college graduate, and I feel that this is a pretty no-nonsense look into what coding for industry can be like.
- How many Microsoft employees does it take to change a lightbulb? by Eric Lippert. Another 'college is not industry' one, it expresses very clearly how challenging working for a BigCo can be. User communities loves telling software publishers that they're lazy for not implementing X, which should take 10 minutes, and I always link them to this article.
- Tough Times on the Road to StarCraft, Parts 1, 2, and 3. All of Patrick Wyatt's articles on game development from that time at Blizzard are pretty amazing.
- A Generation Lost in the Bazaar, by Poul-Henning Kamp. I don't care that 'Worse is Better' won the macro game, we should all still care about quality in the micro game.
- Don’t waste your time in crappy startup jobs., by Michael O. Church. The story of working in startups is multifaceted (it turned my career around), but never let anyone sell you on one with lies.