In his open-access book on computation, David Evans says that “Computing changes how we think about problems and how we understand the world.”. It certainly has for me this week, but not in the way I expected. I was fascinated to see how computing and computational thinking have enabled research labs and enthusiasts to develop algorithms that compose music in the style of a given music genre.
Jeannette Wing, Professor of Computer Science at Columbia University, has consistently evangelized computational thinking as an essential skill across all domains – not just in the traditional way most people see computer programming.
Computational thinking is a way humans solve problems; it is not trying to get humans to think like computers. Computers are dull and boring; humans are clever and imaginative. We humans make computers exciting. Equipped with computing devices, we use our cleverness to tackle problems we would not dare take on before the age of computing and build systems with functionality limited only by our imaginations (Wing 2006).
The possibilities for interesting applications are astounding in an era where we can set algorithms loose on a challenges such as Musical Composition.
In this video, you can watch a video of a computer generating an improvised jazz track. Watch as the two melodies stream along, one a bass track and the other on guitar. But how would a computer know how to do that? In and of itself, it doesn’t. As Wing says, computers are dull, not imaginative in and of themselves. People empower computers to do imaginative things such as improvisational composition, and they often do so by solving for the program computationally both before and during the actual process using computational thinking.
In Google’s course on computational thinking for educators, they outline the process of problem solving computationally in more detail (Google 2017), however, check out an abbreviated bullet list for our purposes here below.
- Decomposition – Breaking down data, processes, or problems into smaller, manageable parts
- Pattern Recognition – Observing patterns, trends, and regularities in data
- Abstraction – Identifying the general principles that generate these patterns
- Algorithm Design – Developing the step by step instructions for solving this and similar problems
Following these steps, someone imaginative had to have gone through a process of using computational thinking to break down the problem, amass a collection of jazz music to analyze, and then develop a set of procedural syntax for the computer to look for principles and patterns within that music to know how and which ones to emulate in its own composition.
Another example would be these two videos from a “Flow Machines”, a research group developing algorithms for musical composition.
Check out this video for an AI generated melody in line with the Beatles
Or this video for harmonies steeped in the style of Bach:
In the case of the Beatles Video, musicians are collaborating with the Algorithms, adding the vocals to the AI’s melody. For the harmonies imitating Bach’s style of composition, the data is based off a database of sheet music. You can even try to guess the difference here. In any case, it’s been fascinating to see just how interesting problem solving in traditionally right-brained areas such as music with computational thinking.
David Evans, Introduction to Computing: Explorations in Language, Logic, and Machines. Oct. 2011 edition. CreateSpace Independent Publishing Platform; Creative Commons Open Access: http://computingbook.org/.
Jeannette Wing, “Computational Thinking.” Communications of the ACM 49, no. 3 (March 2006): 33–35.
Google. Computational Thinking for Educators – – Unit 1 – Introducing Computational Thinking. Retrieved October 22, 2017, from https://computationalthinkingcourse.withgoogle.com/unit