REPL means “trying things out”.
It is derived from the words “Read Eval Print Loop” which were parts of the original Lisp REPL.
REPLs form a continuum
- at one extreme is the programming language REPL of Lisp
- at the other extreme is “Live Programming”
IMO, a lot of Bret Victor’s independent work boils down to REPLs.
Hmm, is rapid prototyping just a way to try out designs?
Dynamic Languages vs. Static Languages
Hmm, dynamic languages tend to allow experimentation.
Static languages (compilable languages) tend to inhibit experimentation and expect that you already know what you want.
If you don’t already know what you want yet, e.g. when starting a new project, compiled languages get in the way of free-form thinking about the problem.
Compilers are optimizers for designs.
Some people argue that type systems - compiler languages on steroids - help them design a problem. I would argue that exploring a problem is Design. IMO, type systems are but one way to explore a problem.
If your problem involves plumbing bits of data together, then types might act as useful models.
If, on the other hand, your problem involves plugging control-flow bits together, then types might not be the most useful models. Extreme examples of this are lambda calculus1 and continuation-passing style. The actual unit of pluggability consists of one type - the control-flow-doo-dad (aka function).
Imagining that you already know what you want, just by imagining it and not trying it out is the essence of Waterfall Design.
Air Design is like playing Air Guitar. It sounds perfect in your imagination.
Artists try out art using paper and pencil before commiting to final implementations of the art.
Songwriters try out phrases before commiting to a final form for the song.