Regularity

From Maze

Revision as of 00:27, 1 August 2011 by MarkMarino (Talk | contribs) (→Textiles: more infor from zamenek)
Jump to: navigation, search

Contents

[hide]

The single line of BASIC code we are considering proves to be both deceptively simple -- repeating a single statement again and again -- and something that builds, as it repeats, what seems to be an unending maze. The program repeats elements an the spatial order of the screen grid; it keeps a steady pace of repeated output; and it is written as an infinite loop, executing repeatedly without limit.

The ways in which 10 PRINT repeats are connected to two major types of artistic tradition and to the flow of control in computer programs. The first tradition of art is seem in the world of craft, particularly pattern-based crafts such as needlework and ornamental design. The second is a movement within the fine arts in the twentieth century to create complex patterns out of repeated procedures upon very basic units. In this way, the aesthetic of 10 PRINT parallels experiments in painting, sculpture, sound composition, video art, performance, experimental animation, and dance, much of which was seen in the decade immediately prior to 10 PRNT. In both cases, the success of these art forms is due to factors that make 10 PRINT compelling: a continual repetition of a simple rhythmic procedure or rule across a regular space or time signature creating a complex and stimulating gestalt. The other perspective on regularity that 10 PRINT employs is the perspective from computer programming, which allows a formal definition of a repeating process that a computer can carry out.

The Grid: Repetition in Space

In his classic yet provocative text, E.H. Gombrich wrestles with the tensions between repetition and redundancy that can lead to either stimulation or boredom. As he reflects on pavement designs he notes the pleasure in the encountering the pavement whose pattern one cannot fully grasp. Gombrich explains this desire for new information through information theory emerging at the time, where information increases in tandem with unpredictability (9). He goes on to speculate that the viewer examines patterns by trying to anticipate what comes next. “Delight,” he writes, “lies somewhere between boredom and confusion” (9). 10 PRINT no doubt offers similar delights, resulting from its creation of a complex pattern from a simple random alternation. As Gombrich later argues, the greatest novelty computers bring to visual design and variation is not only its ability “to follow any complex rule of organization but also to introduce an exactly calculated dose of randomness” (94). Computers then become entrancing pattern weavers.

Patterns are deeply tied to a process of repetition. This notion is most clearly demonstrated in Gombrich’s commentary on “the hierarchical principle” by which units are “grouped to form larger units, which in turn can easily fit together into larger wholes” (8), or a Gestalt. The sum of the pattern then is the result of a process. This relationship between pattern, perceived whole, and process becomes clear in is discussion of paving, and various methods for selecting stones. By extension, visual design involves the process of repeating patterns across space, even if these patterns are not drawn as individual units.

