Regularity

From Maze

Revision as of 14:43, 28 July 2011 by Nickm (Talk | contribs) (→BASIC Considered Harmful (Sidebar))
Jump to: navigation, search

Contents

[hide]

As an aesthetic work, 10 PRINT operates across many layers. When looking at images of the program's visual output of the program, the focus is clearly on the maze-like pattern that is created by combining the regularity of a uniform grid with randomly selected diagonal lines. The motion, however, is of equal or more importance. The fact that the pattern build on element at a time from left to right and top to bottom and the speed at which this occurs is essential. Beyond the motion, it's crucial that 10 PRINT is software. It's not constrained to a static representation or even to a pre-recorded beginning and end like a film or video work. Each visual element of the program is calculated while the program runs; it is a generative, realtime work that is performed by the C64. When we look back at the history of the arts in the decades prior to 10 PRINT, relevant precedents spring quickly to mind. It's interesting that these works are found across many fields including painting, sculpture, sound composition, video art, performance, experimental animation, and dance. Remarkably, many of the strongest references date from the decade prior to the arrival of 10 PRINT. This chapter introduces aesthetic precedent related to the grid and rhythmic process, while the origin of random (chance) operations in the arts is discussed in chapter ??.


[a repeated process upon a regular space that produces a pattern]

The Grid: Regularity in Space

The grid provides a base framework that human intuition and invention can operate within and subvert. Within the chaos of nature, regular patterns provided a contrast and promise of order. From early patterns on pottery to geometric mosaics in Roman baths, we've long used grids to enhance our lives through decoration. In Islamic culture, the focus on mathematics and prohibition on representational images led to the most advanced grid systems to date that were used to decorate architecture and religious texts. Grids have also long been used as the basis for architecture and urban planning. For example, its not possible to imagine New York, the one-time city of the future, without the regular grid of upper Manhattan. (Also, it's important to mention that Broadway breaks the grid to form many of the cities best public spaces.) The grid is also the basis for our most intellectual play, from chess to go.

//

As you might guess, the grid has proved essential to the design of computers from the grid of vacuum tubes on the ENIAC (1946) to the latest server farms that feed data to the internet. A new era of more reliable computing was spawned by a grid of ferrite rings called core memory. This technology worked by addressing each ring on the grid to set its charge to clockwise or counterclockwise to store one bit for information. Because the information is stored as a magnetic force, it maintains its state with or without power.

//

We need only remove one character from 10 PRINT, the semicolon that forces each line to draw to the right of the previous (see page ??), to reveal how essential the grid is to its visual impact:

 10 PRINT CHR$(205.5+RND(1)) : GOTO 10

As a column of diagonal lines, the maze is not formed and the vibrant pattern that encourages our eyes to dance across the screen is not established.

As mentioned on page ??, the grid revealed through 10 PRINT is not inherent in the program, it's an artifact of the defaults of the C64. Counter to the visual result, the output of 10 PRINT is linear, a one-dimensional stream of diagonal lines that is forced to wrap when there's no room left on screen. After the fortieth character is printed to the screen, the next line is forced to start one line down.


Truchet Tiles

Truchet-Tiles.jpg
800 × 1051 pixels
Sébastien Truchet, "Mémoire sur les combinaisons," Mémoires de l'Académie Royale des Sciences, pages 363-372, 1704.

Imagine a square tile, bisected into two triangles, one black, one white. Imagine two such tiles, placed next to one another. Out of this simple configuration emerges a surprising number of possible arrangements. Sixty-four, to be precise, as each tile can be oriented four ways, shifting the apex of the black triangle from corner to corner. Now imagine a whole floor or tapestry covered with a regular pattern of these repeating tiles. This is the power of the Truchet Tile, so named because the Dominican priest Sebastien Truchet first described what he called the "fecundity of these combinations" in 1704, after experimenting with some ceramic tiles he came across at a building site for a chateau near Orléans (Smith 374).

