Text Programming

I was thinking about this last night, and how the spreadsheet is a really good example of this done correctly, and what other scenarios you could make a similar program for.

For example, doing text manipulation isn’t easy on a spreadsheet — say someone emails you a massive, comma-separated list of email addresses. It would be sweet to be able to open that in a “text programming” environment where you do similar operations on text that you would do on columns and rows of numbers.

I keep, in a text file, a running list, day-by-day, of how I spend my time with Bloc. It would be sweet to be able to highlight the whole thing, and somehow tell it that the bold text indicates days, and that days are separated by blank lines. Then, instead of just searching “tex”, the program could be smarter and realize that these are actually dates, and allow them to be overlaid on a calendar or something.

On Alan Kay’s history of Smalltalk

Read it here

He keeps referring to programs’ size in pages, rather than bytes or any capacity. It means he thought about programs in terms of their length, rather than how much space they’d require on the machine.

I think he’s decoupling a program’s “length”, as a human perceives it in his head, from a program’s “size”, as a computer perceives it in order to execute it.

It’s a subtle distinction, but I think it’s pretty useful. It means for performance reasons, programmers shouldn’t care about the “size”, but they should care about the “length”. I suspect this is where the mantra of “code should be for humans to read, not for computers to execute” is born. If you can rely on “turtles all the way down” (such as LISP’s functions all the way down), then the computer execution is something you shouldn’t worry about. Let the system’s builtin functionality make it executable.

This keeps the goal of amplifying human abilities as priority number one, and especially concerns about where our locus of attention should be: always on the work, never on the interface. Facilitate flow.

Concept space

Englebart used the term “concept space”, and I think it’s a good term.

Version control, for example, is a relic of the past. It assumes we’re editing files, and that we’re editing them in isolation.

What if we were editing objects in memory, or in “concept space”?

How could we work without stepping on each other’s toes, and yet still be productive, while maintaining a history of our work?

Imagine a group of people at computers collaborating in realtime on the things in the “concept space”! It could allow us to bypass the language and communication barriers by directly outputting our ideas, using programming languages (which one?) into the concept space.

Perhaps the concept spaces could be overlaid. Instead of existing in isolation, you could toggle other concept spaces and immediately see the differences, intersections, and what was the same. Data visualization could produce interesting numbers and statistics between people and their ideas.

Is it possible to achieve a level of nonverbal communication (akin to playing music with band members) that could facilitate an emotional connection using a concept-space-like system?