1136 S. Delano Ct. W. / Apt. 626W
Chicago, IL / 60605
919 636.4204 / <[email protected]>
Hi! I'm Elliott, a computer-scientist, open-source software developer, and maker of Things. I've a decade's experience with computers and software-development, I'm really passionate about writing readable and maintainable code1, and I'd really like to join a diverse team doing great things for the world. If that's you and yours, please, read on!
I'm currently particularly interested in programming-language theory and design, tooling, APIs, and overall ‘developer-experience’-related projects. In terms of toolkit, I've spent most of the past few works working primarily in (and occasionally working on) the Node.js server-side JavaScript platform; similarly, JavaScript, Ruby, or something like Haskell or a Lisp are the languages I'm most interested in working in on a daily basis. If your project involves some of these tools, I'm your guy.
Note: I've worked in a wide array of environments and with an immense set of platforms and tools; I value your time, and try to prune this section to a particular position before sending it along; but please feel free to ask for details on any of the specifics that I gloss over.
(Also in the interest of brevity, I've removed any comprehensive ‘portfolio’ of my projects, in favour of footnoting each item with links to specific examples from my open-source works.)
-
Designed (and partially implemented) several experimental programming languages over the years, including my opus magnum, Paws.
(Few people write better code than those of us who've dedicated ourselves to studying the science of helping others write better code.)
-
Developed many small open-source libraries and developer-tools to ease the lives of myself and the others I work with. 1, 2, 3, 4, 5, 6
(Software development, after all, is largely the practice of making software development easier. ;)
-
Evaluated deficiencies in countless complex works of software, to provide detailed reports of bugs or, in many cases, submit patches / pull-requests to the developers thereof. 7, 8, 9, 10
(I'm a deep believer in FOSS. I've everything from commit-bit on
WebKit/WebKit
, to patches in Node.js and git mainlines.)*
During such projects, I've had the privilege of working with (amongst aforementioned wide variety of other tools and systems) ...
JavaScript : An oft-maligned language, I find JavaScript beautiful despite its flaws (or in a few cases, because of them.) I've written plenty of both front-end (DOM- oriented) and back-end (server-side) JavaScript, as well as quite a bit of what's been (unfortunately) dubbed ‘isometric’ JS. I've further been involved in the Node.js community since mid-2009, and participated in important discussions shaping the direction of the project.
I'm intimately familiar with JavaScript in particular, as studying the ECMAScript specification and execution-model were seminal elements of my language-design studies. I'm up-to-date with the latest best-practices, familiar with the advances in the language with ECMAScript 6 (ES2015), and efficient with all the tooling necessary to work productively in the current JavaScript atmosphere. (Build-and composition-tooling, transpilation, and feature-detection on the client-side; npm and modularization on the server- side.) 11, 12, 13, 14, 15, 16, 17, 18
Ruby
: My first real programming language (besides some dabbling in PHP), and one
that's still near-and- dear to my heart; I learned Ruby thoroughly as my
introduction to serious software development. Ruby is where I learned
advanced programming techniques like metaprogramming, and then where I un-
learned some of those as I was educated on such best-practices as
encapsulation. (Yes, I've read parse.y
. Yes, bats flew out when I opened
it.)
19, 20, 21, 22, 23, 24, 25, 26, 27
ISO C / C99 : Exploring Ruby (and desiring to learn programming-language development) led me into a thorough study of writing in C, most especially of understanding the machine architecture underlaying all of our software. I've here practiced debugging of complex low-level software issues, management of limited resources through algorithmic optimization, as well as optimization of code itself for readability in such a low-level, strict language. 28, 29, 30, 31, 32, 33, 34
Test-Driven Development : In Ruby, I picked up (and have since maintained) a deep dedication to thorough software testing. I don't believe a piece of software is truly written, until it's been verified (either through a dyanmic testing framework, or through strong compile-time guarantees.) Software is complicated, and a team cannot know what they've actually built until they've tested it.
Whenever practical, I write test-first, implementation-second. I'm exacting about my tests (and documentation, for that matter) staying up-to-date with the codebase they apply to; I find that any code is only as high-quality as the supporting framework surrounding it. 35, 36, 37, 38, 39, 40
Let's play buzzword soup: In addition to the above, I've worked in C++, Objective-C and Cocoa; Lisp, Lua, and a bit of Haskell and Io; have an almost encyclopediac knowledge of git, complex regular-expressions, and shell-scripting; have worked with various relational databases as well as NoSQL ones like Redis and Mongo.
More importantly (at least in my opinion,) than all of the above, I recognize that software is about people. Code is written to be read, not to be executed; and I've learned the hard way that maintainability trumps brevity (or performance) almost every time. I know how to ‘play nice’ on a team, following before leading, and focusing on collaboration over bike-shedding and opinions.
Although no professional sysadmin, I've deployed and maintained my share of small applications on the side, as well as created and contributed to open-source software written to be deployed. I've used ArchLinux, CentOS, and the new CoreOS; I'm familiar with Docker and Vagrant workflows and am up-to- date on containerization / dev-production parity best-practices. I've deployed to Amazon EC2, Nodejitsu, and Heroku, as well as my own managed servers.
If relevant to the position, I've also moonlighted as a front-end developer; I know a fair bit about HTML5 / XML / SVG, CSS, plain DOM algorithms as well as jQuery tooling, working the usual CSS-preprocessors (LESS / SASS, Myth, etceteras.), and the basics of quality typography and interface-design.
I have neither held a salaried position as a software-developer, nor completed a Bachelor's program in computer-science. Having focused fiercely on open-source software for nearly a decade, I'm confident that my skills meet (or excede.) the standards set by those examples. (=
Secondary & post-secondary history:
- University of Alaska at Anchorage, Spring 2007 — Spring 2009
- Montana State University, Fall 2006
- Grace Christian High School, Fall 2001 — Spring 2006
Honors & activities:
- Eagle Scout, BSA, Fall 2007
“The hardest thing is to go to sleep at night, when there are so many urgent things needing to be done. A huge gap exists between what we know is possible with today's machines and what we have so far been able to finish.” — Donald Knuth
Footnotes
-
I know some people who say they're ‘passionate’ about a subject may be embellishing, ever-so-slightly. I'm not: I've literally dedicated years of my life to studying the most efficient and clear ways to communicate through source-code; and anyone who's met me is likely to mention that it's a topic I obsess over. ↩