Matching a single Truchet tile with another, and another, and another, and so on, a designer is able to create an incredible array of patterns. The interplay between the direction of each tile and the varying repetition of black and white -- of positive and negative -- produces symmetrical designs that can range from grid-like patterns to mesmerizing, almost three-dimensional illusions. Unlike earlier Islamic patterns or Celtic designs, which both relied on multiple-sized shapes, the Truchet tile uses only a single size and a single shape (Smith 378). In his original 1704 essay, Truchet provided examples of thirty different patterns, barely evoking the aesthetic possibilities of his tiles, though he notes that he "found too great a number to report them all" (Smith 374). Truchet's work would be the inspiration for a latter book, Douat's modestly named Methode pour faire une infinite de desseins differents, which in turn had a considerable impact on 18th century European art (Smith 373).

Yet all of Truchet's and Douat's examples are regular patterns, symmetrical and repetitive. The mathematician Cyril Stanley Smith observes that even more compelling designs can be generated from Truchet tiles if "dissymmetries" are introduced. What happens when the regularity of a Truchet pattern is interrupted by randomness? Smith provides one example, a block of Truchet tiles arranged at random:

The latices of a grid are still visible, but randomness has made its mark, leaving imperfections that disrupt any nascent pattern. Unlike the symmetrical examples Truchet and Douat give, there is no resolution to the structure. The center cannot hold, and neither can the margins. Smith next pushes the limits of the Truchet tiles' regularity by omitting colors from the tiles, leaving only the black diagonal line. Suddenly the four possible orientations of any given tile have been reduced to two. Smith does this trick with the random array of Truchet tiles pictured above:

Suddenly the Truchet tiles have generated a design that looks unmistakably like the output of 10 PRINT. The grid still remains -- indicating the edges of each tile -- but the diagonals no longer seem to bound positive or negative space. Instead, they appear to be the walls of a maze, twisty little passages, all different. In this Truchet tile-produced artifact the dynamic between regularity and its opposite come into play, suggesting that regularity is not an aspect of design that exists in isolation, but rather can only be defined by its limitations, by those moments when the regular becomes irregular.

Textile Grids

The Grid in Modern and Contemporary Art

VeraMolnar-1959.png
510 × 500 pixels
Vera Molnar (French, born Hungary 1924). Distribuition Alèatoire de 4 éléments. 1959

In the 1960s and 70s, artists moved away from the raw emotion of abstract expressionism, the dominant current of the 1950s. Newer movements such as op-art and minimalism, and the continued line of constructivism in Europe engendered a body of rational, calculated visual art that utilized even spacing and grids to define order. A tour through any major American modern art museum will reveal Frank Stella canvas' of regular lines, Ad Reinhardt's hard-edge grids of barely distinguishable tones, Carl Andre's grids of metal arranged on the floor, Donald Judd's regularly-spaced steel fabrications, Dan Flavin's neon matrices, and Agnes Martin's exquisite, subtle grids of paint on canvas. This list could continue for pages and move forward in history, but you get the point. This American tendency to move toward minimal forms was expressed well by Ad Reinhardt's in Art-as-Art in 1962:

 The one object of fifty years of abstract art is to present art-as-art and as nothing else, 
 to make it into the one things it is only, separating and defining it more and more, 
 making it purer...

