Creative coding is not programming—it is thinking through code. In this course, students explore p5.js as a tool for generating form, developing graphics and tools that open new possibilities in algorithmic and generative design.
Beyond making images, students learn to build tools—systems that generate, iterate, transform. The course introduces parametric and generative design as extensions of graphic design practice, where code becomes a creative partner.

.gif)


















.gif)


















.gif)


















.gif)

















Through exploration of basic functions, students discover the potential of algorithmic thinking. The result is a body of work—graphics, tools, experiments—that expands the boundaries of what graphic design can be.
































































































In the Graphic Design department at the Academy of Fine Arts and Design, Strahinja Jovanović developed and taught a course on creative computation. The premise was simple: code is not only a technical tool but a creative medium. It can be used to think, to explore, to generate forms that would be impossible to create by hand. The goal of the course was to introduce students to this way of working, to show them what becomes possible when design meets code.
The primary tool was p5.js, a JavaScript library designed for creative coding. p5.js lowers the barrier to entry, making it possible for designers without extensive programming backgrounds to experiment, to build, to create. Students learned the basics—variables, loops, functions—but the emphasis was not on syntax; it was on possibility. What can you make when you let code generate form? How does thinking algorithmically change what you can imagine?
The course was structured as an exploration. Students moved from simple exercises—drawing shapes, creating patterns—to more complex projects: interactive graphics, generative tools, parametric systems. Each project asked them to think not only about the final image but about the process that produced it. The code became a sketchbook, a record of decisions, a way of capturing the logic of form.
The results were diverse. Some students created intricate generative patterns, their forms emerging from simple rules. Others built tools—interfaces that allowed users to generate their own graphics, to explore parameters, to become co-creators. Still others used code to produce animations, data visualizations, experiments in algorithmic typography. The common thread was a new relationship to design: not as the manipulation of pre-existing elements, but as the construction of systems that generate form.
For Strahinja, teaching the course was an opportunity to share the methods and approaches he had developed in his own practice. His work across projects like Orthoments, Neue Modulo, and Mooresque had been shaped by an engagement with code, with modular systems, with generative processes. The course allowed him to pass these approaches on, to help a new generation of designers discover what becomes possible when they learn to think with code.
The course also reflected a broader shift in design education. Graphic design is no longer only about the page, the poster, the print. It increasingly involves interaction, responsiveness, generation. The designer's role is not only to create static forms but to build systems that produce forms, to design processes as well as products. Creative computation teaches these skills, preparing students for a design landscape that is increasingly algorithmic.
In the end, the Creative Computation course was about opening doors. It showed students that code is not something to be afraid of, not a technical obstacle, but a creative resource—a way of thinking, a medium for exploration, a tool for making things that could not exist otherwise. The graphics and tools they created were proof of what becomes possible when design meets code.