Lex Spoon

picture of Lex Spoon

I'm Lex Spoon.

I work at Semmle, where we provide a sort of FitBit for software developers. Just like FitBit can analyze your running in an unobtrusive way, just by sitting on your wrist while you run, our software analyzes data from the tools used by software developers: version control, code review, issue trackers, and others. From that data, we can derive and aggregate many stats about what people are actively doing. As one example among many, if your organization is trying to roll out a new coding standard to all of its offices, Semmle can determine which of your offices are adopting those standards and at what rate, with far higher fidelity than if you have to rely on informal reports from the management chain.

I play folk music whenever I can, with the Briar Vista Social Club and the Atlanta Open Band among others.

If you are in or visiting Atlanta, drop by a contra dance some time at the Chattahoochee Country Dancers. Beginners are welcome, and it's a great way to hear some music and get the blood pumping. Alternatively, if you prefer a more sedate form of leisure, stop by for a drink and a game at Camelli's Pizza.

For comments and discussion of all manner of topics, bookmark my blog, or circle me on Google+.


I've been working on every kind of computer and computer software I could get my hands on since a memorable Christmas day in 1981. They're incredibly fun, and the fact that you can make a career out of working with them is one of the most fortunate things in my life next to meeting Fay Salvaras. Here's a sporadic sampling of a few things I've worked on.

Programming in Scala

Programming in Scala is a book I coauthored that teaches Scala while covering a broad range of programming topics. Its 35 chapters can be read in a flexible order, and each one provides a deep dive on some topic that any programmer would benefit from learning. To help the reader learn, we provide regression-tested sample code in every chapter that can be typed in and experimented with. We also make an effort to discuss the background of every programming technique and language construct, including comparisons to the many languages Scala draws from in its design. If teaching a semester-long class is a 5k, this labor of love of a book is more of a marathon.

Read more on the Programming in Scala web site...

Code splitting in GWT

Google's developers are always working on initial page load delays, and a major source of load time is from downloading and parsing the JavaScript code that provides the page's interactivity. To address the problem, I developed tools, development methodologies, and documentation for splitting the JavaScript of a web application into a number of independent downloads that are fetched on demand and then cached.

Read more about code splitting...


When I worked at LogicBlox, a long-running pain point was the response times of the company web applications. Many UI interactions would require a round trip through the company data analysis engine, a heavy component that was excellent for big-data computations, but weak on response times to small queries. To address the pain point, I developed a compiler from the company programming language to JavaScript, along with supporting tools, documentation, support, and training.

Read more about Mochablox...

DDP: Demand-driven analysis with goal pruning

Whole-program data flow tends to be too expensive to compute on the fly in an IDE. To provide best-effort approximate information, I worked on an approach that can be summed up as "DDP". It combines demand-driven analysis (the "DD" part) with subgoal pruning (the "P" part).

Read more about DDP...


The Google Web Toolkit primarily supports Java, but it is also useful for Scala. I assisted the Scala+GWT team in combining the Scala compiler's front end with the GWT back end, including all GWT features such as code splitting and multi-permutation compilation.

Read more on the Scala+GWT home page...

Package distribution

There are several super-large software repositories in the world that include contributions from hundreds of organizations and many thousands of developers. Examples are Ubuntu for Linux packages, and Maven Central for Java packages. Key problems with these repositories are to assist in downloading mutually compatible combinations of artifacts from them, and to encourage development styles where obsolete versions of packages are phased out over time in favor of the current versions.

Read more about package distribution...


Mark Guzdial's lab was one of the early adopters and promoters of the wiki. While I studied with Mark, I developed a graphical wiki called MuSwiki, and I explored its use in a classroom setting.

Read more about MuSwiki...

Steiner tree extraction

While a student in Roy Pargas' lab, I implemented a parallel algorithm for Steiner tree extraction that ran on the university computer clusters.

Read more about Steiner tree extraction...

Academic Publications

I spent more than a decade studying computer science in various universities and research labs. I learned from some of the best, including Alan Kay, Dan Ingalls, Martin Odersky, Vijay Saraswat, Olin Shivers, Mark S. Miller, Scott Wallace, Ted Kaehler, and too many more to really list them all out. The results of some of that work led to peer-reviewed publication, and I list them in the below link for people who take part in that culture. I remember, though, feeling like the publication process was a distraction. It felt more fruitful to simply seek out good people and spend a summer with them.

Read my publication list...


Some archived blog pages are here and here. A few notes about running Linux are here.

Lex Spoon