In Europe at the same time, a massive number of artists were working with grid systems and they were often doing so with more explicit focus and rigor. This energy was frequently channeled into groups that formed in different cities. For example, there was GRAV (François Morellet, Julio Le Parc et al) in Paris, ZERO (Heinz Mack, Otto Piene, et al) based in Dusseldorf and extending a wide net across Europe, and The Systems Group (Jeffrey Steele, Peter Lowe et al) in London and the Allianz in Zurich (Max Bill, Richard Paul Lohse et al.). The most iconic artist to work with grids might be the French optical artist Victor Vasarely. His work was so systemized that he invented a notation system to enable a team of assistants to assemble his works using instructions and modular, prefabricated colored pieces. Although it's difficult to discern in looking at the work, there was tension between the artists who worked toward the primacy of mathematical form and those who maintained a desire to imbue subjectivity and emotion in their geometric compositions. In critique of the former category of art, Ferreira Gullar, a Brazilian poet and essayist, wrote the 1959 “Neo-Concrete Manifesto” declaring that it was dangerous for art to be concerned only with, “objective problems of composition, of chromatic reactions, of the development of serial rhythms, of lines or surfaces.” (Beyond Geometry, p. 57)

These late-century visual works arose from earlier lines of visual exploration. Within the specific context of the grid, pioneers Piet Mondrian, Theo Van Doesburg and other artists affiliated with De Stijl abandoned representation entirely. They moved away from the abstract visual language opened by Wassily Kandinsky, Kasimir Malevich, and Alexander Rodchenko. Van Doesburg et al. coined the term “concrete art” to categorize works that are conceived without reference to nature and symbolism. The manifesto “The Basis of Concrete Painting”, published in April 1930 stated, “The work of art should be fully conceived and spiritually formed before it is produced. It should not contain any natural form, sensuality, or sentimentality. We wish to exclude lyricism, dramaticism, symbolism and so forth. ” (Constructing a New World, p. 187). Van Doesburg continued in “Elementarism (The Elements of the New Painting)” from 1932: “One must not hesitate to surrender our personality. The universal transcends it... The approach to universal form is based on calculation of measure and number” (Constructing a New World, p. 187). Representative works like Mondrian's Composition with Red, Blue, Black, Yellow, and Gray, 1921 (1921) and Van Doesburg's Counter-Composition VI (1925) were composed exclusively with orthogonal lines to form a grid. Works from this time also experiment with rotating the grid 45 degrees to create a more dynamic composition. This formal technique is utilized well with 10 PRINT.

//

[Suggest making a possible “Doppelganger” section of the chapter and include the Truchet variation here]

While the 10 PRINT program came out of the computer culture and not the art world, it has an uncanny visual resemblance to prior works of twentieth century art. The earliest related work we've tracked down is by Paul Klee, a Bauhaus professor and highly influential artist of his time (1879–1940). In his concise Pedagogical Sketchbook, published in 1925, Klee presents his thoughts on quantitative structure, rhythm, repetition, and variation. His Variations (Progressive Motif), painted in 1927, demonstrated his theories as a visual composition. He divided the 40cm square canvas into a grid of 9 units, where each unit contains pattern of parallel lines, with some exceptions, that run vertical, horizontal, or diagonal. More insight into this painting is found in his notebooks, as published in The Thinking Eye in 1964. Klee discusses the difference between natural and artificial measurement as the difference between idiosyncratic and rational order. More importantly, he discusses tension and dynamic density through the linear and progressive spacing of parallel lines. Through these visual contrasts in Variations, Klee explores the same aesthetics questions posed by 10 PRINT. He first created an artificial grid to work within, then populated each square with ordered, but variable patterns. Klee didn't have the advantage of motion afforded to 10 PRINT, but he simulated it through the expansion and contraction of parallel lines within his grid.

