Portfolio | Nathan M. Swan

I am a software developer currently working full-time at Google in Mountain View, CA.

If you want, you can look at my resume or contact me at nathan@nathanmswan.com.

Work Experience


I was an intern at Google for the summer of 2018, and the summer after that I graduated college and joined Google full time. To get an idea of what I'm now working on, click here.

St. Olaf

During the summer of 2017, I worked as a software developer for Suuji, a St. Olaf CURI project performing research into math education. As part of the applications team, I built and modified various apps and games intended to supplement an elementary math curriculum.


Match3 is a three-in-a-row tile game which attempts to build students' associations between numerals and lengths. I wrote most of the game logic and implemented a bare-bones animation and physics engine. The game was written for the Web (HTML/CSS/JavaScript).


Fex is a drawing game that introduces students to the concept of functions. Though I wrote some of it myself, a lot of my work involved assisting another developer. Fex was also a Web game (HTML/CSS/JavaScript).

Class Project

Though most Computer Science assignments are minor, I have occasionally been assigned a large project.


muninn is a memory-diagram editor I built with a team for our Software Design class. It provides an easy way to draw representations of how the stack and heap change in the run of a C++ program. It saves to a readable text file format and exports to HTML. It is written in C++ and uses the Qt user-interface library.

Personal Projects

Much of my experience comes from the various projects I've worked on outside of work and school.


antimander is a suite of tools which quickly partitions states' U.S. Census blocks into districts of approximately equal populations, prototyping a possible algorithmic solution to the redistricting process for the House of Representatives and state legislatures. Most of the software is written in C++, with some helper files written in Python.


Tasker is a cross-platform Java Swing desktop application which provides a simple means of prioritizing single and weekly tasks of varying importance and urgency.


wms is a simulator of an invented discrete-time particle physics. The interface is a website written in HTML and JavaScript, while the server with the actual physics code is written in D.


AutoCast is a desktop application which helps writers and actors of dialogues by reading aloud scripts, using different text-to-speech voices for different characters. It is written in Objective-C for macOS.


embd is a simple library for embedding D code into text, in a manner similar to PHP or Embedded Ruby. Though it can be used in a broad range of contexts, it is primarily designed for HTML and the vibe.d web server platform.

Open Source Contributions

I have made an assortment of contributions to open-source projects, from simple bug fixes to the implementation of useful new features.

Pull Request Name Description Language
kiith-sa/D-YAML/pull/11 Add 'in' operator for mappings I added an operator normally used for D's built-in associative arrays to mappings for this YAML library. D
rejectedsoftware/vibe.d/pull/274 Allow for RFC 2616 chunk extensions I fixed a bug in vibe.d's HTTP client which treated chunk extensions as errors. D
rejectedsoftware/vibe.d/pull/264 fix the buggy function parseRFC822DateTimeString I fixed a date-time parser that was not working properly. D
dlang/dub/pull/28 add sourcePaths field to package.json I added a configuration option to dub, which is now the official D package manager. D
dlang/dmd/pull/1178 Added no-main detection I modified dmd, the D compiler, to read the linker's error messages and issue a clarifying message for when there is no main() function. C++
dlang/dmd/pull/651 Comments in response file I added the ability to put comments in dmd response files, i.e. files which contain command line arguments. C++