Browse files

## Learnable Programming & video games

{: toc }

### Productive morning

Really excited to be back in the swing of things! Woke up at 7am, snoozed the alarm for 20 mintes, then set up my workspace for 20 minutes (adjusting the chair and computer heights), and got into it!

This morning I reviewed Evan Miller's _Don't Kill Math_ which was fun. 

#### Shower outline of "climate change for conservatives"

This outline shows how much I've internanlized both Nicky Case's know your audience and Scott Adam's persuation techniques. In short, as someone who's been skeptical of the left's portrayal of climate science, I communicated to people like me about ways to assimilate climate science into their existing mental models.

![](/media/2017-12-14 10.17.30.jpg)

### Learnable programming

After the shower, I pushed myself to re-read Learable Programming. I was at first resistant because I've read it 2 or 3 times now, and the last time was only a few months ago. Almost immediately I realized that I definitely need to read this article again!

The things about it that surprised me this read:

1. Video games as a vector for powerful mental models. Aligns incentives well in for-profit: people pay for games. Will Wright is a boss. Need to research Minecraft. Maybe go work for Will Wright or some amazing game maker. Or team up with Nicky on a game.
2. I want to re-write Learnable Programming. I've already put down some thoughts about the re-write. It's mostly a more coherent and justifying able framing, as opposed to explaining the importance of a seemingly random assortment of virtues Bret specifies at the top of the article.

### Reading vs writing polished work

Given that I'm producing outlines for two pieces this morning, in addition to all of the other content that I've been meaning to produce in a polished way, not to mention the backlog of blog ideas I have stuck in a Trello, I am beginning to wonder how I will balance my time as a reader and writer. Right now I'm in reading mode. I think the balance of writing as a form of note-taking is great during this mode. It will help in writing mode for sure. I wonder when I will feel the impetus to switch to writing mode. At the current moment it feels like there's so much for me to get into my head, including:

* Alan Kays videos
* re-reading Seymour Papert
* Mountessouri
* Marshall McLuhan
* Piaget
* Chris Granger
* Nicky Case (again and more thoroughly)
* John Dewey (I'm becomming obsessed with this guy)
* F.M. Alexander (feels relevant to this project too)

And then I have a dozen books in my apartment that are begging to be read, such as:

* The Mythical Man Month
* Two culture of the scientific revolution
* Show your work
* Society of Mind (minsky)
* Theory of Fun for video game design

Given my current pace (assuming I'm not sick and continue to mostly read and not protoype), I feel like this reading will take more than a month but less than a year, which is very reasonable. The only worry is that the more I read, the more I will want to read because I'll want to continue walking the tree up to influence of influences of influences, eventually getting up to Plato or even the Torah. 

#### [Pickling my brain]( is a lot of work!

As Feynman says, [there are no miracle people]( If you want to be smart you merely have to do what smart people did to become smart. It seems like smart people do a lot of reading. What they're actually doing is assimilating models into their heads. Then when they're not reading they are playing with those models. 

It's a blessing and a curse that there are so many amazing models out there today. It's a blessing because we can be so much smarter than any person in history. It's a curse because if we want to be one of the smartest people of today, there's a lot of pickling to be done!

The next time someone implies that I was born this smart, I will need to give them a piece of my mind: "Do you know how much work it takes to be this smart?! Day in and day out I read and write and read and write. Just like an athlete trains the body, I train my mind every day, all day."

Joesph Campbell:

> I would get in nine hours of sheet reading done a day. And this went on for five years straight... Reading what you want, and having one book lead to the next, is the way I found my discipline. I've suggested this to many of my students: When you find a writer who really is saying something to you, read everything that writer has written and you will get more education and depth of understanding out of that than reading a scrap here and a scrap there and elsewhere. Then go to people who influenced that writer, or those who were related to him, and your world builds in an organic way that is really marvelous. 

(Wow, reading more of this snipet is amazing stuff! Now I'm excited to read this whole book where I found this quote!)

It's interesting to note here I was already following this strategy before knowing about his advice. It's quite vindicating to know that this strategy worked for someone else. And if it takes me 5 years, that's ok too. I'll just have to find some way to make it financially sustainable...
  • Loading branch information...
stevekrouse committed Dec 14, 2017
1 parent 3264fb7 commit e368ad0cfd2c36086a969829bcba3e645500afe3

Large diffs are not rendered by default.

Oops, something went wrong.
File renamed without changes.
@@ -7,14 +7,35 @@ title: Bret Victor
## [Interactive Exploration of a Dynamical System]( - May 16, 2011
## _March 15. 2006_ - [Magic Ink](
[My notes here](./magic-ink).
## _April 17, 2007_ - [Substroke Design Dump](!/substroke)
[My notes here](./substroke).
## _Oct 2009_ - [Simulation as a Practical Tool](!/SimulationAsAPracticalTool)
[My notes here](./SimulationAsAPracticalTool).
## _March 10, 2011_ - [Explorable Explanations](
[My notes here](./explorable-explanations).
## _April 2011_ - [Kill Math](!/KillMath)
[My notes here](./kill-math).
## _May 16, 2011_ [Interactive Exploration of a Dynamical System](
Wow, this is really the pre-cursor to Nicky Case's new [JoyJS](! There are only two things Nicky is missing:
1. The ability to directly manipulate the graphs, as opposed to dragging the numbers.
2. The ability to abstract over constants, displaying multiple different values of a constant on the screen at the same time.
## [Scientific Communication](!/ScientificCommunicationAsSequentialArt) - May 24, 2011
## _May 24, 2011_ [Scientific Communication](!/ScientificCommunicationAsSequentialArt)
This time I actually read the paper as he instructs. Seems like it might be where he found the word "dynamical." It's pretty interesting, albeit a lot of words to say: it takes a un-intuatively small number of floaters (people who have friends outside their clique) to make the people of a group of cliques a much shorter number of "handshakes" apart.
@@ -35,7 +56,7 @@ Another idea: instead of small pictures of black circles and lines, the pictures
A final point is that the data could be explorable all the way down, as Bret demonstrates in *Ten Brighter Ideas?*. Instead of simply trusting their data in the final graph, we could allow the reader to dynamically generate it based on various assumptions, thus making it fully citable and auditable to the core.
## [Scrubbing Calculator](!/ScrubbingCalculator) - May 31, 2011
## _May 31, 2011_ - [Scrubbing Calculator](!/ScrubbingCalculator)
Beautiful. Really clever way to get around symbols.
@@ -45,7 +66,7 @@ One drawback of this interface is that doesn't allow you to import data.
Another is that you have to first make number and then connect them. It would be neat if it could automatically connect numbers with the same text description.
## [The Ladder of Abstraction](!2/LadderOfAbstraction) - Oct 2011
## _Oct 2011_ - [The Ladder of Abstraction](!2/LadderOfAbstraction)
Wow, I didn't realize this piece meant so much to Bret! As he says [here](
@@ -55,41 +76,37 @@ I've so internatlized walking up and down the ladder of abstraction, both throug
As Bret explains, he "adopted the notion of "abstracting over a variable" from computer science. In particular, lambda abstraction corresponds directly to the sort of visual abstraction we're doing here." I'm pretty darn familiar with this proccess. I imagine this article might fall flat on an audience without functional-thinking experience.
## [A Brief Rant](!/ABriefRantOnTheFutureOfInteractionDesign) - Nov 2011
## _Nov 2011_ - [A Brief Rant](!/ABriefRantOnTheFutureOfInteractionDesign)
Vision without implementation is hard.
Vision without implementation is hard to imagine. I reacted negatively to this piece the first time I saw it. He was ragging on all of the world-changing technologies I loved! Now I see it for what it is: vision, audacity, inspiration. We don't know how to make the future, but we definitely know what it won't look like: what it looks like today.
## [Learnable Programming](!/LearnableProgramming) - Sept 2012
## _Sept 2012_ - [Learnable Programming](!/LearnableProgramming)
[My notes here](./learnable-programming).
## [Media for Thinking the Unthinkable](!/MediaForThinkingTheUnthinkable) - April 4, 2013
## _April 4, 2013_ - [Media for Thinking the Unthinkable](!/MediaForThinkingTheUnthinkable)
## [Stop Drawing Dead Fish]( - April 26, 2013
## _April 26, 2013_ - [Stop Drawing Dead Fish]( -
Beautiful. Yet unclear what problem it solves for whom.
## [Drawing Dynamic Visualizations]( - May 2013
## _May 2013_ - [Drawing Dynamic Visualizations](
Beautiful. Reminds me both of JoyJS and and [Programming with Comics]( Crazy how many tools this man inspires!
## [The Future of Programming]( - July 2013
## [Links 2013](!/Links2013)
## [Seeing Spaces]( - June 2014
## [Humane Representation of Thought]( - Oct 2014
## [What a technologist can do about climate change](!/ClimateChange) - Nov 2015
## _July 2013_ - [The Future of Programming](
## _Dec 2013_ [Links 2013](!/Links2013)
## _June 2014_ - [Seeing Spaces](
## _Oct 2014_ - [Humane Representation of Thought](
## _Nov 2015_ - [What a technologist can do about climate change](!/ClimateChange)
## [Quotes](!/quotes)
@@ -0,0 +1,142 @@
title: Learnable Programming
# [Learnable Programming](!/LearnableProgramming)
_Sept 2012_
I love the way he starts this article:
> Here's a trick question: How do we get people to understand programming?
I wholeheartedly agree with "Programming is a way of thinking, not a rote skill." I'm not sure "People understand what they can see." is as immediately obvious to me. I would prefer to simply use visuals "support and encourage powerful ways of thinking." No need to having "seeing" as an axiom.
## Contents
> A programming system has two parts. The programming "environment" is the part that's installed on the computer. The programming "language" is the part that's installed in the programmer's head.
### Will Wright on games
Given that this article inspired one of the main framings (environment vs language) of this essay, I figured I might as well read it... Some great quotes:
> The types of games we do are simulation based... As a player, a lot of what you’re trying to do is reverse engineer the simulation. You’re trying to solve problems within the system, you’re trying to solve traffic in SimCity, or get somebody in The Sims to get married or whatever. The more accurately you can model that simulation in your head, the better your strategies are going to be going forward. So what we’re trying to as designers is build up these mental models in the player. The computer is just an incremental step, an intermediate model to the model in the player’s head. The player has to be able to bootstrap themselves into understanding that model. You’ve got this elaborate system with thousands of variables, and you can’t just dump it on the user or else they’re totally lost. So we usually try to think in terms of, what’s a simpler metaphor that somebody can approach this with? What’s the simplest mental model that you can walk up to one of these games and start playing it, and at least understand the basics? Now it might be the wrong model, but it still has to bootstrap into your learning process. So for most of our games, there’s some overt metaphor that allows you approach the simulation.
> Like for SimCity, most people see it as kind of a train set. You look at the box and you say "Oh, yeah, it’s like a train set come to life." Or The Sims, "it’s like a doll house come to life." But at the same, when you start playing the game, and the dynamics become more apparent to you, a lot of time there’s an underlying metaphor that’s not so apparent. Like in SimCity, if you really think about playing the game, it’s more like gardening. So you’re kind of tilling the soil, and fertilizing it, and then things pop up and they surprise you, and occasionally you have to go in and weed the garden, and then you maybe think about expanding it, and so on. So the actual process of playing SimCity is really closer to gardening. In either case, your mental model of the simulation is constantly evolving.
> One thing that we found in playing with The Sims is that it’s pretty important that you have a consistent level of abstraction. It doesn’t make sense to have everything highly detailed except one aspect and then have it abstracted. So in fact you want the entire world and the entire representation to be abstracted at almost the same level. At which point it holds together very nicely. It’s kind of hard for you to go into a system and then be filling in the blanks of this one component, while everything else is highly detailed. So in The Sims, even the building is fairly abstracted. You can only put a wall within about a meter. The objects are somewhat abstracted in terms of selection: you don’t have the full selection that you would really have in a furniture store. The granules of interaction in the game are kind of abstracted. So having that consistency, in your head, you fill in the blanks really well. And this is something that kids do quite well of course. You watch kids playing with toys. They’re doing it all the time, very naturally. And even adults are doing that much of the time, with reading books, for example, where there are a lot of blanks to be filled in.
This is a great summary of the goal behind LogicHub:
> So you’ve got these people out there with all these different models.. A lot of people have talked to me over the years about community modeling. But not so much as a modeling tool, but more as a communication tool, using something like SimCity where people get involved in a planning process and get a sense of their community or the environment or whatever. Where the purpose of the model in those cases would be to come to a shared agreement about what the model is.
> We did a project actually several years ago called Sim Health for the Markle Foundation in New York. It was a simulation of the national healthcare system, but underneath the whole thing, the assumptions of the model were exposed. And you could change your assumptions, for example, as to how many nurses it takes to staff a hospital, or how many emergency room visits you would have given certain parameters, etc., etc. The idea was that people could kind of argue over policy but eventually that argument would come down to the assumptions of the model. And this was a tool for them to actually get into the assumptions of the model. When people disagree over what policy we should be following, the disagreement flows out of a disagreement about their model of the world. The idea was that if people could come to a shared understanding or at least agree toward the model of the world, then they would be much more in agreement about the policy we should take.
> CP: So in a way, a system like that could be used to externalize mental models and create a collective model.. it’s not so much like you all have the same mental model, but that you have an externalized model that everyone agrees to abide by.
Wow, video games could be a more effective vector for Seymour Papert powerful ideas than coding:
> At some level I want people to have a deep appreciation for how connected things are at all these different scales, not just through space, but through time. And in doing so I had to build kind of a simple little toy universe and say, here, play with this toy for a while. My expectations when I hand somebody that toy are that they are going to make their own mental model, which isn’t exactly what I’m presenting them with. But whatever it is, their mental model of the world around them, and above them and below them, will expand. Hopefully, probably in some unpredictable way, and for me that’s fine. And I don’t want to stamp the same mental model on every player. I’d rather think of this as a catalyst. You know, it’s a catalytic tool for growing your mental model, and I have no idea which direction it’s going to grow it, but I think just kind of sparking that change is worthwhile unto itself.
Makes me want to do research on Minecraft x Papert. Here are some links TODO:
I'm really getting revved up with the idea of video games, because they align things reasonably well: kids LOVE video games AND convince their parents to pay for them. Minecraft sold to Microsoft for $2.5B.
### Environment / langauge goals
While he starts with the environment, I'd rather start with the langauge, or in other words, *start from the user who doesn't know how to code*.
I believe the core challenge of learning to program is: **the assimilation of models.**
Bret calls this: "identity and metaphor -- _how can I relate the computer's world to my own?_")
In order to be able to make anything, the user needs to have a ever-improving model of how their tools behave. For example, think about about a child assimilates the model of a hammer. It's clear from the way it's shaped from which end to pick it up. Then when you pick it up, you immediatley notice that it's much heavier on one side. And of course you've seen others people use hammers, so the model snaps right into place: swing this where I want BAM.
#### Powerful mental models / ideas
Now taking this a step further, we as programming language designers want to embed a model inside a child's head that will enable them to be powerful. We know that different mental models are more powerful than others. For example roman numerals are much less powerful than arabic numerals. We know that [systems thinking is more powerful than linear thinking](
Thus we want to help students assimilate *powerful* mental models, what Seymour Papert called "powerful ideas." Bret lists some of these:
> decomposition -- how do I break down my thoughts into mind-sized pieces?
> recomposition -- how do I glue pieces together?
These are the two-sides of the *composability* coin. As we've learned from functional programming, composibility is a very powerful idea. It allows us to do *top-down design*, where one decomposes a problem into its subproblems in such a way that solving the sub-problems automatically solves the solution -- because you've pre-composed the sub-problems properly before solving them.
So now that we know composability is a powerful idea, how do we help a new user assimilate it?
Other powerful mental models/ideas include:
* referential transparency (partitioning side-effects) TODO
* type system
#### Technological realities
* proccessor speed
* storage
* network speed
* computational efficiency
#### Powerful ways of working
Additionally, we know about some powerful ways of working:
* creating by reacting
* creating by abstracting
* small steps
* refactoring
* version control workflow branching
* planning a project, estimating time, github issues, prioritizing
#### New learnable programming essay
Here's the framing:
human <-> interface <-> computer
Humans want to make things with comptuers. In order to make something you need to have a model of how it works in your head.
On the one extreme to the left, you could make an interface building upon models that people already have in their heads. This is why Microsoft Word is so successful. The cursor is much like the tip of a pencil and the page is much like a physical page. The mapping is clear.
On the other extreme to the right, you could simply have the human learn how the computer works, starting from electrons up through NAND and NOR gates, to proccessors, binary, Assembly, and C. This epitomizes Bret's Alan Perlis quote, "To understand a program, you must become both the machine and the program."
In the middle, you have powerful models for thinking, which take technological realities into account.
TODO looks like there are two dimensions here:
1. Familiarity of model (is it a human model or comptuer model)
2. Power of model (does it enable powerful ways of thinking)
Microsoft Excel. Unless you're coming from an accounting background, the grid model is new to you. (Side note: it wasn't until I learned SQL that I learned that properties are at the top and rows are entities. This array of dictionaries metaphor is quite powerful. I imagine people who grow up with Airtable or Fieldbook will learn those powerful ideas seamlessly.) There are two fascinating metaphors in Excel that are incredibly easy to pick up:
1. *Underneath* a cell can be a formula that produces it. The metaphor of "under the hood" is easily assimilated.
2. *Dragging* a formula iterates it over data, updating the references as it goes. Very easy to pick up. Then if you don't want certain references to update as you drag, you learn about the `$` operator. It's a great example of doing the commong thing automatically and letting you ask for a special case when you need it.
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
ga('create', 'UA-103157758-1', 'auto');
ga('send', 'pageview');
<script repoPath="stevekrouse/" type="text/javascript" src="/unbreakable-links/index.js"></script>

0 comments on commit e368ad0

Please sign in to comment.