Pre-West Interview: Elena Machkasova

Talk: Adapting Clojure to an introductory CS classroom.

Elena Machkasova's talk at Clojure/West is about using Clojure as a teaching language for novice programmers.


Dr. Elena Machkasova teaches at the Univesity of Minnesota, Morris. She is working on a project called ClojureEd to teach Clojure as a teaching language to novice programmers. Read the papers to understand the background. This talk promises to be very interesting in terms of pedagogical techniques (how to teach Clojure and programming) and tooling/setup for beginners.

About Elena Machkasova

Homepage - GitHub

This interview was graciously conducted by Nola Stowe. She's a programmer, the co-founder of DevChix, and a prolific teacher. She recently ran ClojureBridge Austin. Please shout out to her and say thanks!


Elena Machkasova is the next interview participant. She is giving a talk at Clojure/West about adapting clojure to the classroom. The background to her talk is available, if you like.

Interview with Elena Machkasova

Nola: How did you first learn Clojure?

Elena: One of my students mentioned Clojure to me in 2009. It sounded really cool, so I included it in a class on functional programming for concurrency and was learning it partly in the summer before the course, and partly as the class was progressing.

Nola: What other languages are good for beginners or do you think clojure is the best?

Elena: To alleviate possible confusion: I don't actually teach Clojure in a beginner-level class because there are currently no tools that would make this experience smooth for new students. I've taught Clojure as a part of a couple of upper-level courses where syntax isn't that much of an issue and students are experienced enough to deal with debugging in Clojure.

Beginner CS students need to focus on concepts, develop problem solving techniques, and learn to think in an abstract, modular, data-driven way. A solution needs to be developed as a series of short, clearly defined functions). A language that supports this process without getting students distracted by unnecessary details or unpredictable behavior would be a reasonable choice. Lisp languages, including Clojure, fit into this category. We currently use Racket ( a language in the Lisp family). Python is another appropriate first language. Statically typed languages, especially object-oriented ones (Java, C++), are too complex for beginners. Languages with complex interactions with memory or their environment (C, Javascript) are not a good choice either.

Since I haven't yet tried teaching a CS1 class with Clojure, I cannot say whether Clojure is "the best" (or even a reasonable) choice for beginners, but it certainly looks promising, assuming that it is made more beginner-friendly in terms of error messages and IDEs.

Nola: What types of applications do you like to use to teach your students? (i.e., a web app, console app, todo list, recipe list etc)

Elena: So far I mostly taught Clojure at upper level and we were mostly looking into concurrency. A beginner level class is focusing on concepts, but it has to have material that students are interested in as a small project part of the course. Possibilities include data processing and interactions with graphical libraries (animation, data visualization, etc.).

Nola: What clojure libraries do you like to use when teaching clojure?

Elena: We've been looking into incorporating Quil, especially the functional mode. I've also been looking into reducers for upper level courses. Expectations is a nice testing library, definitely worth including in any level course that uses Clojure.

Nola: Why would a Mars Rover would be better programmed in clojure be better than language ___ ?

Elena: Immutable data -> less possibility for error. Also, easy (i.e. less error-prone) approaches to concurrency would make large data processing fast and reliable.

Nola: Thanks for the interview. It was very informative.