thoughts-lists-programmingConstructs

http://www.uidesign.net/2000/interviews/cooper1.html

Alan Cooper:

"The point is that, if you are a Visual Designer, or if you are an HCI Professional, or even programmers you tend to approach things from the point of view of saying, what are the technological tools at your disposal. You say, Oh, I have a relational database. Therefore, I can issue a query and I can get back, in a batch mode, a solution set of a reduced number of choices.

You might have a real world situation where you have someone who walks into a library and searches based on a Dewey Decimal Categorization System number and then wants to see a list of related books. The query system fundamentally disallows this."

" Why can't I logically group things? I can categorize things. I can say, here is a name that belongs in my list of business names, here's another which belongs in my list of personal names, but I have lots of names that need to be in both lists. I"

"For example, using any typical operating system e.g. Linux, NT, MacOS?, when you create a chunk of data, you have to put it in a named data block, some file. You then have to put that in some place, in a positionally notated storage hierarchy. So you have to choose a name, and you have to choose and specify a place, a node in a tree. When you want that information back again, you have to remember the name that you gave it and you have to remember the place that you stored it. Then you go to that place, remembering the name, and there it is. You can retrieve that data. It's very logical and it's very appropriate but this is a model which is designed for computers.

The Problem is that humans are really bad at remembering names and places. With that kind of specificity, especially in a recursive hierarchy, where the nodes are exactly alike regardless of what level they are. Of course, computers happen to be really good at remembering stuff like that. However, the computer doesn't give me any help in remembering. The computer delegates that [remembering] job to the human. That's because the guys who invented operating systems.... that sort method comes from Kernighan and Plauger, from Unix. If you're a computer program remembering a simple file name in a directory is a trivial task. They [ the operating system inventors] just handed that task out to the human user.

That is not a simple or trivial task for humans. No one has ever gone back in and said, "Hmmm. Is this appropriate?" I talk a lot about this in my first book, "About Face"."

"If you have a modern cell phone then you know that you have probably recorded into the memory, 50 or 100 phone numbers, and you probably have a speed dial of 8 or 10 numbers which you dial frequently. If you think about the number of times that you key in from scratch, a phone number - area code, prefix, number - is maybe 1 in 10. The other 9 times, you use numbers which the phone has already remembered. Yet the physical interface of the phone which is presented is highly tilted towards dialing those numbers from scratch.

You need a functional overlay and you have to switch into a meta-mode in order to dial up numbers which the phone has already memorized and you regularly dial. This is because we don't think from a Goal-Directed(R) point of view. We don't look at the way people actually do things. Instead we look at the technology and we say, "The way you telephone someone is by typing in a number." Then we say, "Hey we could make this more convenient by having it remember numbers".

Why not instead say, "People always call, the people that they always call". Then you could have something simple like a knob on the top of telephone which just spins through the top 20 people that you call all the time. And by the way, for the rare occasions when you do have to call a strange number, then you turn it over and open up the back and there are the numbers [keys]. "


"detect" control structure:

  1. !/usr/bin/env dpython

A = [9,8,7,6,1,4,3,2,5] i = -1 # Left index j = len(A)-1 # Right index v = A[-1] # Pivot

detect 'Partition done': detect 'Move element j down': i = i+1 if i==j: 'Partition done' if A[i] > v: A[j] = A[i] 'Move element j down' detect 'Move element i up': j = j-1 if j==i: 'Partition done' if A[j] < v: A[i] = A[j] 'Move element i up'

A[j] = v

print A

(from http://www.idi.ntnu.no/~mlh/python/partition.py and "Event-Driven Control Statements", BIT 15, pp. 229-275)


tuples: should be able to return multiple values


vectorization, like octave does, is nice


think about how the web/internet changes things.

a "get" primitive, to get information from some information source (file/ftp/web)?

serialization primitives

distributed computing primitives? remote method invocation? distributed objects?


GUI primitives (seems uneeded)


also, paralled computing primitives (synch/monitor tokens, etc)


text processing primitives, like Perl's RE handling (I don't think Python makes this concise enough)


i think a good way to develop a language is to have a number of test programs, and find the shortest, clearest way to express these programs, then make a language that can understand that

http://merd.sourceforge.net/pixel/language-study/scripting-language/


should have set theory primitives, matrix construction primitives, sequence construction primitives, etc. i.e. the set "union{i\inN} A_i" should be constructible (and lazily evaluated)