This class is an intermediate level programming course. A beginner to intermediate level understanding of core programming concepts (ideally in JavaScript) is required. While a background in music can certainly be beneficial, it is not required for success in this course. Ultimately, this means you need to understand what code is, a special language that can be used to get the computer to do all the myriad things a computer can do. Like writing a recipe or casting a spell, the code we write are instructions for the “magic” we want the computer to generate. In our case, we’ll be writing in JavaScript, the defacto programming language of the Internet. If you’re familiar with other programming languages (like C++, Python, Java, etc) then you’re likely already familiar with all the core concepts and will just need to get used to JavaScript’s syntax and eccentricities. We’ll be reviewing these in week 1, but for a much deeper dive I highly recommend the book Eloquent Javascript by Marijn Haverbeke (the entirety of which is available online for free).
Of course, today we have generative AI, LLM-powered chatbots that can help us write and debug code (which we'll use), and on the software side we have DAWs (apps like Ableton or FL Studio) that let us shape sound without even having to code at all. Those tools are useful, but can undermine the point of this class, our goal isn't to create digital music the easist/quickest way possible, it's to to unlock the creative possibilities that come from understanding the computer as a creative medium itself. Music software limit us to the buttons and menus their designers imagined. By learning the fundamentals of sound/music programming, we open ourselves to a much larger range of creative possibilities: we gain the ability to design our own instruments, invent new ways of playing, and shape sound in ways no off-the-shelf program can. And while we'll be leveraging AI throughout this course (see AI Policy) this won't be about "vibe coding" our way to a result, but about developing the literacy to understand and mold code so our ideas can grow from it. The goal is not just to make music with a computer, but to explore what music can be when the computer itself becomes our medium.