I am very enthusiastic about programming language and runtime platform design. As such, most of my work has revolved around language compilation and virtual machines. In my day-to-day work, I prefer to use C# or C depending on the task, but I also have a high level of expertise with C++, D, Elixir, Erlang, F#, Python, TypeScript, and even plain assembly. Beyond these, I have briefly used a vast array of programming, scripting, orchestration, query, and markup languages that is far too long to list here.

I have many years of experience working on cross-platform projects targeting Windows, Linux, and macOS at various levels of abstraction. I have also worked with Android and iOS at the native code level. I am, for better or worse, intimately familiar with many of the nasty quirks and pitfalls of each operating system.

I have also worked with most of the major processor architectures in use today – x86, ARM, RISC-V, Power ISA, and MIPS – as well as some lesser-known ones like Epiphany. Compilation to machine code, disassembly and analysis, and processor emulation/simulation are subjects I have a great interest in.

When necessary, I have reverse engineered both native and managed applications and libraries for the sake of interoperability, bug fixing, security research, or just plain old curiosity. Reverse engineering proprietary network protocols is something I find particularly interesting and have done many times.

Occasional Web development has afforded me experience with some modern frameworks and tools - ASP.NET Core, Flask, Node.js, webpack, etc. My interest here is mainly in the backend. I have also done more general server-side development not tied to Web technologies. In all of these endeavors, I have gained experience with various relational database systems – MySQL, PostgreSQL, and SQLite in particular – as well as some document-oriented systems.

Build systems, continuous integration, and engineering automation are areas I have a purely pragmatic interest in. Few things annoy me as much as tedious and error-prone build processes that get in the way of doing actually interesting work. I go to great lengths to automate as many tasks as possible in my projects and ensure that weird build system bugs are not harming productivity.

As you can probably tell, I have done a bit of everything. It turns out that I am a pretty fast learner who enjoys learning new technologies and solving problems for other people.


I have worked for the following companies and organizations:

  • Microsoft (2016-2019): Senior runtime engineer working on the Mono virtual machine and related tooling
  • Xamarin (2013-2016): Runtime engineer working on the Mono virtual machine and the Xamarin.Android, Xamarin.iOS, and Xamarin.Mac products
  • Mono Project (2012-2012): Google Summer of Code mentor overseeing a student's continued work on the CIL assembler and disassembler tools
  • Xamarin (2011-2012): Intern working on the internal build system for Xamarin.Android and Xamarin.iOS documentation
  • Mono Project (2011-2011): Google Summer of Code student working on C# implementations of the CIL assembler and disassembler tools


I have created several open source programs and projects, some of them more complete than others:

I have contributed substantially to many others: