Creative Programming: Biblically Accurate Angels & the Virus
April 24th, 2024
As a designer seeking to learn and apply the latest and best-established modern tools for realizing technology, I have a natural inclination to explore coding and software development as a means of creating high-quality, long-lasting and accessible work. For my two design Challenges, using Processing with Java to code for visual and animated outputs, I had the intention to properly learn and explore the functionality and applications of Java in a creative way- which differed from my previous knowledge and experience with Python for data analysis. The first design challenge was to create a poster with beautiful and meaningful visual output in a way that demonstrated organized and complex code. The second challenge was to develop an interactive demo making use of object-oriented programming that was also engaging, elegant and visually pleasing. As a novice to programming, but an experienced artist, my goal with these challenges was to lean into what the course had already taught me and explore how these functions could be manipulated and expanded upon such that I would gain a more intimate knowledge of Java itself. This approach was very contrary to my natural urge to plan and premeditate all work before doing it, but was crucial for allowing me to learn and iterate as I designed.
During the first coding challenge, I started with a vague idea of what I wanted to code, and thought I could with the knowledge available to me, and set out on building functions slowly and deeply. I would start with an intended purpose and then seek to manipulate the code to adapt the output, inspiring the direction I wanted to take my design until I had more specific goals for what my code would do. With the conceptual groundwork having been laid from my exploration, I was able to commit myself to logically working out approaches to achieve the output I wanted, such as generating random points on the screen that were not too close to each other. In this way, I felt as though I had found a strong intersection between creative thinking practices such as being able to look for inspiration through experimentation, and the development of technical ability through exploring the applications of code and later refining those applications for a specific purpose. As a design method, this explorational approach was very satisfying as I felt I had struck a good balance between efficiency and qualitative output, not getting myself hung up on realizing one specific idea or follow a set path.
With the confidence of having gotten-to-know the program, my goal for the second challenge was to approach with a similar explorational approach, focusing on exploring existing projects, libraries and applications for Processing for current designers. However, I found myself struggling significantly on this project for several reasons that were provoked by my interest to be as efficient as possible with my design process. Object-oriented programming is an excellent way for designers and programmers to build code that is conducive to the way humans perceive distinct “objects” and their interactions. However, an understanding of the various logical layers involved in these systems is crucial to knowing what is possible for their interaction. For example, when taking input for the characteristics of a cake, flavor cannot be changed once it has been baked, meaning one should consider the requirements for this input before it is baked. Due to a less developed understanding of object-oriented programming, and not having spent time experimenting with the style of coding, I only considered what factors I wanted to influence the “flavor of my cake,” without understanding when in the cake-building process flavor was decided. This concept does not only apply to coding, but any type of realization. We often perceive function to be one step, without looking at the various components that combine to serve that function. The challenge designers face is to deconstruct how they think something works in order to discern how it truly works. Thus, I spent a lot of my time reworking functions I had written to achieve a certain outcome such that they would work in a cohesive way with the other functions. This challenged me to consider very conceptually different approaches to achieving the same outcome in a way that expanded my mental flexibility. The confidence and creative mindset to problem-solve in the face of a “confusing mess” is something I strive to carry forth with me as a designer, knowing with certainty that design work is about bridging the gap between what can be illogical or vague concepts, and their feasible realizations.
Coming away from these two challenges, I still strive to approach designing with an explorative and open mindset. However, I have come to respect the importance of getting to know the purpose, use and context of the tools I am working with before trying to design with them. While efficiency is necessary for working professionally, investment into proper prep work before designing allows for a controlled process that allows one to approach design and produce more skilfully.