Why This Manual
While I was writing this manual, I often asked myself whether it would be useful. Especially after browsing the available literature on creative coding. There is a lot out there! Do we need another resource? John Maeda wrote Design By Numbers, a landmark text for designers interested in programming, back in 1999. I would assume that 18 years are enough to reconcile graphic designers with computer programming. And yet, when I look around, I still see that many designers reject the idea of writing code altogether. While some believe that programming is not their “concern,” some others are forced by the competition to cobble together a bit of Javascript without a proper introduction. In the first case, there is some simplistic contraposition between humanistic and scientific/technical subject: "I like to draw therefore I do not want to deal with any technicality." In the second case, the approach is way more pragmatic, but it could turn out in a nightmare. To customize and maintain something without extensive knowledge can be stressful. Design schools are often part of the problem, because coding appears too late into their curricula. It is not just a matter of teaching “how to properly instruct a machine,” but to invite students to solve design tasks exceeding the standard Photoshop/Illustrator/InDesign triptych: the best way to learn how to program is to program for a purpose. Luckily, in the last few years the situation improved also thanks to the widespread adoption of Processing and Javascript, but graphic designers have a long way to go before becoming generally comfortable with automating simple tasks.
Of course, manuals need to follow the development of new tools. The development environment presented in Design By Numbers is not maintained anymore, and technology has evolved quite a lot in these 18 years. There are no Python programming manuals written with a designer in mind. Furthermore, my favorite Python graphics module/application – DrawBot – comes with detailed API documentation but without an extensive introductory manual. This is why I thought it would be nice to merge that gap for my students and then share the result with the outer world.
Programming resources conceived for designers are mainly devoted to Processing or Javascript and its frameworks. During my studies, I discovered Python. It is the standard scripting language in font editing applications. And I am very passionate about it. I am convinced that is by far one of the best choices for a designer. Why? Here are some reasons:
- In Python, white space is semantic. The language interpreter requires a typographical structure helps writers and readers to organize blocks of code neatly.
- General purpose. Python was not designed for a specific application; instead it is a general-purpose language which can give you access to many different places: data analysis, Web and desktop applications, scientific and numeric computing, computer vision, images manipulation and so on.
- It has been around since the 90’s; therefore the amount of documentation and help available online is vast and well organized.
- It could be defined as a terminal language on steroids. This manual focuses on your machine. What can you achieve with your computer that cannot be done through a user interface? Believe me, a lot.
- Computer scientists were not the primary main users of Python’s development team. A democratic, yet beautiful, programming language. It allows anyone to write from simple to complex programs without a deep understanding of memory and hardware (differently from languages as C++).
Python can help you design and make books, illustrations, data visualizations, maps, animations, handle websites, prototype desktop or web apps, sort stuff, crunch numbers, dive into your hard drive, download data and more. What do you want to do with it?
Disclaimer: if you desire to learn the basic of web design and development, this is not the right manual for you. If that is the case, I advise an introductory manual to HTML and CSS. Then if you want to be able to manipulate HTML and CSS with some scripting, I believe you will need Javascript.