Résumé
(As of September 2011.)
Objective
To put to good use my skills in systems programming and programming language theory & implementation; to learn and improve my abilities; to work on a project involving new ideas with potential real-world impact.
Education
- BS in Computer Science
Carnegie Mellon University, Pittsburgh, PA
2008-2012
Current QPA: 3.74 (out of 4)
Work experience
-
RethinkDB, Summer 2011
Software Engineering Intern- Finished solo project improving buffer cache performance.
- Wrote and debugged high-performance, high-concurrency C++ code.
-
Carnegie Mellon University, Spring & Fall 2011
Teaching Assistant for 15-150 "Functional Programming"- TA during the course's first-ever semester.
- Implemented course infrastructure, including autograder and parallel sequence library.
-
Google, Summer 2010
Software Engineer in Test Intern
Tool skills
Fluent in C, C++, Python, Java, Haskell, Scheme, SML; capable with x86(-64) assembly, OCaml, Common Lisp, and Clojure; passing familiar with many other languages, and eager to learn more.
Experienced with the Unix environment and its tools (bash, make, sed, man, etc).
Experienced with the version control systems git, mercurial, subversion, and darcs.
Relevant course work
-
15-410: Operating System Design & Implementation (A)
Designed & implemented various system-level projects, most notably a threading library and a multitasking, preemptible kernel.
-
15-411: Compiler Design & Implementation (B)
Worked with a partner to design & implement a compiler, written in Haskell, for a safe C-like language, targeting both x86-64 assembly and LLVM.
-
15-354: Computational Discrete Mathematics (A)
Discrete mathematics and its applications, abstract and concrete; the practical use of computers in investigating and solving discrete math problems.
-
15-417: Higher-order Typed Compilers (ongoing)
Will write a multi-stage type-directed compiler and runtime for a high-level strongly-typed functional source language (subset of SML), targeting C.
Knowledge & expertise
This is essentially bragging, so take it as you wish, but it does tell you what I think I'm qualified for.
Systems programming, down to the operating system implementation level. I am used to checking & propagating error conditions, validating untrusted data, avoiding memory leaks, minimizing memory allocation, optimizing for spatial locality. Debugging is to be embraced, not feared.
assert()is my friend.Concurrency: I can deal with nondeterministic concurrency without going insane. I know how to avoid race conditions, and I can debug them when I'm wrong. I can not only use but implement: message-passing (synchronous or asynchronous), futures, fork/join, and plain old mutexes & condition variables.
Language implementation: parsing, compilation, garbage collection, type checking & inference. I know a little about optimization, and am eager to learn more. I haven't implemented a JIT yet, but it's on my to-do list.
Common sense: Algorithmic improvements beat hand-optimization. Code should be as simple as possible but no simpler. Document your assumptions and check them. Don't commit untested code. Factor out repeated patterns. Insert platitude here.
Learning. I work hardest on the things that interest me, and learning new things interests me immensely. Hence, I learn fast.
I'm not a "code cowboy". I document my code and I play well with others.
As you may have noticed, I'm not particularly modest. This may be a good or a bad thing.