RubyConf 2021

Whimsy: Art, Beats & Code

Whimsy: Art, Beats & Code

by Rachel Green

The video titled "Whimsy: Art, Beats & Code" features Rachel Green, a senior software engineer, presenting at RubyConf 2021. The main theme revolves around the joys and creative potential of coding beyond its mundane applications, advocating for a more imaginative approach to programming and problem-solving. Green discusses how developers often find themselves focused on automating routine tasks, but urges the audience to embrace broader creativity in their work.

Key Points:

- Coding as a Passion: Green expresses the thrill of envisioning and executing ideas through coding, emphasizing that coding is an exhilarating experience regardless of the complexity of the task.

- Routine Automation: Most developer work typically involves automating routine tasks, especially those involving math, allowing more time for creative endeavors. However, this can narrow perspectives on coding and problem-solving.

- The Importance of Imagination: She encourages developers to expand their imagination, proposing that coding can be used not just for automation, but for creating innovative processes that defy existing constraints.

- Procedural Generation: Green introduces procedural generation in programming, using the example of the JavaScript package "fish draw" which generates detailed fish drawings. This method allows developers to create art and visualize concepts in new ways.

- Generative Art and Code Art: Recent developments in generative art reveal how coders can create stunning visuals using algorithms, exemplified by projects like Gym Chunky PNG for pixel art.

- Music Creation with Code: Green highlights coding's role in music creation, referencing applications such as Ludotune and Sonic Pi that let users compose music interactively through programming.

- Exploration Beyond Routine Tasks: While automation is essential, she urges audience members to take time for exploratory creativity—encouraging ideas just waiting to be discovered, even in brief moments of downtime.

In conclusion, Green's talk inspires an imaginative perspective on coding and problem-solving, urging programmers to envision innovative possibilities when using their skills, which not only enhances personal projects but also enriches the broader creative landscape.

