Live coders challenge CS to think about expression again

October 1, 2013 at 3:52 am 7 comments

Bret Victor’s great time traveling video emphasized that the 1960’s and 1970’s computer scientists were concerned with expression. How do you talk to a computer, and how should it help you express yourself? As I have complained previously, everything but C and C-like languages have disappeared from our undergraduate curriculum. Bret Victor has explored why we talked about expression in those earlier years. I have a different question: How do we get computer scientists to think about expression again?

Live coders think about and talk about expression, as evidenced from the conversations at Dagstuhl. They build their own languages and their own systems. They talk about the abstractions that they’re using (both musical and computational, like temporal recursion), how their languages support various sound generation techniques (e.g., unit generators, synthesized instruments, sampled sounds) and musical styles. If you look at the live coders on the Dagstuhl Seminar participant list, most of them are in music programs, not computer science. Why are the musicians more willing to explore expressive notations than the computer scientists?

Lisp is alive and well in live coding. I now have a half-dozen of these systems running on my laptop. Overtone is a wonderful system based in Clojure. (See here more on Overtone, and particularly powerful combined with quil for Processing visuals combined with music.) Andrew Sorensen’s Impromptu was in Scheme, as is his new environment Extempore.

Extempore is amazing. Take a look at this video of an installation called “Physics Playroom,” all controlled in Extempore. It’s a huge touch sensitive display that lets groups of students play with physics in real-time, e.g., exploring gravity systems on different planets. Andrew said that he could build 90% of this in Impromptu, but the low-level bits would have to be coded in C. He wasn’t happy with changing his expressive tools, so he created Extempore whose lowest level parts would be compiled (via LLVM) directly to machine code. Andrew went to this effort because he care a lot about the expressiveness of his tools. (At the opposite end from the Physics Playroom, see this video of Extempore running on ARM boards.)

Not everything is S-Expressions. Thor Magnusson’s Ixi Lang (more on the Ixi Lang project) is remarkable. I love how he explores the use of text programming as both a notation and a feedback mechanism. When he manipulates sequences of notes or percussion patterns, whatever line he defined the sequence on changes as well (seen in red and green below, as agents/lines that have been manipulated by other operations).


Tidal from Alex Maclean is a domain-specific language built on top of Haskell, and his new Texture system creates more of a diagramming notation. Dave Griffiths has built his live coding environment, Fluxus, in Racket which is used in Program by Design and Bootstrap CS education projects. Dave did all his live coding at Dagstuhl using his Scheme Bricks, which is a Scratch-like block language that represents Scheme forms. (See here for Dave’s blog post on the Dagstuhl seminar.)


How many of our undergraduates have ever seen or used notations like these? How many have considered the design challenges of creating a programming notation for a given domain? Consider especially the constraints of live coding (e.g., expressiveness, conciseness, and usability at 2 am in a dance club). David Ogbourn raised the fascinating question at Dagstuhl of designing programming languages for ad hoc groups, in a collaborative design process. Some evidence suggests that there may be nine times as many end-user programmers in various domains as professional software developers.  Do we teach CS students how to design programming notations to meet the needs and constraints of various domains and communities?

I wonder how many other domains are exploring their own notations, their own programming languages, without much contribution or involvement from computer scientists.  I hope that the live coders and others designing domain-specific languages challenge the academic computer scientists to think again about expression. I really can’t believe that the peak of human expression in a computing medium was reached in 1973 with C, and everything else (Java, C++, C#) is just variations on the motif.  We in computer science should be leading in exploring the design of expressive programming languages for different domains.

Entry filed under: Uncategorized. Tags: , , .

Education Research Questions around Live Coding: Vygotskian and Non-Constructionist A playful live coding practice to explore syntax and semantics

7 Comments Add your own

  • 1. Kathi Fisler  |  October 1, 2013 at 6:27 am

    I think a lot about how to help students understand that notation is malleable and that tools for doing so are within their reach. In my intro course for students with prior CS background (such as AP), I teach them Scheme/Racket macros and how to build their own domain-specific languages. In lecture, we build a language for writing slideshows, and I show them how to use macros to create a custom notation for automata. They have to “find” a language in the world around them and describe its syntax and operations. Their course project is then to build a small domain-specific language (often for animations or for tailoring tax forms). I love teaching this material, because I feel like I’ve handed them a taste of magic.

    Only the very top students leave the class driven to build serious languages this way, but I think most leave with the awe that they shouldn’t have to accept the languages handed to them. CS has the power to build the tools with which we build products. Students need exposure to that idea early. A year of solid prior programming experience can be enough for them to actually work with these ideas.

    (Enjoying the livecoding series, Mark — thanks!)

    • 2. Mark Guzdial  |  October 1, 2013 at 3:00 pm

      I love this perspective, Kathi! “A taste of magic” and “the awe that they shouldn’t have to accept the languages handed to them” — what wonderful goals!

  • 3. Doug Blank  |  October 1, 2013 at 7:32 am

    I wonder how many of these projects are funded by agencies like the NSF? How come we don’t see many publications on such projects at SIGCSE? I think that there is deep skepticism for such alternative languages and systems by the establishment.

    It is asking a lot to both develop a system, and to prove its effectiveness in the classroom, both in terms of learning and other affects.

    No wonder such projects come from outside the CS world!

    • 4. Mark Guzdial  |  October 1, 2013 at 11:13 am

      I was the only American at Dagstuhl, so no NSF funding. Only Sonic Pi was explicitly an education-funded project, so it’s unlikely that many of these would even consider SIGCSE as a target. I do share your believe that there is deep skepticism about non-C-like languages, in SIGCSE and in NSF CISE.

      • 5. Sam Aaron  |  October 2, 2013 at 3:28 am

        Also, Sonic Pi wasn’t a traditionally funded eduction project. It was initially an extremely short-term (3 month) trial project funded directly by a charity – the Raspberry Pi Foundation.

  • 6. nick rothwell (@cassieldotcom)  |  October 2, 2013 at 3:53 am

    Part of the problem is that, in the current fee-paying climate, there’s pressure from students to just teach them skills which they believe will get them a job. I’m interested in teaching non-vocational CS skills (I learned a half dozen languages as an undergraduate, including ML in second year) but this route needs to be motivated in a way that students accept until they start seeing the benefits of abstraction and self-pedagogy over a wider set of experiences.

  • […] the existing software development community even likes — I’ve noted before that the LiveCoders seem to really like Lisp-like languages, and as we all know, Lisp is […]


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,185 other followers


Recent Posts

Blog Stats

  • 2,039,499 hits
October 2013

CS Teaching Tips

%d bloggers like this: