Simple Things Simple, Intro

Making Simple Things Simple, Making Complex Things Possible


Mitchel Resnick
Henry Lieberman




The Problem

Why programming [as opposed to "being a user"]?
Why is programming hard?
What can make programming easier?


Address failures of conventional programming systems

Programming languages are difficult to learn
Programs are difficult to debug
Programs are difficult to modify



Build on successes

People have intuitive understanding of procedures
Make programming more like real-world activities that people are good at
People succeed in using commercial applications
Very young children can learn a suitable programming language



Well, what are you going to do about it?

Simpler programming languages
Better programming environments, programming models
Visual programming languages
Programming by example
Programmable applications / scripting languages
Intelligent agents
*** Your idea here ***



Provide a programming language that is easier to use

More like English: "Dear Mr. Computer"
Simplified syntax
Provide more high-level primitives



Provide an environment that is easier to use

Programming ain't just programming languages

* Better debuggers
* Better browsers
* Better editing tools




Provide a programming model that is better suited to the task

Parallelism
Constraints
Logic Programming
Rule-based Programming



Use graphics: Provide a visual programming language

1 Picture = 1K Words ?
Some people are more comfortable with visual, concrete problem solving than textual, abstract domains
When the subject matter is best expressed visually, textual languages are awkward





Make the application itself programmable

Application [e.g. spreadsheet] comes with built-in programming language
So-called "scripting" languages
Primitives have one-to-one correspondence with interface elements


Teach the machine: Programming by Example / by Demonstration

User shows the machine how to work out an example
Interface records user actions
Learning mechanism generalizes a program that can work on analogous examples


Mondrian:
An Instructible Graphical Editor

Mondrian =

* An object-oriented graphical editor +
* An agent that records user interface actions +
* Learning and generalization heuristics




Delegate, don't program!
Intelligent interface agents


lieber@media.mit.edu