Bc. thesis, Master thesis or Research project

Programs are created not just by writing code, but by interacting with rich stateful programming systems or developer environments. Programming systems still include code, but they also encompass live interactive previews, structure editors, runtime environment and other developer tools. Thinking about programming systems, rather than just languages, can give us new ideas about making programming easier, trustworthy and accessible.

The ideas below are open-ended. They can be used as a starting point for designing a novel programming system. For a project or thesis, we could focus on one or two of those, build a prototype for a suitable application domain and evaluate the result in an appropriate way, e.g. by formailizing the design or developing substantial case study.

If you are interested, please get in touch to discuss the details!

  • Accessible, understandable programming systems - What would it take to create programs that can explain how a certain result was produced? The idea of this project is to represent programs and program execution in a more transparent way, so that it can be analyzed by tools in the programming environment. If we store trace of how the program runs, we can then analyze this trace to explain why the program resulted in a specific result. This can be used to build explainable data visualizations, trustworthy software systems and more. See Fluid, Linked visualizations and Subtext below.

  • Novel low-code/no-code programming tools - How can we make programming easier and allow non-programmers to solve programming problems? This can be approached from multiple directions. You could use “programming by demonstration” (where programs are created by interacting with concrete sample data and then generalized), “programming by example” (where programs are synthetized from pairs of input/output values), or design new graphical notations for programming (to express program logic in diagrams that are closer to the problem domain). See Histogram and Darklang below.

  • Formal models of interactive programming systems - Programming language theory, type systems and semantics are all created around programming languages - they see programs as formal entities written in some textual language with grammar. But many interesting aspects of programming happen in stateful interactive programming system (think modern IDEs with REPLs and debuggers, Notebook systems for data science or older systems like Smalltalk). Formally modelling such interactive systems is an interesting (a bit more) theoretical problem that can be a good fit for a more academically inclined student.