Regularity
From Maze
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
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
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]
As mentioned above, motion and process are essential to 10 PRINT. The still images that archive as the program runs and are reproduced in this book are an incomplete representation. A full understanding of the program comes only through experiencing the pattern build one unit at a time and the surprise of the unexpected sequences and connections that form the maze as the left or right line are randomly drawn.
As we know, the traditional visual arts are static; think fresco, stone and bronze sculptures, and canvases. We create motion as we move around a work and our eyes explore the surface, but the object is still. The thrust of machines into life at the beginning of the 20th century was an inspiration to painters (the Futurists) and photographers (Étienne-Jules Marey, Eadweard Muybridge) and also to sculptors who used motors to create motion. The origin of integrating physical movement into artworks in the twentieth century is often credited to Naum Gabo for his Kinetic Construction (Standing Wave) from 1919-20. This sculpture created a virtual volume in space by mechanically hitting a metal rod near the base to send a wave through the object. Gabo was thrilled to bring motion into his art and his enthusiasm led to “The Realistic Manifesto”, co-written with his brother Antoine Pevsner in 1920. After rejecting the traditional foundations of art in an ordered list (1. Color 2. Line 3. volume, and 4. Mass) they declared:
5. We renounce the thousand-year-old delusion in art that held the static rhythms as the only elements of the plastic and pictorial arts. We affirm in these arts a new element, the kinetic rhythms as the basic forms of our perceptions of real time. (Force Fields p. 228)
With kinetic rhythm as the base of all new art, Gabo's Kinetic Construction is an ideal demonstration. It's a machine without visual interest and no relation to the sculpture of the time. It performs the same motion precisely over and over. The work of art is reduced to a rhythmic repetition. While other pioneers of motion in art such as Marcel Duchamp and Alexander Calder worked with motors to create regular machines, by the middle of the century the dominant form of motion had shifted to the type of chance motion experience through the wind moving a Calder or Rickey mobile or the anarchic mechanical chaos of Jean Tingely. The essence of 10 PRINT is the relationship between both forms.
The next phase of the pairing motion and repetition in visual art brings us closer to 10 PRINT as artists began to create works for screens, first with film and later for CRT screen with video. Akin to the minimalist sculptures referenced above, there was a proliferation of minimal gestures within experimental film and animation. Starting in the 1960s, artists including Lillian Schwartz, John Whitney, Norman McLaren, Bruce Nauman, Richard Serra, and Paul Sharits explored repetitive physical movements and abstract motion with rigor. The Flicker (1965), a film by Tony Conrad, stands out for it's clarity. In figure ??, we see that without the semicolon in 10 PRINT each line in the program could be seen as a panel of a film strip. It's only a small leap to imagine the left line of the program as an unexposed film frame (clear) and the right line as the maximum exposure (black) to bring the fundamental mechanism of 10 PRINT close to The Flicker. The fundamental different is the larger arcs within Conrad's work. The pace at which the projection flips from pure light to black is slower at the beginning and end of the film to give it a beginning and end, while 10 PRINT maintains the same pace and is without a change at the end and has no fixed end.
Simultaneously to the exploration of repetition in film, a host of composers and performance artists based works on repetition A strong argument can be made that performance, including musical performance, is the area of the arts that is most similar to 10 PRINT. Like film and video, performance is temporal, but unlike these linear media, performances and 10 PRINT unfold in real time, with each step happening in the moment and potentially informed by the present state.
Piano Phase (1967) by Steve Reich is an iconic sound work built on repetition. In this approximately twenty minute composition, two pianists start by playing the same twelve-note melody continuously. One pianist plays the sequence faster so it moves out phase until they are back in phase, but the faster pianist is playing the second note, while the slower is on the first note. This continues until the faster pianist has looped so both are playing the same sequence at the same time. The piece iterates further from that point, but the same phasing technique is used until the end. In 10 PRINT, new forms emerge from the programs decision to display the left or right line, but in Piano Phase, new sonic forms emerge by playing the same sequence over and over, but with one musician at a different speed.
Step Piece by Vito Acconci is another performance work based on repetition that's interesting to compare and contrast with 10 PRINT. Acconci defined this work through a brief text:
An 18-inch stool is set up in my apartment and used as a step. Each morning, during the designated months, I step up and down the stool at the rate of 30 steps a minute; each morning, the activity lasts as long as I can perform it without stopping.
The ways that step piece are different from 10 PRINT reveals what is unique about each. The analysis of Step Pieces yields the question, “How is repeating the same thing over and over not repetitive?” Unlike a computer program, when a person performs the same thing, it's a little different each time. The photographic documentation of Step Piece show Acconci in action with one foot on the stool and the other on the way up or down. In relation to a screen capture from 10 PRINT, each photo is drastically different. Additionally, Acconci gets better at his repetitions in time while 10 PRINT writes characters to the screen at the same rhythm and in the same manner as long as the program runs. While some computer programs can improve over time (e.g. caching to improve download speed or machine learning algorithms), a one-line program like 10 PRINT is an exemplar of the legacy of computers as basic calculating machines.
The performance piece Dance, a collaboration between choreographer Lucinda Childs, composer Phillip Glass, and artist Sol LeWitt, is a work that integrates these performance strands together. Like all of the works discussed above, narrative was removed and the subject is literally movement, hearing, and seeing through variation and repetition. For three of the five sections of the performance, LeWitt created films of the dancers performing the same sequence of motions that they perform live on stage. He filmed them on top of a grid to reinforce the structure within the choreography. The film is projected onto a scrim at the front of the stage during the performance and it's synchronized to a recorded version of Glass' score. At times the projected image is enlarged and at times it is slowed down as the film echos the movements of the live performance. Glass's music for Dance features his signature style of repeating and transforming brief passages. The foundation of Dance is Lucinda Childs choreography which she has referred to as stripped down ballet. In the first and strongest movement, the dancers move along straight lines from left to right and right to left across the stage. As they quickly follow the line in a mix of running, skipping, and turning, they move through a series of tilts. The perception is they are moving through every permutation within the grammar of movements created for the dance. Like 10 PRINT, the sound and motion are hypnotic and emphasize the details of the variation rather than larger global structural changes. Unlike 10 PRINT, Dance works across multiple media to synthesize a powerful and at times overwhelming aesthetic experience.
//
[NOTE: The text that follows below is rough, but I'm posted it so you (Mark M. and Nick M.) know what I'm thinking about and what might (or might not) follow. Casey]
In addition to repetition, process is essential to 10 PRINT. A process-based work of art is the result of following the instructions and typically the art focuses on the process itself, rather than a result. It's about the aesthetics of the process rather than visual aesthetics. Like 10 PRINT, there are myriad example of artworks and music compositions that are based on a set of written instructions, either in English or in a specific notions for music or computer program. For example, Alan Kaprow's Work, a created in September 1969 instructs
Process and repetition are often intertwined.
Another frequently used term that applies to 10 PRINT is “generative”. By generative art, we mean a work that is derived from a fixed system. The most cited definition for generative art was written by Philip Galanter. It's a general definition that intentionally embraces works created with traditional media and new technologies:
Generative art refers to any art practice where the artist creates a process, such as a set of natural language rules, a computer program, a machine, or other mechanism, which is then set to motion with some degree of autonomy contributing to or resulting in a complete work of art.
[MORE]
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 famous computer scientist Edsgar W. Dijkstra, one which was headlined "Go To Statement Considered Harmful" (EWD215). Although the title was actually written by the editor -- Dijkstra called 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 a condition that is always true so that the loop would always repeat. For instance, if Commodore 64 BASIC had a DO ... WHILE statement and a keyword TRUE, one could 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. When the creators of BASIC introduced a new version, True BASIC, in 1988, they included the "DO" loop; its syntax was a bit different from the above, but the essential construct was the same.
Although this important construct is missing from early versions of BASIC, 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 when programmers are not able to track and understand the values of variables. But 10 PRINT has no variables, so this particular problem with GOTO is not an issue.
The equivalent of a GOTO statement is a staple of machine language programming; it is the unconditional branch, 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 for programmers to think more flexibly and powerfully. Although Dijkstra objected to the way BASIC was designed, he, like the original designers of BASIC, worked strenuously to describe how high-level languages, useful for thinking about computation, could work 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 that uses a FOR loop instead of GOTO:
10 FOR A=1 TO 2 STEP 0 : PRINT CHR$(205.5+RND(1)); : NEXT
This one is slightly longer and exceeds the 40 characters of a physical line but still a "one-liner" in the sense that it fits into the 80 character logical line.
In this version, the "10" at the beginning is optional. The three statements can be entered together in immediate mode, just as one can type PRINT "HELLO" and have the PRINT statement executed immediately:
FOR A=1 TO 2 STEP 0 : PRINT CHR$(205.5+RND(1)); : NEXT
The only reason the line number is needed in the original program is as a point to branch back to. As GOTO goes, so goes the line number.
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. 10 PRINT clearly repeats. There is nothing in the code, however, to indicate that 10 PRINT is an example of iteration in the more mathematical or computational sense. 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 straightforward computing 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 horizontal 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 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.
