Fred Brooks Design of Design describes a common pattern of reducing a complex graph to a linear representation:

  1. Cut edges in a graph until it is a tree. This process imposes a hierarchical order where there was none before, whether that order is wanted or not.
  2. Map the tree onto a line in any of several well-known ways, but usually depth-first.
It is good to see this process described in plain English. I have been aware of the first compromise and have not found a way around it. Even interactive presentations seem to impose at least a tree if not a linear order. NLS was good at ameliorating the 2nd stage compromises. You often want some linear ordering to ‘exhaustively’ traverse a graph.

Generally there is some uniform manner of restoring the cut edges. In interactive systems clicking a link will take you from one graph node to the detached node. Alas these links are generally one way.

Modern programming languages commonly impose some sort of tree like nest of ‘blocks’ which limit scopes of identifiers. I am fond of this pattern even though it suffers from the arbitrary nature of the first cuts. Subroutine calls ameliorate this problem well enough for many purposes. They are sort of like hypertext links.

Livermore had an assembler for the Stretch which had macros that considered comments to be subject to replacement of macro parameters by macro arguments provided at the call site. That system was not interactive but the bulk printouts included text in the form of comments that were less abstract than the comments originally written. I found that pattern surprisingly effective while reading other people’s code.