In this post I want to talk about a project that I found really useful if you want to learn a new programming language. The project I’m talking about is exercism.io.

The mechanism is simple, you learn new languages using a serie of exercises provided by the system. At the moment, the languages supported are:

  • Clojure
  • Coffeescript
  • Elixir
  • Go
  • Haskell
  • Javascript
  • Objective C
  • Ocaml
  • Perl5
  • Python
  • Ruby
  • Scala

with Java, Rust, Erlang, PHP, and Common Lisp on their way.

After registering and downloading the executable, the application creates a folder for each of the supported programming languages and fetches the first exercise for all of them. What the system provides is a README file that describe the exercise, and another file containing the test suite for the code that the user is required to implement. After completing an exercise, the user can submit the solution and fetch the next one.

The solution submitted is available to the other users of the platform, so that they can comment it to make suggestion in how it can be improved. The user, at this point, might want to change the initial solution and submit a new version of the code.

Being himself a user of the platform means that he can review other users’ solution and provide comments and suggestions to them.

One last feature is the possibility to form teams with other users.

The reasons why I personally find this project very interesting and useful are mainly two. First of all, being a practitioner of TDD, I really appreciate the fact that, instead of just providing a text file with the description of the exercise, the user is given the specification for it using a test suite. This is a good way to start practicing TDD in another language and get in touch with the testing frameworks available.

Secondly, I like the idea of the social component. If used correctly, this feature can really help new learners in finding the best way to solve a problem and improving their coding skills.