<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Conversation Starter: Imagining Autotelic IDEs</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Kate Compton Department of Computer Science Northwestern University</institution>
        </aff>
      </contrib-group>
      <abstract>
        <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 autotelic1 experiences? Can we imagine systems that extend or subvert traditional IDE abilities, creating IDEs that are playfully over-responsive, mysterious, generative, or improvisational? 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: • What does is mean to make a non-productive IDE? • What goals could an IDE have outside of productivity?</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>• What are the common features of an IDE that support
productivity goals?
• How can a non-productive/autotelic framing let us
imagine warping those tools in ways that were unthinkable in
a productivity-focused framing?</p>
    </sec>
    <sec id="sec-2">
      <title>What do we expect from an IDE?</title>
      <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>Copyright © 2021for this paper by its authors. Use permitted under
Creative Commons License Attribution 4.0 International (CC BY
4.0).</p>
      <p>1from the Greek “for its own purpose”</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
[Hutchins, Hollan, and Norman1985] 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’ [Compton2019]. 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>
    </sec>
    <sec id="sec-3">
      <title>Speeding up the turtle</title>
      <p>LOGO [Papert2020] 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 Tidal2 for generative audiovisual
experiences, Sonic PI3 for music and Shader.place4 for
WebGL 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>
    </sec>
    <sec id="sec-4">
      <title>IDEs with agency</title>
      <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:
• detecting the syntax of parts of the code and coloring or
formatting it (syntax highlighting, auto-indentation)
• alerting the user to malformed, nonstandard code (linting)
• tracking how identifiers or variable names are used across
code to create clickable links, indexes of identifiers, or
one-click renaming UIs
• identifying possible identifiers that could fit in the current
context (code completion)
There are systems where an advanced AI autocompletes
user’s code while the users is writing code in a
productivityfocused environment5, and systems where an advanced AI
generates emergent new code that the user can inspect in
an autotelic tool[Kreminski et al.2020]. 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>
    </sec>
    <sec id="sec-5">
      <title>IDEs with mystery</title>
      <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.IO6 and CodeCombat7. 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’ [Gwern2020] 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>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [Compton2019]
          <string-name>
            <surname>Compton</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <year>2019</year>
          .
          <article-title>Casual creators: Defining a genre of autotelic creativity support systems</article-title>
          . University of California, Santa Cruz.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [Gwern2020]
          <string-name>
            <surname>Gwern</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <year>2020</year>
          .
          <article-title>Gpt-3 creative fiction</article-title>
          , https://www.gwern.net/gpt-3prompts
          <article-title>-as-programming.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [Hutchins, Hollan, and Norman1985]
          <string-name>
            <surname>Hutchins</surname>
            ,
            <given-names>E. L.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Hollan</surname>
            ,
            <given-names>J. D.</given-names>
          </string-name>
          ; and
          <string-name>
            <surname>Norman</surname>
            ,
            <given-names>D. A.</given-names>
          </string-name>
          <year>1985</year>
          .
          <article-title>Direct manipulation interfaces</article-title>
          .
          <source>Human-computer interaction 1</source>
          (
          <issue>4</issue>
          ):
          <fpage>311</fpage>
          -
          <lpage>338</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [Kreminski et al.2020] Kreminski,
          <string-name>
            <given-names>M.</given-names>
            ;
            <surname>Dickinson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ;
            <surname>Osborn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ;
            <surname>Summerville</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ;
            <surname>Mateas</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          ; and WardripFruin,
          <string-name>
            <surname>N.</surname>
          </string-name>
          <year>2020</year>
          .
          <article-title>Germinate: A mixed-initiative casual creator for rhetorical games</article-title>
          .
          <source>In Proceedings of the AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment</source>
          , volume
          <volume>16</volume>
          ,
          <fpage>102</fpage>
          -
          <lpage>108</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [Papert2020]
          <string-name>
            <surname>Papert</surname>
            ,
            <given-names>S. A.</given-names>
          </string-name>
          <year>2020</year>
          .
          <article-title>Mindstorms: Children, computers, and powerful ideas</article-title>
          .
          <source>Basic books.</source>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [Reas and Fry2006]
          <string-name>
            <surname>Reas</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Fry</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <year>2006</year>
          .
          <article-title>Processing: programming for the media arts</article-title>
          .
          <source>Ai &amp; Society</source>
          <volume>20</volume>
          (
          <issue>4</issue>
          ):
          <fpage>526</fpage>
          -
          <lpage>538</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>