In France, a group of likeminded artists within and around GRAV (Groupe de Recherche d'Art Visuel) were exploring variations within grids. Francois Molnar and Vera Molnar worked on a series of images in 1959 which presented a visual system strikingly similar to 10 PRINT. In Francois' essay “Toward Science in Art”, published in the anthology DATA: Directions in Art, Theory and Aesthetics in 1968, he published the images Simulation d'une série de divisions de Mondrian a partir de trois au hasard and Quatre éléments au hasard [Figure ??]. Both are 24 x 24 unit grids with one of a few possible forms painted into each grid unit with black gouache. As the titles suggest, the elements in each square were defined by a random process. Their Composition Stochastique of the same year systematizes the random component entirely and by producing a modular set of two elements, a left and right diagonal that are placed within a 10 x 10 unit grid. In the illustrations for the essay, they feature a 1%, 5%, 30%, and 50% ratio of left to right diagonal lines to show the result of chaos intruding upon order. Because it's a 100 unit grid, these percentages correspond to precisely 1, 5, 30, and 50 units in each figure. In the 50% figure, the only substantive different with our 10 PRINT program is the variation on the core elements (Figure ??). Because a team of artists working in Paris in 1959 produced the fundamental algorithm for 10 PRINT twenty-three years prior to the printing of the Commodore 64 User Guide, does that enhance or diminish the stature of our one-liner? When she wrote about this work in a 1990 essay titled Inconceivable Images, Vera Molnar wrote that she was thinking about this painting as a computer program, because she had access to a machine:

 To genuinely systematize my research series I initially used a technique which 
 I called machine imaginaire. I imagined I had a computer. I designed a programme 
 and then, step by step, I realized simple, limited series which were completed 
 within, meaning they did not exclude a single possible combination of form. 
 As soon as possible I replaced the imaginary computer, the make-believe machine 
 by a real one. 

Across the Atlantic in the 1960s the American artist Sol LeWitt embarked on decades of work exploring grids and regular structures. In 1968, LeWitt starting making drawings directly on walls, rather than on paper or canvas that would be placed on the wall. In this return to the scale of frescos, his drawings within grids integrated into architecture to transform the space. His Wall Drawing 291 from 1976 is a striking work, with a strong similarity to 10 PRINT. Instead of the binary decision within 10 PRINT, LeWitt's drawing allows for horizontal and vertical lines, to create four choices for each grid element. Also like 10 PRINT, LeWitt's work is encoded as an algorithm. Unlike 10 PRINT, the instructions are in English, rather than BASIC:

 291. A 12” (30cm) grid covering a black wall. Within each 12” (30cm) square, 
 a vertical, horizontal, diagonal right or diagonal left line bisecting the 
 square. All squares are filled. (The direction of the line in each square is 
 determined by the draftsman.)

This grid-based wall drawing wasn't an isolated work within LeWitt's output. He created dozens of similar drawings, each with slightly different rules and allowing for varied lines including arcs and dotted lines.

Despite their visual similarity, all of the works discussed are fundamentally different from 10 PRINT because they are static. In the next section, we'll introduce another additional precedent for 10 PRINT related to its temporal and generative properties.

The Computer Screen

The Commodore 64, economically and conveniently, hooked to an ordinary television. It was an idea that could be seen in Steve Wozniak's Apple I, introduced in April 1976, and the later and more widespread Apple II. That was the main precedent in home computing, but the idea was not original to Apple. At Atari, television engineer and employee #1 Al Alcorn had designed a Pong cabinet that, rather than using an expensive commercial CRT, incorporated an ordinary black-and-white television that was initially bought from a retail store. Wozniak, who did the original design for the Atari arcade game Breakout, knew about this trick.

The rectangular form of the television image had its origins in the movie screen, which was rectangular due to the material nature of film and apparently obtained its original 4:3 aspect ratio thanks to a gesture by Thomas Edison, one which resulted in a frame that was four perforations high. While the aspect ratio of film changed and diversified over the years, television in the United States (standardized in the NTSC format in 1953) and many computer monitors, through the 1980s and 1990s, used the 4:3 ratio.

Although composite monitors were available for the Commodore 46, the relationship between that system and the television was clear and was the default for those setting up their computer and hooking it up to a display. For a Commodore 64 purchased in the United States, the system's video output usually terminated in a NTSC television. But the display did not begin there: It has a heritage that included at least two more unusual output methods.

As one of us has written, "Early interaction with computers happened largely on paper: on paper tape, on punch cards, and on print terminals and teletypewriters, with their scroll-like supplies of continuous paper for printing output and input both" (Montfort 2004). The standard output devices for computers through much of the 1970s were print terminals and teletypes. Output was not typically produced on pages of the sort that come from today's laser printers, but on scrolls of standard or thermal paper. The form factor for such output was not a standard 8 1/2" x 11" page, but an essentially endless scroll that was typically 80 columns wide.

Teletypes were used to present the results of BASIC programs that were first written at Dartmouth in the 1960s, and they were the typical means of interacting with important early programs such as Eliza and Adventure. With such a system for output, there was no need for an automated system of "scrollback" -- a user could actually pick up the scroll of output and look at it. Of course, animation and other effects specific to video were also impossible.

An argument has been advanced that the modern computer screen also has an important heritage in the round CRT display of the radar screen (Gere 2006). The SAGE early warning system, the PDP-1, and the system on which Douglas Engelbart did the "mother of all demos" all sported round cathode ray tubes (CRTs), as did early televisions. It's notable that the first two systems which may have been video games in the modern sense, Tennis for Two by William Higinbotham and Spacewar by Steve Russel et al., were both created for circular CRT displays. While radar and some other images were actually round, as the early cathode ray tube was, the television signal and the page were not. What was, for radar, a radial display eventually gave way in computing to the rectangular, grid format that was adhered to by both page and television image.

The Commodore 64's video image is a grid 320 pixels wide and 200 pixels tall. This accommodates an array of characters or, in the terminology of Commodore 64 hi res graphics, attribute cells. Specifically, the grid is 40 attribute cells wide and 25 high. (There are other graphics modes that offer advantages, but for understanding 10 PRINT, the array of characters or attribute cells is most important.) Interestingly, the 40x25 grid contains exactly 1000 characters, each represented by a byte. This fits nicely into one kilobyte, 1024 bytes -- in fact, it is the largest grid of 40 characters that occupies 1024 bytes or less.

Repeating: Regularity in Time and Process

Temporal Repetition in the Arts

[See the discussion page for the outlines and ideas: http://weizenbaum.mit.edu/mediawiki/index.php/Talk:Regularity#Outline_for_Repeating:_Regularity_in_Time_and_Process]

The Flow of Control

In any imperative programming language, commands are processed in a particular order that relates to the left-to-right, then top-to-bottom path that the Western reader's eyes stereotypically take along a page. If one types in two PRINT commands directly to the Commodore 64's BASIC interpreter, with a colon between them, like so:

PRINT "FIRST": PRINT "SECOND"

The result is

FIRST
SECOND

The command on the left is executed first; then, probably not very surprisingly, the command on the right is carried out. In executing the following program, the topmost, leftmost command is run first, then the one to the right, and then the one on the next line, so that three lines that read FIRST, SECOND, and THIRD are printed:

10 PRINT "FIRST": PRINT "SECOND"
20 PRINT "THIRD"

The order in which these two lines are actually typed in by the programmer is completely irrelevant to how the program runs. The lines of a BASIC program are executed based on their line numbers, not based on when lines were entered.

There are some important ways to complicate this straightforward program flow. All of these ways involve branching, which causes program flow to continue at some other command rather than what would is, according to left-to-right, top-to-bottom program structure, the next one.

At the low level of machine code and its execution by the processor, the way program flow works is similar. Machine language is a sequence of numbers, and the next number is usually processed. However, an executing machine language program, like a high-level program in BASIC or another imperative language, can either continue to process the next instruction or can move out of sequence to process a different instruction. The standard case is when a processor continues to the next machine language instruction, just as the reader of a text moves to the next word or line. This involves incrementing the program counter so that it points to the place where the next instruction is located in memory. If the current instruction is one that can change the flow of control, however, the program may jump to a new memory location and a new piece of code.

Conditional and Unconditional Branching

There are two essential ways that the flow of control can change and a program can "branch," or continue at a new point. An unconditional branch always directs the program to jump to a new location, like the instruction "Go directly to Jail -- do not pass Go" in Monopoly. The assembly mnemonic for an unconditional branch is JMP; the corresponding BASIC keyword is GOTO.

When an unconditional branch is used to point back to an earlier instruction, it can accomplish repetition in process. In 10 PRINT, the GOTO command is used to cause the program to loop, so that the PRINT command is repeated again and again.

The other type of branch is a conditional branch, a type of instruction that is critical to general-purpose computing. There are many different types of conditional branches in assembly, since there are many different types of conditions. BEQ is "branch if equal," for instance; when used after a comparison (CMP), the branch will be taken only if the compared values are equal. BMI, "branch if minus," checks to see if the last computation resulted in a negative value. In BASIC, using the IF ... THEN statement is the most straightforward way to accomplish a conditional branch, as this program demonstrates:

10 INPUT A$
20 IF A$ = "1" THEN PRINT "YOU TYPED ONE!" : END
30 PRINT "SOMETHING ELSE..."

If, after running this program, the user types just the digit "1" and then presses RETURN, all of the statements on line 20 will be executed. "YOU TYPED ONE!" will be printed and then the program will terminate as END instructs. This is another way to change the flow of the program, of course: use END or STOP to terminate the program. If STOP is used, the CONTINUE command can be issued to pick up where the program left off.

If the user types anything else before pressing RETURN, the flow of control moves to line 30; both the first PRINT statement and the END are skipped. "SOMETHING ELSE..." is printed instead.

This program, although written differently, does exactly the same thing:

10 INPUT A$
20 IF A$ = "1" THEN GOTO 40
30 PRINT "SOMETHING ELSE..." : END
40 PRINT "YOU TYPED ONE!"

Instead of using the IF ... THEN to directly determine whether two statements (the PRINT and END statements) should be executed, this one changes the flow of control with GOTO. The GOTO statement is used to skip ahead past PRINT "SOMETHING ELSE..." and END to line 40. Although this isn't a very exciting program, it shows that unconditional branching can be used to move ahead in the sequence of lines; there is nothing about GOTO that means it must be used to repeat or loop.

Although there is no IF ... THEN statement in 10 PRINT, and the program does not by any interpretation contain a conditional branch, this short program does accomplish a very small-scale sort of variation. By computing 205.5+RND(1) and passing that value to the function CHR$, the program prints either PETSCII character 205 or PETSCII character 206. This variation between two characters is a one-bit variation, a selection from the smallest possible set of options. Yet, in combination with the regularity of a repeating processes and the regularity of the Commodore 64's screen grid, these selections take shape as something evocative and visually interesting.

The Harmfulness of GOTO

Those aware of the discourse in computer science might turn to 10 PRINT with some trepidation, thanks to a 1986 letter to the editor from Edsgar W. Dijkstra which declares "Go To Statement Considered Harmful" (EWD215). Although the title was actually written by the editor -- Dijkstra calls this article "A Case against the GO TO Statement" -- the letter and the sentiment behind it have gained lasting fame. One author called it "probably the most often cited document about any type of programming" (Tribble 2005). As this author explains, Dijkstra's exhortation

was written at a time when the accepted way of programming was to code iterative loops, if-thens, and other control structures by hand using goto statements. Most programming languages of the time did not support the basic control flow statements that we take for granted today, or only provided very limited forms of them. Dijkstra did not mean that all uses of goto were bad, but rather that superior control structures should exist that, when used properly, would eliminate most of the uses of goto popular at the time.

Indeed, there is an obvious control structure, unfortunately absent from BASIC, that would accomplish the purpose of 10 PRINT's GOTO without requiring the use of GOTO. This is the while or do ... while loop, which in this case could simply be used with the condition "True." For instance, if Commodore 64 BASIC had a DO ... WHILE statement, one might write:

10 DO : PRINT CHR$(205.5+RND(1)); : WHILE TRUE

This would certainly be a clearer way to write the program, and it would be widely recognized today as clearer because Dijkstra's view of programming has prevailed. Still, it's not obvious that the tiny program 10 PRINT would have particularly offended Dijkstra. In his letter, he objects to the "unbridled use of the go to statement" and does not state that every use of it is unambiguously bad. He describes the GOTO-related problems that arise from the values of variables getting out of a programmer's control. But 10 PRINT has no variables, so this particular problem is not an issue.

The equivalent of a GOTO statement is a staple of machine language programming, and in its unconditional form is called JMP. Dijkstra essentially exempted machine language from his critique of GOTO. He recognized that computer programs written in a high level language are more complicated and nuanced ways of expressing thought, not tied directly to machine function. By creating a new sort of language that does not directly mimic the operation of the processor, it is possible to think more flexibly. Although Dijkstra objected to the way BASIC was designed, he worked strenuously to describe how high-level languages could be effective in machine-independent ways.

BASIC Considered Harmful (Sidebar)

Edsgar W. Dijkstra, of "GOTO Statement Considered Harmful," was not at all a fan of the BASIC programming language in which 10 PRINT is written. He wrote in a 1975 letter, "How do we tell truths that might hurt?," which was published in 1982: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration" (EWD 498).

The statement appears amid other one-sentence jabs at programming languages (FORTRAN, PL/I, COBOL, and APL), IBM, and projects to allow "natural language" programming. In a 1984 keynote address, "The Threats to Computing Science," he said, similarly, that "the teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery" (EWD898). In both cases, his statements are not part of arguments, nor are they elaborated at all. They are simple denunciations of BASIC -- no doubt resonant with many computer scientists and no doubt of some tactical value at the time, when the structured programming that predominates today and that Dijkstra was advocating was still being questioned.

Dijkstra's papers contain a single reference to BASIC co-inventor John Kemeny. Dijkstra read Kemeny's 1983 article in Daedalus, an article that discussed the idea of computer literacy and declared that "the development of 'structured languages' in recent years has been a giant step forward." Dijkstra simply wrote a dismissive sentence about the article, saying it "gave a striking example of superficiality" by comparing computer languages to natural languages (EWD858).

Some of the context for these statements is the formation and fortification of a discipline, computer science, and the development and use of languages that might support first formal verification (the provability of programs) and later the weaker but still potentially very useful technique of program derivation (Tribble 2005). BASIC, created for quick interactive use and very amenable to creative production, was simply not a suitable language for Dijkstra's desiderata.

Another bit of context for these statements comes from Alan Kay, who remarked in his keynote speech to the 1997 Object-Oriented Programming, Systems, Languages & Applications conference: "I don't know how many of you have ever met Dijkstra, but you probably know that arrogance in computer science is measured in nano-Dijkstras."

Bounded and Unbounded Loops

10 PRINT works as it does because of its repetition of the PRINT statement, repetition that is unconditional: It will continue until something outside the program interrupts it, such as the user pressing the key labeled RUN STOP or unplugging the computer.

At a high level, programs can contain two types of loops: bounded (also called "finite") and unbounded (or "infinite"). 10 PRINT has the latter kind. If one is writing a program that is intended to produce some result and exit, it would be a mistake to include an unbounded loop. The unbounded loop does have legitimate uses, however. It can be used to keep an application, usually an interactive one, running and accepting input until the system is shut off or rebooted. This can be done, and is one, even on a Commodore 64.

Bounded loops are those that end under certain conditions. The exact conditions vary; some will continue until the program reaches a pre-defined exit state while others execute a specific number of times. If there are exit conditions for a loop at all, that implies the programmer was expecting some kind of change to be introduced as the program executes.

A common use of finite loops is to create an iterative process. Iteration is a special type of looping where the result of one pass through the loop influences the result of succeeding passes. The simplest example of an iterative process is nothing more than counting. Beginning with an initial value of 1. Adding 1 to this (that is, increment it) to produce 2. Performing the same incrementing operation again, to yield 3, and so on. If the program goes to some limit, say 10:

10 A=1
20 PRINT A
30 A=A+1
40 IF A<=10 GOTO 20

The loop is bounded. If line 40 is replaced with 40 GOTO 20, the loop is unbounded.

A conditional branch is what makes loop bounded -- it ends when the condition is met. An unconditoinal branch corresponds to an unbounded loop.

The bounded loop, and counting up or down to a particular value, is so important in programming that BASIC has its own special syntax for specifying that sort of loop, using the FOR ... TO and NEXT statements. The bounded program above could also be written:

10 FOR A=1 TO 10
20 PRINT A
30 NEXT

FOR ... TO ... STEP (Sidebar)

The FOR loop in BASIC is a bit more general than is shown in the example in the main text. It can be used not only to increment a variable, but also to change its value each time by any amount. A different increment is set using the STEP keyword. To show only the even numbers between 2 and 10:

10 FOR A=2 TO 10 STEP 2
20 PRINT A
30 NEXT

If STEP is omitted, it's the same as adding "STEP 1." The step value can be set to a negative number or even to zero. By setting the value to 0, an unbounded FOR loop can be created:

10 FOR A=1 TO 10 STEP 0
20 PRINT "FOREVER!"
30 NEXT

This allows for an alternate version of 10 PRINT, slightly longer but still a "one-liner" of no more than 80 characters, that uses a FOR loop instead of GOTO:

 10 FOR A=1 TO 2 STEP 0 : PRINT CHR$(205.5+RND(1)); : NEXT

Is 10 PRINT Iterating?

From the discussion so far, it should be clear that 10 PRINT has an unbounded loop thanks to the unconditional branch at the end. There is nothing in the code, however, to indicate that 10 PRINT is an example of iteration. There are no variables like A that change value from one pass to the next -- there are no variables at all, in fact -- and the code inside the loop, and the way that code works, never changes. In the most strightforward sense, the BASIC program 10 PRINT CHR$(205.5+RND(1)); : GOTO 10 does not iterate.

Watching the program execute on screen shows hints that there is something changing as it runs, though: the position where a new character is displayed changes every time the loop executes, moving one location to the right until it reaches the 40th column; then, the display of characters continues on the next line in column 1. The entire contents of the screen also moves up by two lines, with the top two lines disappearing, once the display of characters reaches the bottom left position.

None of this is a direct result of any BASIC statements included in 10 PRINT. Displaying strings on the screen generally has this effect, since BASIC's PRINT command calls the Commodore 64 KERNAL's CHAROUT routine and produces output in this way. So, while 10 PRINT is not an iterative program, it invokes the iterative behavior of PRINT. In this case, the behvaior is a sort of incrementing, because ";" is used to display the next character immediate after the previous one and a string that is one character long is displayed in each pass. 10 PRINT's simplicity exposes the power of using simple, iterative steps to create a complex construction.

Works Cited

Fabre, Gladys and Doris Wintgens Hotte, eds. Constructing a New World, Van Doesburg & The International Avant-Garde. London: Tate Publishing, 2009.

Singer, Susanna ed. Sol LeWitt Wall Drawings 1968-1984. Amsterdam: Stedelijk Museum, 1984.

Smith, Cyril Stanley, and Pauline Boucher. “The Tiling Patterns of Sebastien Truchet and the Topology of Structural Hierarchy.” Leonardo 20.4 (1987) : 373-385.

Rose, Barbara. Art-as-Art, The Selected Writings of Ad Reinhardt. Berkeley: University of California Press, 1991.

Rickey, George. Constructivism: Origins and Evolution. New York: George Braziller, 1967.

Zelevanksy, Lynn. Beyond Geometry: Experiments in Form, 1940s-70s. Cambridge: MIT Press, 2004.

Personal tools