Eidola Notation Gallery | |||||||||||||
Eidola Notation Gallery
|
Minimalism in Notation Design | ||||||||||||
Next: User Interface Philosophy - On Use Cases and Feature Sets >> | |||||||||||||
Discuss it! | |||||||||||||
Nick Weininger writes: I've just finished reading Edward Tufte's The Visual Display of Quantitative Information, which is every bit as excellent as its reviews say. I plan to follow up soon with his other two books, Envisioning Information and Visual Explanations. These latter two supposedly contain advice specifically about computer UI design, so they may have more relevance to the notation question; VDQI is more concerned with statistical charts, graphs, maps, etc. I may change the views expressed below after reading the other two books, so all of this should be well salted before consumption. However, the central principles of data graphics laid down in VDQI seem to me just as applicable to programming language notation as to statistical charts. Tufte's principles include:
In short, Tufte's philosophy applies a kind of ruthless minimalism to enable the expression of the maximum amount of data in the least possible space. The desired effect is analogous to the ideal short story beloved of curmudgeonly English professors, in which every word is indispensable to the story. I think this philosophy carries over well to the display of the semantic data of programs -- and I think minimalism is a crucial design value, in light of the limitations of computer displays, the extreme complexity of large programs, and the speed with which display clutter mounts. One of the cardinal sins of textual source code, it seems to me, is its low "semantic content-to-pixels ratio": quite apart from the failure of source code to exhibit large-scale structural data clearly, most of the characters that make up a source code file are not even directly expressing low-level semantic data. Programming productivity is decreased when programmers must spend time sifting through semantically uninteresting code elements to find the semantically interesting ones. A good notation, then, should not only strive to call out important semantic data that source code hides; it should refrain from cluttering up the viewing space with any elements that do not express semantic content, be they window decorations, extra arrows, redundant statements, or whatever. Furthermore, it should seek to maximize the semantic content of the shapes in which it presents data-- but not by creating a complicated graphical representation code, i.e. "squares are classes, trapezoids are functions, etc". Instead, it should seek to use graphical juxtaposition as a spur to comparative thinking about program structure. As an example, it would be enormously useful to have a view of the classes within a package arranged so that the number and complexity of class members is easily visible. One could do this by writing out the signatures of the members in text within a little box representing each class, or by using just the member name to represent each member but scaling it according to the number of arguments, or just having a little bar for each member. The important attributes would be:
Such a view would enable a code reviewer to tell at a glance where reviewing effort ought to be focused within a package, a very difficult thing to figure out with traditional source code. The reviewer would then be able to begin reviewing a particular class of class member while keeping an eye on the other classes in the package, which is virtually impossible with traditional source code. | |||||||||||||
Discuss it! | |||||||||||||
Next: User Interface Philosophy - On Use Cases and Feature Sets >> | |||||||||||||
Copyright 2001 Nick Weininger |