Printing Code is a graduate course taught at the Interactive Telecommunications Program at New York University. In this course students explore the use of computational techniques to produce physical prints, focusing on the intersection between graphic design and code. Class time will be divided between exploring design topics like colors, grids and typefaces, and applying these towards computational topics like randomization, repetition, transformation and generative form.
Weekly readings include relevant writings from the history of graphic design (Josef Muller-Brockmann, Paul Rand), articles from the history of computation (Vannevar Bush, Douglas Englebart) and everything in between (Sol Lewitt, Edward Tufte).
Weekly homework can be produced using the digital printers at NYU’s Advanced Media Studio, however students are encouraged to utilize whatever physical printing techniques they prefer, that being stencils, letter press, silk screen, weaving or home-made printers.
The class aims not only to teach the students how to create physical prints via code, but also to have something interesting to say about it. The class requires ICM or similar programming background.
All code examples and frameworks used in the class can be found on Github:
It’s important to use your hands, this is what distinguishes you from a cow or a computer operator - Paul Rand
For many years graphic design education has been a separate field. You learn about color, grids, form, scale, typography, and books on the subject are geared towards individuals with visual creativity. The opposite can be said about the field of programming that for a long time has been geared towards technically skilled people. During the last decade this line has obviously blurred, but not to the degree one would expect.
For someone who grew up as a part of the computer generation, this divide might seem problematic. My first experiments with color and form was also when learning HTML and CSS, so how do I know where design stops and programming begins? Graphic design and programming are so intermingled today that a term like Computational Design seems like a much better explanation of the two merging fields. Design is how it works, not just a last layer of make-up.
As I’ve grown more experienced as a graphic designer, it has become obvious that a great deal of this experience is built on a very systematic approach to design. Graphic design can at times seem like algorithms controlled by a creative vision. Grids are just basic measurements. Typography is spacing and curves. Color schemes are proportional spacings placed on the color spectrum. This class is about investigating what happens when we start creating graphic art only by writing code. It’s an experiment in replacing already exiting tools (that too long has dictated the visual look of computational design - hello drop shadow) with our own software programs. We will investigate graphic design systems, distill them into algorithms, and eventually let them spin out of control.
It’s important to note that this class is not so much about generative design, as it’s about graphic design through code. I see no value in splattering a shape 5000 times on a canvas, calling it generative art, just because we can. It’s about distilling already existing graphic design techniques into code, making valid and reasonable assumptions, and then - only then - letting things spin out of control.
Beauty is a function, after all, of any relevant visual message. Just as prose can be dull and straight-forward or well edited and lyrical, so too can a utilitarian object be designed to be more than just simply what it is.
Timothy Samara, Design Elements
In this class we’ll introduce ourselves, and talk a little bit about the class, graphic design and computation. Please read these texts before coming to the class.
Without aesthetic, design is either the humdrum repetition of familiar cliches or a wild scramble for novelty. Without the aesthetic, the computer is but a mindless speed machine, producing effects without substance. Form without relevant content, or content without meaningful form.
This week we’ll look at the most basic subject in the visual arts: manipulation of form. We’ll talk about techniques for creating form in Processing, look at examples from the history of graphic design, and introduce basic ways of using randomization and repetition.
In this class we’ll dive into color theory and look at color handling in Processing. We’ll talk about the history of color, the difference between RGB and HSB, and investigate how to generate color schemes in code.
To create a typeface that is easily malleable in the computational medium, the constituent shapes must be reduced to compact numerical forms.
This week we’ll look at typography. We’ll go through the basic unit measurement that make up a typeface, and how we can manipulate these in Processing.
A grid system is not just a set of rules to follow… but it’s also a set of rules to play off of–to break, even. Given the right grid – the right system of constraints – very good designers can create solutions that are both orderly and unexpected.
Khoi Vinh, New York Times
In this class we’ll look at grid systems and how to use them as guiding constraints for your designs. We’ll go through different types of grids, implement these in code, and see how it translates to the world of computational design.
To make a well-designed logo requires skills in form, color, type and grid. We’ll look at everything from traditional logos to organic, computational logos, and we’ll go through different techniques for making generative logos in Processing. This week’s assignment is a 1 week midterm project.
This week will be midterm presentations.
Randomization is about letting the computer choose for us. This week we’ll look at ways to create programs that create unique graphics. We’ll look at basic randomness, Perlin noise, and how a simple thing like randomness can help you create unexpected things.
Repetition is highly computational, still human beings have created patterns as long as we have known creative expression. In this class we’ll focus on the use of patterns in graphic design, and look at different repetition techniques and ways of creating custom patterns.
For next week write a Processing sketch that generates a pattern. The pattern should be a design proposal for the company Makerbot, and should be designed to be used for their wrapping paper. So you need to research the company, look at their identity, and come up with a design that reflects this. It doesn’t matter whether the pattern is periodic or aperiodic, but what does matter is that it’s dynamic. This means that I should be able to change global variables and see the pattern change the next time I run the sketch. Bring to class a printed poster of your pattern, and we’ll discuss the proposals.
Pick a real-world design problem that you will tackle for your final. This can be a full event poster, an album cover, a logo re-design, a full company identity or a book cover. It’s all up to you, and there are no constraints. Write a short blog post about your project, and come prepared to talk about it in class. Remember, you cannot change your final project once the blog post is written.
What happens to graphic files when we start to manipulate the pixels in code? Can we still preserve meaning while creating beauty with algorithms? This week we’ll look at different techniques for manipulating pixel arrays. We will look at examples of transformation in graphic design even before the computer, compare these to recent examples of transformation in graphic design products, and go through photo filter algorithms in Processing.
_From now on and until the end of the semester, we will be working on final projects.
Can a still image have movement? In this class we’ll experiment with animation and movement in graphic design. We’ll see what happens when we introduce physics in our graphic designs. Like a photograph is a snapshot of a moving world, so too can a printed graphic be a snapshot of a moving virtual world.
In the same way as motion can be used in the graphic arts, so too can 3D. Even though we are printing on paper, we can still simulate 3D in our code, twist and turn objects, and randomize the resulting print. We’ll look at recent developments in graphic design and 3D, including 3-dimensional typefaces and logos.
We will combine 2 classes into one long final class presentation. I will invite critics from the design, coding, and curating world, and you will each do a 6-8 minute presentation, followed by a short discussion.
These books might come in handy before, during or after the semester. You will not need to purchase or read these, but all of them are highly recommended reading.