The grid provides a 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. (Notably, Broadway breaks this grid in ways that form many of the city's 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. The essential process of 10 PRINT is linear, a one-dimensional stream of diagonal lines that either flows quickly down the left side (if the semicolon is omitted) or moves right to wrap around to the next position below the current line and to the left. The visual interest of this program comes from wrapping this one-dimensional stream of tiles into the two-dimensional grid.

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 the diagonal icon in 10 PRINT as a square tile, a physical tile that can be rotated and placed next to other tiles. Now instead of the simple black line dividing the square into two triangles, imagine that one of those triangles is black, the other 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 ..., [Method for Making an Infinity of Different Designs ...] 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 observed in 1987 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. The four possible orientations of any given tile are then reduced to two. Smith does this trick with the random array of Truchet tiles pictured above:

These modified Truchet tiles generate a design that, of course, looks unmistakably like the output of 10 PRINT, a program published a half decade before the article. 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. Rather than celebrating that 10 PRINT "scooped" Smith, it seems appropriate to note that there are several ways up the mountain -- or into the maze -- of this particular random and regular pattern; one was discovered at Commodore, another by taking a mathematical perspective on tiling patterns and their aesthetics.

Textiles

The experiments of Truchet and Douat did not introduce the idea of creating patterns out of simple variations on shapes. Such practice is commonplace across many forms of design, particularly in the realm of ornament. Franz Boas documented compelling examples of theme and variation from Peruvian weavers, for example (cited in Gombrich 72). In fact, the decorative arts has long held this secret to 10 PRINT.

Consider the example of this lesson in stitchcraft taken from The Young Ladies’ journal Complete guide to the work-table.

Ppg256_marino_graphic_3.png
642 × 378 pixels

The patterns offer a grid, a repeated pattern, and a complex emergent whole. [Footnote “The ppg256 Perl Primer”] Similarly, the patterns are created through a repeated process, as in this example of the “Square Pattern” from the same source.

For this pattern:

1st Row: Work one plain row.

2nd Row: One ordinary stitch, and twist the thread twice round for the large square.

Repeat to the end of the row. The first and second row are repeated alternately. (126)

These examples demonstrate that while the systematic theorization of patterns such as 10 PRINT may emerge periodically, the production of those patterns are deeply woven in the traditions of decorative craft. The parallels of process and pattern place programming in the realm of techne, artistic craft, here one conveyed through the imitation of a set of instructions collected as a technique.

Having seen 10 PRINT's pattern in tiles, it is worthwhile to look for it in textiles and to particularly consider the early tool for producing regular patterns in textiles, the Jacuard Loom. Prior to that loom, circa 2nd Century BCE, China gave birth to a loom “that made it possible to create a pattern in fabric...called a drawloom because [it] allowed the warp threads to be drawn up individually to create the design to be woven" (10). However, that loom was irregular, "the arrangement of the individual warp threads was different for every single row of weaving" (10). By contrast, the loom designed by Joseph-Marie Jacquard, was regular and programmable (12). Such a machine relied on an exacting degree of regularity. Of course, much has been made of the Jacquard Loom as the prototypical computer, for example James Essinger's book Jacquard's Web: How a Hand-Loom Led to the Birth of the Information Age. The core similarity in these early accounts were the punchcards, which were automatically applied to the control system, which served as patterns for the loom to follow. Earlier punchcard looms have been discovered and attributed to J.B. Falcon and B. Bouchon and Vaucanson, whose invention of a mechanical duck is a bit more widely know (Zamenek 16). According to Essinger, Falcon's punch cards were "clumsily made and unreliable" (36). Jacquard's punchcards were regular and size in shape, the same shape as the currency of his time as well as the punchcards used to program in the 1970s (Zamenek 16). At the same time, the loom itself had to be made regular in order for the punch cards to fit the pattern. Once the loom was standardized the designs could be planned out on graph paper.

Commercial-grade textiles required up to 4000 cards strung together -- a far cry from the two statements on the one line of 10 PRINT. The cards were applied to a bar, an "elongated cube," full of "hundreds of identical holes...to accommodate the tips of needles," which will be raised according to the selections on the punchcard. As the bar turns with each pick of the shuttle, it moves down the material as if moving down a computer screen. Regularity made possible the Jacquard Loom's ability to draw its intricate patterns. But the use of the cards as a pure pattern, and the inability to regulate the flow of control, meant that patterns had to be defined exhaustively rather than through concise programs. (IS THIS LAST SENTENCE THAT I WROTE TRUE? IF NOT, WHY 4000 CARDS? -NM)

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.

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. Paul Klee, a Bauhaus professor and highly influential artist of his time (1879–1940) produced works in the 1920s which seemed to resume Truchet’s and Douat’s experiments. 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. Given that this is 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 ??). So, just as a mathematician independently described the output of 10 PRINT in 1987, a team of artists working in Paris produced the fundamental algorithm for 10 PRINT in 1959 -- twenty-three years prior to the printing of the Commodore 64 Users Guide.

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.

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. Later, the more widespread Apple II could also be connected to a television if one used an inexpensive RF modulator, purchased separately. (An RF modulator was left off the Apple II as a workaround; the FCC would not approve the computer, which produced too much interference, with that component integrated into it.) The Apple provided was the main precedent in home computing -- other early home computers such as the TRS-80 Model II and Commodore PET had built-in monitors -- 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 of using a TV as a monitor.

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 64, 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 computer display did not begin there: It has a heritage that included at least two output methods, ones that seem unusual today.

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.) 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.

Rhythm: Repetition in Time

While 10 PRINT could not be possible without the regularity of space, it also would be wholly other without regularity of time and process. The program is just as much the product of ordered isometric shapes across a grid as it is the repeated placement of those shapes. Gombrich notes that “Everything...points to the fact that temporal and spatial orders converge in our experience. No wonder language speaks of patterns in time and of rhythms in space” (10). He continues to examine simple mechanical temporal rhythms from the pendulum swing to the turn of the cog. As a bridging example between spatiality and temporality, he notes the way a regular configuration of stairs in a staircase in height and depth lead to a regular climb up the steps.

