David L Greenspan (he/him)
Software Engineer / Start-up Founder
Career Highlights [top]
- Programmer for 30+ years - I wrote my first computer game at age 7, in HyperCard, and quickly learned C, C++, Java, JavaScript, and many other languages after that
-
Massachusetts Institute of Technology (2002-2007) -
SB in Computer Science and Engineering, and SB in Physics.
- Co-founded BattleCode programming competition
- Developed machine vision for submarine that won international first prize
- Founder: AppJet/EtherPad, acquired by Google (2007-2010) - Founded AppJet, Inc. and created the first real-time collaborative online document editor, EtherPad, acquired by Google.
-
Engineer #1: Meteor Development Group (2012-2016) -
Worked on
Meteor
web framework
- Developed the Blaze user interface system as lead developer
- Created the logic-solver SAT library
- Senior engineering positions (2018–2022) - Early engineer at web start-ups: Coda, Slab, and IdeaFlow - General development, fundraising
Skills [top]
I have a diverse set of strengths and interests:
- Complex algorithms: designing, implementing, researching, or explaining them
- "Correct by design" code with very few bugs
- Optimizing data structures for cache/memory usage
- Graphics and image processing (2D and 3D)
- Implementing parsers, compilers, or type-checkers
- Math: linear algebra, vector calculus, etc.
- Writing: design documents, API documentation, etc.
- User interfaces, interactions, animations (and user experience and product discussions more broadly)
- Web browser APIs and browser quirks
- Learning any programming language, environment, or math as needed
- Architecture and API design
I'm happy to talk about any of the above in connection with software I've written.
I'm probably someone's dream engineer, because I actually enjoy:
- Writing documentation - including design documents
- Fixing bugs - and especially refactoring or rewriting to prevent bugs
- Making code cleaner - more organized, more modular, statically typed
Software I've Written [top]
Here are some examples of complex software I have written over the years, either by myself or as lead developer.
EtherPad (2007-2009)
I am best-known for creating EtherPad, the first in-browser real-time collaborative word processor. (Google Docs existed at the time, but it did not synchronize "as you type.") EtherPad's tech stack consisted of JavaScript, Java, Scala, and MySQL.
For EtherPad, I created, among other things:
- a fast and reliable "multiplayer" rich text editor that worked in all major browsers of the time, including Internet Explorer 6 and 7, Firefox 2, and Safari 2
- a real-time text synchronization algorithm (which we patented), using operational transforms
- a multi-threaded, performance-optimized backend
EtherPad grew out of the AppJet web framework that my co-founder and I created, and it pioneered many technologies that later became mainstream, such as server push and server-side JavaScript.
After we sold AppJet/EtherPad to Google to work on Google Wave, we open-sourced the EtherPad code, and a foundation sprang up around it. The code is still in use and has been used in other apps, such as Dropbox Paper, which traces its lineage to EtherPad by way of a start-up called HackPad.
At Meteor (2012-2016)
I was employee #1 at Meteor Development Group, another company that started out by making a web framework. MDG later pivoted to focus completely on GraphQL technology and became known as Apollo GraphQL (which, years later, is still growing and succeeding), but the Meteor web framework still exists and is in use.
While at Meteor, I was the main or solo developer on projects including:
- A reactive UI framework called Blaze
- A constraint solver used by the Meteor package system, which compiles logical statements about booleans and small integers into boolean clauses to be solved by MiniSAT, a SAT solver
I still use the constraint solver to this day, in my hobby of creating Sudoku puzzles and variants of Sudoku. I've added TypeScript types to the API, but there haven't been bugs to fix or changes needed in years. I've discovered other people online using my library for puzzle-solving, by coincidence, even though it has not been publicized besides its inclusion in Meteor.
Other
I've also written, at various times and places:
- A Java virtual machine in Java - able to simulate dozens of isolated virtual machines, as part of MIT BattleCode contest software that ran the bots submitted by contestants
- A JavaScript parser in JavaScript - and a parser combinator library
- The machine vision system for MIT's first-place-winning autonomous submarine team
- C++ code for ARM microcontrollers at the MIT Media Lab
- C++ code combining two texture synthesis algorithms from different SIGGRAPH papers (in high school!)
- As experiments, various software 3D renderers and OpenGL/WebGL/GLSL programs (e.g. ray-marching on the GPU)
Interests [top]
There are many topics and areas that I'd be interested in working on someday.
I have already been working on:
- a simpler/better alternative to TypeScript
- plans for a toolkit for customizable collaborative apps
- building blocks for better UI frameworks
Some topics that excite me in areas that I haven't worked on:
- Video effects like in-painting
- Algorithmic trading
- Deep learning, LLMs
- VR and games
Contact [top]
Feel free to reach out to me at david@newunicflufforn.com.