Simulator

  • simulating "in head" vs "in computer" aka "playing computer"
  • related to Future Of Coding - "playing computer" is just silly
  • computers being able to simulate any other computers (ad infinitum) is an important computing idea that had to be invented! (Everything Was Invented)
    • taking a step back, Alan Kay keeps talking about computers as a meta-medium - one that can simulate any other one, and also one that allows us to create simulations to understand the world
  • references:

computation as simulation

Metaphor in User Interface Design

One of the realizations we had about computers in the 60s was that they give rise to new and more powerful forms of arguments about many important issues via dynamic simulations. That is, instead of making the fairly dry claims that can be stated in prose and mathematical equations, the computer could carry out the implications of the claims to provide a better sense of whether the claims constituted a worthwhile model of reality. And, if the general literacy of the future could include the writing of these new kinds of claims and not just the consumption (reading) of them, then we would have something like the next 50 year invention after the printing press that could very likely change human thought for the better.

— The Real Computer Revolution Hasn't Happened Yet - Alan Kay

  • it's interesting to look at "simulator" problems from the point of view of VPLs - visualizing program state/execution is more useful than visualizing the AST - this, again, ties into Solving Things Visually

    What kind of a thinker would you become if you grew up with an active simulator connected, not just to one point of view, but to all the points of view (...) so they could be dynamically tried out and compared?

    — User Interface, a Personal View - Alan Kay

Programming with live, embodied objects. There's a distinctive difference in how it feels to program a system where everything is represented by a visible, embodied, and responsive representations instead of one where you refer to things by abstract names, and imagine what will happen when the program runs (by playing Simulator in your head). Importantly, this is not what most of "Visual Programming" (that I know of) tries to solve these projects are usually about visualizing the structure of the program which is not as useful as Visualizing the Domain of the Problem.

the author sees and manipulates indirect symbolic representations, and must imagine how they give rise to dynamic behavior

  • this could be improved by (Future Of Coding):
    • seeing the dynamic behaviour that is being created (Simulator)
    • exploring multiple representations of that behaviour (Ladder of Abstraction)
    • directly manipulating representations and data
  • computational (can simulate, calculate, etc...)
  • another take at this is programming as a profession vs programming as a tool for understanding dynamic systems (Simulators, Understanding Through Building), with this lens:
    • again, not everyone has to be a professional software engineer, but:
    • there are people who would benefit from being able to build dynamic systems to learn, understand, and act on them - programming here is a dynamic-modeling tool
  • if I live-code a generative system, and see only the final result, I still have to play computer in my head (Simulator) - it's only that I have live-feedback from my actions - which is great, but for more complex things I want more visibility into sub-parts of the system
    • which begs the question of how to get that visibility? - some ideas:
  • on the other hand, interactions can be interesting when playing with Simulations, trying to understand the parameter spaces, and get a feel for how things work
  • creating systems should be done in a Simulator
  • more ideas of "self-exploratorium" in Simulator