Privacy-Respecting Type Error Telemetry at Scale

Thesis: Programming languages would benefit hugely from telemetry. It would be extremely useful to know what people write, how they edit, what problems they encounter, etc. Problem: Observing programmers is very problematic. For students, it may cause anxiety and thereby hurt their learning (and grades). For professionals too it may cause anxiety, but it can also leak trade secrets.

Read more…

Profiling Programming Language Learning

Programmers profile programs. They use profiling when they suspect a program is not being as effective (performant) as they would like. Profiling helps them track down what is working well and what needs more work, and how best to use their time to make the program more effective.

Read more…

The Examplar Project: A Summary

For the past several years, we have worked on a project called Examplar. This article summarizes the goals and methods of the project and provides pointers to more detailed articles describing it.

Read more…

A Core Calculus for Documents

Document languages like Markdown, LaTeX, PHP, and Liquid are widely used to generate digital documents like PDFs and web pages. Document languages often come with programming features like variables and macros to help authors write complex documents. However, these document programming features are often designed or implemented in problematic ways, especially by the standards of a modern programming language. For example:

  • LaTeX’s macro system is not hygienic, which can cause macro arguments to conflict with a macro body.
  • PHP’s templating system relies on mutating a global output buffer, which means document fragments are not first-class values.
  • Liquid’s variable system provides a small and fixed set of data types, which limits the expressiveness of computations.
Read more…

Observations on the Design of Program Planning Notations for Students

In two recent projects we’ve tried to make progress on the long-dormant topic of teaching students how to plan programs. Concretely, we chose higher-order functions as our driving metaphor to address the problem of “What language shall we use to express plans?” We showed that this was a good medium for students. We also built some quite nice tool support atop Snap!. Finally, we were making progress on this long open issue!

Read more…