Chris Ford Curry On 2017 Interview

Free Beginner Workshop

From OO to Clojure Workshop!

Watch my free workshop to help you learn Clojure faster and shift your paradigm to functional.

Chris Ford will be giving a talk at Curry On 2017. His talk is called Computational Musicology, ????, Profit.

Follow him on his Homepage, GitHub and Twitter. How did you get into Functional Programming?

Chris Ford: I never consciously got into functional programming, because FP was the first paradigm I encountered. My university taught Haskell as a first semester introduction to the essence of computation. C came in second semester, which is where they introduced the practicalities of memory management and operating systems. What is your talk about?

CF: My talk is about using complexity theory to think about music. Music is all about patterns, and if we capture those patterns as code then it gives us a way to think about those patterns and to relate them to pattern thinking in other fields like mathematics and literature. I'll argue that this is a productive and creative way to appreciate music and art in general.

The specific concept I built the talk around is called Kolmogorov complexity. It's the deceptively simple idea that the inherent complexity of data can be defined as the length of the smallest program that can output that data. So data with very great repetition is not very complex, because a small program is sufficient to output it. As music is just a special kind of data, once we have a good format for it we can write programs that play music and compare the complexity of pieces of music by measuring those programs. Who is your talk for?

CF: My talk is for people who like making connections across academic disciplines: music, literature and mathematics. What do you hope people will take away from the talk?

CF: I hope that people will see that computational thinking is a useful tool for tackling all sorts of topics, including ones usually thought of as the humanities. There is a long history of academic division between the humanities and the sciences, and I think there is a lot to be gained from cross-disciplinary engagement. What concepts do you recommend people be familiar with to maximize their experience with the talk?

CF: I try to introduce the basics of anything I talk about, so anyone should feel free to come if they find the topic interesting. The interesting parts of this talk are in connections between different fields rather than going deep into any particular field, so no particular background is needed to appreciate it. What resources are available for people who want to study up before the talk?

CF: The first talk I gave on music and Clojure is Functional Composition, and that's a pretty good place to start if you want to learn about how to represent music theory as code. It's not a prerequisite for this talk, but it might give you more background. It goes into detail about how scale and sine waves work, and uses a Bach canon as an example. I have also applied similar principles to other musical traditions, for example African Polyphony and Polyrhythm.

To get started with music and complexity theory I recommend David Meredith's paper Music Analysis and Kolmogorov Complexity. Gregory Chaitin has a great popular mathematics book called Meta Math: The Quest for Omega, which goes into much greater depth than I will in this talk about complexity theory. Where can people follow you online?

CF: The best place to find out what I'm up to is Twitter - I'm @ctford. Are there any projects you'd like people to be aware of? How can people help out?

CF: If anyone wants to try out music programming themselves, I would recommend either Klangmeister, which uses Clojure to make music in the browser, or Sam Aaron's fantastic Sonic Pi, which runs on ordinary machines but notably on Raspberry Pi. To get further into music and Clojure I suggest checking out Overtone and Leipzig. Where do you see the state of functional programming in 10 years?

CF: I hope we'll be talking less about functional programming and more about the problems we're trying to solve. For me, functional programming is great because it gives me tools for managing complexity and therefore more time to spend thinking about the actual domain. Right now, we're still at a stage where we're exploring the basics, but I look forward to a time when FP is less a topic we discuss and more a tool we use without making too much of a fuss about it. If functional programming were a superhero, what superpower would it have?

CF: Invisibility - because the best programming fades into the background and lets us concentrate on the problem.