A course that sets out to provide an introduction to functional programming using the dynamically typed language Clojure takes a very different approach to most MOOCs.
Thanks to Coursera, edX, Udacity and others we have become accustomed to the idea that when you sign up for a MOOC you'll be watching videos and tackling multiple choice quiz questions to be marked by an autograder as a major part of a MOOC.
The course is taught in English and requires students to have basic programming skills, but no experience with functional programming is needed. To participate you must register for a GitHub account and you complete the course by forking GitHub repositories that contain the course materials and and programming solutions to exercises embedded in them.
The course, which is self-paced and appears to involve around 120 hours in total, starts with an introduction to Clojure; its syntax and development environment. It goes on to cover Clojure's data structures and also goes through the basics of recursion and higher-order functions.
The course works with the set of tools and services as shown in this diagram illustrating what happens when a student submits their solution to one of the programming exercises:
Github hosts both the written material for the course and has project repositories for every chapter. To start working on the exercises you also need Leiningen, the project manager for Clojure installed. When a student clones a chapter's repository in Github what they get is a Leiningen project with a test suite and a source file full of function stubs. When the stubs are filled and the test suite passes, it's time to make a pull request and this is where Travis, a continuous integration tool as a service, comes into the picture.
Submissions to the exercises are made as pull requests between the chapters repository and the submitters fork. Travis is responsible for running the test suite of the project for every such pull request. It outputs the scores in JSON, based on meta data on the tests and then calls a webhook on our scoreboard server, which is deployed to Heroku.
The scoreboard reveals that it is possible to get a perfect score and that plenty of students are actively engaged in it.
So what will you learn?
To quote from the course description:
Functional programming is a programming paradigm where pure functions are the basic building blocks of programs. A pure function is like a function in the mathematical sense. The outputs of the function are fully determined by its inputs. The idea is that this restriction makes your programs easier to understand. This course shows how you can code meaningful programs with mainly pure functions. Pure functional programming differs from object-oriented programming in that e.g. it does not make use of variables or loops.
Clojure is a young Lispish functional programming language on the Java virtual machine (JVM) platform, suitable for small and large programs. Because it runs on the JVM, all Clojure programs can use all the standard and third-party Java libraries freely. It offers tools for many tasks that are harder with other languages and has a special focus on concurrent programming.
Discussion forums where you exchange information are a central component of most MOOCs and this one again handles it rather differently. It has its own IRC channel where you can discuss course topics and get support with the exercises, noting:
Much of the conversation on the channel is in Finnish but don't be afraid to post your questions in English.
If you want to discover functional programming and Clojure this sounds like a good way to go about it.