Goals
Collaborate. Solve problems. Make the world a better place.
Languages
I love how each computer language encourages different approaches to problems. Ruby is the only language I've been homesick for, and I've worked on Ruby and Rails most recently. I learned to program in C, did a couple of projects in Prolog in college (Johns Hopkins), and did my masters project in C++ in grad school (UC Berkeley). In the past, I've worked in C, Visual C++, Lisp, Java, and Python. I've dabbled in Clojure and Go.
Paradigms
Object-oriented programming is a great way to break down complex programs into smaller more maintainable parts. It combines well with Test-Driven Development and Refactoring to evolve a maintainable, flexible structure.
When I started out, Waterfall was the only way to structure projects. I was delighted to encounter Agile in all the varying ways each team implements it. It makes sense to gather information at the beginning of a project and think through some of the big design decisions, and then it makes sense to simply start to build and learn more in the process.
Test-Driven Development is also a huge step forward from long, painful QA cycles. Not only does it help with incremental development, it catches unexpected side effects and helps future engineers (including ourselves) to make changes and learn about the code. With a group of coworkers, we refined our testing strategies by working through Effective Testing with RSpec 3 by Myron Marston and Erin Dees.
Refactoring is a great way to keep code flexible, maintainable, and extensible. I led a bookgroup that worked through Refactoring by Martin Fowler.
Workplaces
I've worked at very large organizations (interning at Bell Labs in college) and very small ones (a startup where we all fit in one medium-sized room). I've been an employee, a contractor, and an employee placed as a government contractor.
I first worked remotely in 2000. I appreciate the way it allows me to set up a peaceful environment where I can work effectively, and also lets me connect with others via video chat to pair program and get to know each other. In recent years, I also appreciate the way it lets me protect my health and the health of others during a global pandemic.
Projects
I have developed a few greenfield projects in my career, but most of my work has been on sprawling, messy legacy codebases. I enjoy delving into the code to track down bugs, refactoring as I go. I enjoy gradually building up an internal model of the whole system, so that I can go directly to the source of an issue with hard-earned intuition, or add a new feature quickly and easily.
I wrote about it for Recompiler Magazine: The Art and Labor of Maintenance.
Over time, most engineers who maintain legacy systems acquire a long view, or maybe there is a personality type that tends toward maintenance work. It takes respect for a wide variety of code styles and solutions to problems, and at the same time careful attention to consistent, clear code. An eye toward incremental improvement. Willingness to do tedious repetitive work when needed, as well as stubborn, creative investigation of unsolved issues. Collaboration within and among teams. A focus on user satisfaction as the ultimate goal.
I have worked on device drivers (the thrill when the scanner moved on command!), APIs, standalone software, client/server, and SaaS web services. I am primarily a backend dev, although I have done some frontend work as well.
Most recently I worked on identity verification and major Rails codebase refactoring for high-security Login.gov, and on a greenfield prototype project integrating the Blacklight Rails engine for the Library of Congress.
See more at LinkedIn and GitHub.
Diversity in Tech
I am passionate about diversity, equity, and inclusion in tech, both for people working in tech, and for the users of the projects I work on.