Exploratory programming in computational notebooks A computational notebook is a programming environment in which a document is a sequence of code cells mixed with documentation cells and output cells explaining and visualising the effects of executed code. As such, notebooks support literate programming and make it possible to render graphs, tables and other figures computed from data. All of this is done incrementally by submitting small code fragments and receiving immediate feedback. Moreover, notebook documents can be shared with colleagues as part of collaborative efforts or to publicise findings. This combination on features makes notebooks popular among data scientists, educators, domain experts and other programmers whom are not necessarily experts in software engineering. This particular user group, in line with the purposes for which notebooks are typically used, benefits from 'exploratory programming', a style of programming in which the goal is not specified beforehand, as is common in software engineering projects, but is rather discovered through experimentation. The interactive nature of notebooks suggests they are suitable for this style of programming. However, notebooks are actually rather limited from this perspective. For example, notebooks tend not to be reproducible if the user executes cells out of order as part of their exploration. Moreover, it is hard to undo changes without losing track of the state of the program or without re-executing all code cells from scratch. To goal of this project is to experiment with subtle changes to the existing notebook interfaces to better support exploratory programming whilst retaining the essential features of notebooks that make them so popular. Questions to be answered by this project are: what are the essential, desirable features of existing computational notebooks? What are the limitations users experience from the perspective of exploratory programming? What features can be added (or removed/modified) to existing notebooks to address these limitations, whilst retaining the desirable features? How can these features be made accessible to users in existing interfaces, without significantly complicating these interfaces or other negative effects on user experience? These questions can be answered through a study of existing literature in the fields of human-computer interaction and end-user programming, by developing prototypes of alternative notebooks and by performing user studies with the prototypes and/or existing notebooks. Depending on your background and interests, the project could lean more towards design or towards implementation. Possible evaluation strategies include user studies, requirements analysis, or other design-minded approaches. In this project you will be able to directly contribute to an active line of research. This project is at the forefront of research on the intersection of human-computer interaction and software languages and has the potential to impact large communities of software developers (e.g. data scientists and computer science educators).