As Gombrich develops the notion of temporal repetition and regularity, he quickly transitions into discussions of process. Whether a ticking clock or a person climbing the stairs, the temporal regularity is the result of a repeated process. Gombrich then moves to a discussion of work, by referencing K. Bucher’s Work and Rhythm, which insists “on the need for timed movement in the execution of joint tasks,” for example workers loading bricks onto wheel barrows (10). The ticking clock does more than set the hours of labor on the factory floor, it epitomizes the regular movement of the workers. Gombrich continues, “And here again it is not only the simultaneous movement that is ensured by rigid timing. Even more important is the possibility inherent in any order of constructing a hierarchy of movements or routines to ensure the performance of more complex tasks” (10). This formulation suggests the relationship between regulated time and instruction, hierarchies of movements and routines, which speak just as easily to Taylorist models of production as programming. While a full investigation of those connections lay outside the aim of this book, it is important to note the fundamental role of processed instructions in producing rhythms in time and space.

Process and the appearance of motion are essential to 10 PRINT. The still images that show a moment in the program's run, the sort that are reproduced in this book, document the program to some extent but are an incomplete representation. A full understanding of the program comes only through experiencing the pattern building one unit at a time and the surprise of the unexpected sequences and connections that form into a maze as the left or right line are randomly drawn.

Sculpture

The visual arts at their most traditional, represented by frescos, stone and bronze sculptures, and canvases, are static. A viewer creates motion by moving around a work, eyes exploring 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) photographers (Étienne-Jules Marey, Eadweard Muybridge) and 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.

Music

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. The concept is the same as in Reich's later and simpler piece, Clapping Music (1972), which is clapped by two performers and essentially varies only in rhythm. In 10 PRINT, new forms emerge from the programs decision to display the left or right line, but in Piano Phase and Clapping Music, new sonic forms emerge by playing the same sequence over and over, but with one performer playing at a different speed.

Performance

Step Piece by Vito Acconci is another performance work based on repetition that is interesting to compare and contrast with 10 PRINT; it is a defined, repetitive procedure that is carried out by a person rather than a computer. Acconci defined this work in 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.

Step Piece is certainly meant to be the same every morning in particular ways. But it was not the same at every point for a viewer or for Acconci, and will not be the same at every point for someone considering the piece today. How is repeating the same thing over and over not repetitive? A person's repetitive performance cannot be exactly the same each time. Acconci no doubt stepped more rapidly at some times and then needed to slow down; his foot struck the stool in a slightly different way, producing a different sound. There is no close analogue to this in 10 PRINT, since a Commodore 64 runs the program the same way each time and the symbols are presented in the same way on a well-functioning television. The photographic documentation of Step Piece shows Acconci in action with one foot on the stool and the other on the way up or down. Just as different screen captures from 10 PRINT are different, each photo is different -- they differ even more in some large-scale ways since they are images of the same person in different postures, not a 40x25 grid with different elements in it.

Additionally, as the days pass, Acconci gets better at his repetitions (like a weightlifter doing "reps" to improve strength) while 10 PRINT writes characters to the screen at the same rhythm and in the same manner as long as the program runs. Some computer programs do actually improve over time -- e.g., because they cache frequent operations or use machine learning to classify inputs better. However, a one-line program like 10 PRINT is an exemplar of the legacy of computers as basic calculating machines that do the same thing with symbols each time they are run. Finally, the repetition does not have the same effect on the viewer because the context of life changes from day. Thus, repetitive motion may elicit different thoughts at different times.

So, these are four ways that Step Piece changes through its repetition: (1) human performance changes in subtle ways from repetition to repetition, (2) documentation shows different, non-repetitive moments, (3) human performance improves over time, and (4) the work is perceived in different contexts, even by the same viewer. Step Piece is exemplary here because it seems to be the more or less pure repetition of pure repetition, but actors putting on the same play on different nights encounter a similar type of non-repeating repetition and all of these four points also apply to the case of plays that run for several performances. Even though 10 PRINT is a performance by a digital machine, (2) and (4) still apply, so that its repetition also varies.

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's 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. As with 10 PRINT, the sound and motion are hypnotic and emphasize the details of the variation rather than larger global structural changes. Dance, however, is unlike 10 PRINT in that it works across multiple media to synthesize a powerful and at times overwhelming aesthetic experience.

