<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Starter: Imagining Autotelic IDEs</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Kate</forename><surname>Compton</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Northwestern University</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Starter: Imagining Autotelic IDEs</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">1816B7F1E528099058FCB7CB48DDA6DA</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T19:32+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>We know what to expect from an IDE, right? We will type some code, the code will be executed, we will observe the output, and iterate as many times as needed. The IDE will assist us in that goal with reliable syntax highlighting, code completion, and debugging tools, in order to be the most demure and unobtrusive possible partner in our work. That's exactly what we want when we want to get work done, but are there IDEs that are themselves autotelic 1 experiences? Can we imagine systems that extend or subvert traditional IDE abilities, creating IDEs that are playfully over-responsive, mysterious, generative, or improvisational?</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>We have many IDEs that are great for performing useful work and writing good, reliable, productive code. What happens if we let an IDE break free from productivity? Can we consider an IDE as an autotelic experience in itself, rather than as a means to create useful code? This paper is a provocation to the community to consider not only IDEs for entertainment, but IDEs as entertainment:</p><p>• What does is mean to make a non-productive IDE?</p><p>• What goals could an IDE have outside of productivity?</p><p>• What are the common features of an IDE that support productivity goals?</p><p>• How can a non-productive/autotelic framing let us imagine warping those tools in ways that were unthinkable in a productivity-focused framing?</p><p>What do we expect from an IDE?</p><p>An IDE (integrated development environment) is a bundle of utilities that are useful for programming. Usually at a bare minimum, there is a place to write and edit code, and a way to run the code and view its output. They may have additional features to specify how a program is compiled or executed, and features that can help organize and annotate the raw source code.</p><p>When compared to writing code in a non-specialized text editor and running it in a separate program (or via a command line), some IDEs can be more approachable for novice users as they provide a single entry point to start programming. A novice user can download Processing[Reas and Fry2006], type some rudimentary Java, hit the play button, and see the results of their code, without needing to understand what a compiler or executable JAR files are. Processing's interface, on starting up, contains primarily a text editor, a play and pause button, and a console output window, which gives the user a clear hint that their primary activity loop will be typing code, pressing play, and viewing the output.</p><p>Noticing that coding has an edit-execute-observe loop allows us to examine particular moments <ref type="bibr" target="#b2">[Hutchins, Hollan, and Norman1985]</ref> in the loop where there may be problems or opportunities, or even consider the whole loop cycle as a way to 'grok' the possibility space of the program, or 'grokloop' <ref type="bibr">[Compton2019]</ref>. For example, Hutchins, Hollan, and Norman identify the "gulf of execution" (the moment where you must know both what to input into your system, and how to input it) and "gulf of evaluation" (the moment you observe what the system has responded with, and must understand what that output means). The faster we go around this loop, the faster we can iterate on our programs, so many IDEs have features that shorten one or the other of these gulfs, such as code completion and syntax highlighting (gulf of execution) and error logging with line numbers and variable tracking (gulf of evaluation). REPLs (read-eval-print loop) are also available: these IDEs (often web-based IDEs) can re-run code each time the user edits the code. If we can sufficiently shorten the two gulfs and the time it takes to re-execute the code, then the core loop of the IDE can start to feel like a continuous manipulation of the code.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Speeding up the turtle</head><p>LOGO <ref type="bibr">[Papert2020]</ref> is a full programming language best remembered for drawing generative spirals with turtles. When you program in LOGO (or many of its copycats) you watch the turtle painstakingly walk through its path. Papert thought that one could more easily understand the code by "playing Turtle", either watching it move or physically walking the path yourself. But the gulf of evaluation for that paradigm is painfully slow. Nicky Case's "Joy.js" (https://ncase.me/joy/) re-imagines LOGO as a continuously running REPL, but as the user edits the code, the turtle's path redraws itself in an instant. Not content with bridging the gulf of evaluation, Joy.js also shortens the gulf of execution by replacing plaintext code with sliders for numbers. The result: a user can continuously update the program a dozen times in a second by sliding a slider and seeing the changes, which the side claims makes Joy.js "more creative, more alive" and "lets you improvize, and discover 'happy little accidents'".</p><p>Joy.js is one of many continuously-updating REPLs available, which also includes Tidal<ref type="foot" target="#foot_0">2</ref> for generative audiovisual experiences, Sonic PI<ref type="foot" target="#foot_1">3</ref> for music and Shader.place<ref type="foot" target="#foot_2">4</ref> for We-bGL shader code. All these IDEs focus on emergent generative programming. One notable feature of generativity is that the eventual pattern that will emerge from an instruction is hard to predict from the instruction itself. By shortening the grokloop, these IDEs allow the emergent pattern to change simultaneously with the code, without waiting, so that the user can playfully explore the space and enjoy the emergent patterns, or even do so as a live performance ('algorave').</p><p>In the case of Shader.place, the code is also live-synced to multiple other players in a virtual room, who can all simultaneously edit the shader together. Though the code often breaks (shader code is very fragile) the code will recompile as all the users are typing, and will continue to recompile until it runs again. Continuous execution makes the chaos of a multiperson shader-editor viable and even enjoyable, rather than frustrating.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IDEs with agency</head><p>So far we have just talked about IDEs that assist the user to edit and execute code. But many IDEs will also play an active role in annotating or even writing code themselves. Common ways that IDEs take an active role when coding include:</p><p>• detecting the syntax of parts of the code and coloring or formatting it (syntax highlighting, auto-indentation)</p><p>• alerting the user to malformed, nonstandard code (linting)</p><p>• tracking how identifiers or variable names are used across code to create clickable links, indexes of identifiers, or one-click renaming UIs</p><p>• identifying possible identifiers that could fit in the current context (code completion)</p><p>There are systems where an advanced AI autocompletes user's code while the users is writing code in a productivityfocused environment<ref type="foot" target="#foot_3">5</ref> , and systems where an advanced AI generates emergent new code that the user can inspect in an autotelic tool <ref type="bibr">[Kreminski et al.2020]</ref>. There seems to be potential for autotelic systems to generate not only code, but also annotations, formatting, links and UI features. Are there currently any systems where the IDE itself is given enough agency to be surprising, or to have a character? Can an IDE have enough agency to feel like it is improvising with the user, rather than acting as a transparent tool?</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IDEs with mystery</head><p>Finally, there is a potential to also experiment with IDEs that oppose or challenge the user. An example of this in a productive framing would be teaching IDEs that provide a set of tests that the user must write code to pass, as in the online teaching apps Check.IO 6 and CodeCombat 7 . Normally, the user of an IDE can program anything within the space of the language. These IDEs subvert that by restricting what the user can program and when, or which syntax is accessible. If we consider an IDE as a way that we feed instructions to a computer, we can consider games with antagonistic or mysterious UIs like "The Gostak" (Muckenhoupt, 2001) and "Mu Cartographer" (Millet, 2017) as playful IDEs.</p><p>As we look forward towards a future filled with more machine-learning than we might want, we can also look at interacting with machine-learned models as a form of IDE. To "program" with these models we must find a shared syntax that both model and the humans understand, referred to as 'prompt engineering' <ref type="bibr">[Gwern2020]</ref> or 'prompt hacking' 8 . This trial-and-error conversational programming often resembles an adventure game like "The Gostak" more than a traditional IDE.</p><p>In conclusion, we will still need productivity-focused IDEs with which to write games and digital entertainment. But let us imagine also a world where we make IDEs that are generative, playful, and even mysteriously alien.</p></div>			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_0">https://tidalcycles.org</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_1">https://sonic-pi.net/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_2">https://www.shader.place/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_3">https://copilot.github.com/</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Casual creators: Defining a genre of autotelic creativity support systems</title>
		<author>
			<persName><forename type="first">K</forename><surname>Compton</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2019">2019</date>
			<pubPlace>Santa Cruz</pubPlace>
		</imprint>
		<respStmt>
			<orgName>University of California</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<author>
			<persName><forename type="first">B</forename><surname>Gwern</surname></persName>
		</author>
		<ptr target="https://www.gwern.net/gpt-3prompts-as-programming" />
		<title level="m">Gpt-3 creative fiction</title>
				<imprint>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Germinate: A mixed-initiative casual creator for rhetorical games</title>
		<author>
			<persName><forename type="first">Hollan</forename><surname>Hutchins</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">L</forename><surname>Hutchins</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">D</forename><surname>Hollan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">A</forename><surname>Norman</surname></persName>
		</author>
		<author>
			<persName><surname>Kreminski</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment</title>
				<meeting>the AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment</meeting>
		<imprint>
			<date type="published" when="1985">1985. 2020. 2020</date>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="102" to="108" />
		</imprint>
	</monogr>
	<note>Direct manipulation interfaces</note>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Mindstorms: Children, computers, and powerful ideas</title>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">A</forename><surname>Papert</surname></persName>
		</author>
		<author>
			<persName><surname>Reas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Reas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Fry</surname></persName>
		</author>
		<ptr target="https://codecombat.com/8https://twitter.com/ArYoMo/status/1399801016669835268" />
	</analytic>
	<monogr>
		<title level="j">Ai &amp; Society</title>
		<imprint>
			<biblScope unit="volume">20</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page">6</biblScope>
			<date type="published" when="2006">2020. 2006</date>
		</imprint>
	</monogr>
	<note>Processing: programming for the media arts</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