00:00:02.240 Hi, my name is Rachel Green, and I'm a senior software engineer at Home based in Houston, Texas. I'm really excited to be speaking with all of you. Like many of you, I've had the opportunity to use a variety of programming languages, frameworks, platforms, and methodologies over the course of my career.
00:00:11.280 But no matter what tool I'm using, I always come back to the same thing: coding is really amazing. There's something thrilling about being able to envision something in your mind and direct a computer to do it, then seeing it actually happen. It doesn't matter whether you're talking about something as fundamental as printing 'Hello, World!' on the command line or something as complex as retrieving a list of the top-rated Cajun restaurants around Houston and getting directions to the closest one while avoiding toll roads, construction work, and car accidents.
00:00:26.320 There's just something exhilarating about being able to imagine an app, script, or program that does something, building it, and seeing it actually work. As professionals, a lot of our day-to-day work as developers tends to revolve around automating routine tasks, especially if those tasks involve math and arithmetic. It's not that humans are bad at those things; we are, after all, the ones who invented the tasks that we're automating. It's just that computers can be a lot faster and more accurate at performing these tasks. By automating routine tasks, we free up time to focus on other things that may require a more human touch.
00:01:01.120 However, since most of our professional work revolves around designing and developing systems to automate tasks, it can be easy to start viewing coding and problem-solving in general only through that lens. You know the saying: if all you have is a hammer, everything starts to look like a nail. Well, we have Ruby, and it's all too easy for everything to start to look like a Rails app or a Rake task. This perspective on coding and problem-solving isn't just limited to our day-to-day jobs as developers; it can also influence the types of side projects we pursue or encourage others to engage with in the community. This mindset can even affect how we think about effectively teaching others how to code.
00:01:48.000 If we're not careful, we may begin to view software development and problem-solving merely as a way of organizing everything conceptually into systems and optimizing them to run faster and more efficiently. Now, while that's not a bad thing, coding is, as I mentioned, pretty amazing. We can build almost anything we can imagine—within the confines of the laws of physics, of course. So, why not give ourselves the space to envision more? Sure, we can automate processes, but we can also envision new processes that work fundamentally differently. We can reject the old rules and constraints and imagine creations that seem to lie outside the bounds of traditional systems altogether.
00:02:51.040 What happens when we give ourselves the space to imagine? Well, it could be anything. Allowing our imaginations to roam can lead to some mind-blowing ideas, particularly in the realm of visual art. A lot of research has been conducted over the past decades to explore how mathematics plays a significant role in understanding why we find certain images visually pleasing, and how new ones can trigger that same effect. Coding, as a way of automating mathematical calculations, is well-suited to delve deeper into this topic and even discover new ways to create pleasing images.
00:04:15.200 Take, for instance, the JavaScript package Fish Draw, which uses procedural generation to create detailed drawings of fish. Yes, you heard that correctly—a JavaScript package that generates detailed drawings of fish! To provide a bit of context, procedural generation is a programming technique focused on developing algorithms to create new variations of a particular thing. This approach is often discussed in the context of game development, where procedural generation is used to create everything from background art and music to non-playable characters and even entire game levels. Essentially, anything you can conceptualize as code can be procedurally generated; you just need to craft an algorithm that encapsulates the rules and constraints of your generation process.
00:05:11.280 One day, Ling Donghuang, the author of Fish Draw, decided to apply procedural generation specifically to fish drawings, and I think the outcome is fantastic! Admittedly, it’s a bit random, but it’s great nonetheless. I mean, you’ve seen the animation; how could you not be mesmerized watching that creation unfold? Moreover, this is just the tip of the iceberg or perhaps just the surface of the pond. Numerous examples and projects make use of procedural generation to create a plethora of images. Beyond that, the field of generative art, or code art, has emerged as coders have developed all kinds of innovative ways to create art using code.
00:06:16.160 For instance, there's the gem chunky PNG, which allows creators to generate pixel art, or you might encounter a CodePen showcasing a synchronized dance routine gone awry. Now, speaking of dance routines, we can also use coding to explore and create music in groundbreaking ways. In a moment, I'll play a short clip from Ludotune, a music sequencing app created by Dylan Turner. In this app, users can assign various tones to cubes and then arrange those cubes in a specific sequence. When the play button is pressed, you can see a visual sequence accompanied by music. Another similar project is Sonic Pi, which is an open-source Ruby project that is one of, if not the most popular library for creating music through code.
00:07:21.840 Additionally, we see Sonic Pi utilized in a new kind of performance art known as algorithms, where a programmer actually programs a synthesizer in real-time as the composition plays. Given the connections between music and signal processing, many coding projects leverage electrical engineering concepts. For example, Sonic Pi can be used to create fun starter projects using Raspberry Pi, such as building your own piano with conductive ink and paper. We are also witnessing the emergence of AI projects focused on automated music generation that can start with a certain sequence, a desired key, instrument, or even nothing at all.
00:09:10.240 Furthermore, there's been a significant surge of creativity with software programs designed to augment and generate music and art in various formats. Take mashups, for example, which blend original songs seamlessly into a new piece using diverse musical software tools. Adobe has also recently announced a web app version of Photoshop that incorporates numerous visual effects options. Different home construction and interior design companies are launching apps utilizing virtual reality and augmented reality technology to allow users to visualize changes they want to implement. For instance, that shade of burgundy for the wall paint could look fantastic with the furniture.
00:10:01.279 This evolving landscape even influences how we teach others to code. Who can forget our very own whimsical guide to Ruby? It's been a captivating introduction not just to Ruby itself, but to programming in general.
00:10:04.600 I say all of this to emphasize that there's a whole world out there waiting to be explored and created. Finding ways to automate routine tasks is useful—indeed, in some cases, it is necessary—but why stop there? The next time you find yourself waiting for a pull request review or with five minutes to spare before a zoom call, consider fixing yourself a cup of coffee or tea and let your mind wander. You might just surprise yourself with what you come up with. Thank you.