The Loop: Repetition in Process

The execution of a computer program, even one that is riddled with bugs or does numerous complex and interesting things, is nothing if not regular. Part of what gives programs their power is that they can be even more regular by repeating a sequence of instructions. This repetition can be accomplished in two main ways: in a loop that continues for a certain number of iterations or in an unbounded loop. These two loops correspond to two types of branching, the conditional and unconditional branch. Understanding the unbounded loop of 10 PRINT (and what it is not) provides an introduction to the essential aspects of the flow of control in computer programs.

To explain the loop, it's necessary to first explain the alternative: Not having a loop and letting a program progress in the usual sequence. 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. The branch or jump is the key operation that is used to build a loop.

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 in this particular case.

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.

Much of Dijkstra's influential thinking (about stepwise programming, for instance) applies most clearly to programs of some complexity. It would be difficult to develop a program as simple as 10 PRINT using stepwise programming, since it only takes about one step to write it. As mentioned, 10 PRINT is in a sense exempt from Dijkstra's critique of GOTO because of its lack of variables. But in another sense, it is one of many extremely simplified programs that could lead programmers to learn programming methods that don't scale. The risk of learning programming via one-liners is that one learns tricks and particular methods instead of gaining an understanding of programming methodologies.

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.

Looping and Interating

From the discussion so far, it should be clear that 10 PRINT has an unbounded loop. The unconditional branch at the end is what accomplishes this. 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. 10 PRINT exposes the power of using simple, iterative steps to create a complex construction.

Computing is full of iterations and simple loops. The highest level of an application program is typically the "main loop" that checks for user input and for other events. Turn-based games, such as a chess program that plays against a human player, will typically have a conditional loop for each turn, conditioned upon whether or not the game is over. And frames of a graphics window or the screen overall, whether they are being drawn in OpenGL, Processing, or by some other means, are drawn within a loop that repeats more or less rapidly depending upon the framework.

Generative Repetition

10 PRINT offers in its single line a sense of the generative potential of the rhythmic repetition of a very simple process, "Generative" in this context refers to work that is derived from a fixed system. The most cited definition for generative art was written by Philip Galanter:

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.

10 PRINT contains a promise similar to that of the constrained character poetry generators created by one of the authors of this book. In those programs, such as those in the ppg256 series (Montfort 2009), randomness and the repetition of a very small set of substrings plays out across a confined form to create poems. A larger scale version of this sublime potential can be found in the contemporary interest in procedurally generated video games, such as In a Star Filled Sky and Dwarf Fortress, games which spawn level after level, whole worlds within worlds, rather than draw it. Procedural generation with small simple repeated units does not evoke a sense of despair about the limitations of the human or the mechanical, but can celebrate the vast possibilities within a very concisely expressed program.

By showing such possibilities, one-line programs inspire the quest to discover or compose one-line programs, suggesting a different type of varied repetition: the repeated, serial composition of new code that plays with regularity and randomness.

Works Cited

Douat, Dominique, Methode pour faire une infinité de desseins differents avec des carreaux mipartis de deux couleurs par une ligne diagonale : ou observations du Pere Dominique Douat Religieux Carmes de la Province de Toulouse sur un memoire inséré dans l’Histoire de l’Académie Royale des Sciences de Paris l’année 1704, présenté par le Reverend Sebastien Truchet religieux du même ordre, Academicien honoraire, imprimé chez Jacques Quillau Imprimeur Juré de l’Université, Paris 1722. [PLEASE FIX]

Essinger, James. Jacquard’s Web: How a Hand-Loom Led to the Birth of the Information Age. Cary, NC, USA: Oxford University Press, 2004.

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

Gombrich, E.H. The Sense of Order: A Study in the Psychology of Decorative Art. 2nd ed. Phaidon Press, 1994. Print.

Harrison, E. The Young Ladies' Journal Complete Guide to the Work-Table. 1885.

Montfort, Nick. "Continuous Paper: The Early Materiality and Workings of Electronic Literature." Modern Language Association (MLA) Convention, Philadelphia, 28 December 2004.

Montfort, Nick. "The ppg256 Series of Minimal Poetry Generators," Digital Arts and Culture 2009, UC Irvine, 14 December 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