There is a continuing controversy over whether or not digital media designers should know how to program. As someone who learned to program a long time ago but does not actively program, I have taken the position that if everyone only designed what they could personally program we would have much lamer artifacts. For one thing we would not have anything designed by Steve Jobs who worked with the most skilled computer wizards but did not feel the need to code himself.
But this does not mean that designers should not understand the computational underpinnings of digital artifacts. What then should they know? I devote several chapters to answering that question, but I had to explain it again today to a student who had (presumably) read all those chapters but was still confused about whether she should be expected to debug Flash ActionScript on demand as part of a job interview. The answer was no — not unless she wanted a job that required Flash programming (which may unfortunately soon be obsolete .
What should she know instead? Key concepts of computational architecture like these:
- Information abstraction: Is data separate from proprietary code and stored in a standardized format (i.e. in an XML file or a SQL data base rather than in Flash)? It is semantically segmented so it can be accessed at multiple granularities?
- Modularity: Is the display of the program separate from the data and from any other complex calculations? Will the owners be able to display it on multiple platforms or move it when the current platform becomes obsolete?
- Encapsulation: Are the computational structures embedded within one another like Russian dolls, so that you don’t have to recode every layer when you make a change to one of them? Can you reuse the same routines, and especially can you reuse routines for common functions (e.g. draw a tree diagram) by drawing on other people’s functions (like a Java library)?
Understanding these concepts are much more important for designers than learning the syntax of any particular programming environment.
Of course in an ideal world every designer would be Bill Atkinson, a wizard at coding and leader of Macintosh design teams. And — here on earth — I believe that every designer should learn enough programming to be able to understand concepts like the following well enough to use them in pseudocode descriptions of processes:
- a loop
- a conditional statement
- a variable
- an attribute/value pair
- an object class and an instance of that class
But even expert programmers, especially the self-taught ones, can be ignorant of the key architectural principles that make for good design: information abstraction, modularity, and encapsulation. So I would encourage any designer with a desire to learn programming to become as expert as they can at it because it will help them to think procedurally and to understand the plasticity of the medium. But I’d also remind them that it is the principles of computational architecture that will last them over their career, not the coding.