Download JavaPLM v2.9.3 for Linux; for Mac; for Windows.

Join the PLM's Discord server

The Programmer's Learning Machine (PLM) is a free cross-platform programming exerciser. It lets you explore various concepts of programming through interactive challenges, that you can solve in either Java, Python or Scala (support for the C language is experimental).

The PLM is known to work on all major operating systems (Linux, Mac, Windows). Its interface and content is througfully translated to English and French, and partially to Brasilian and Italian; we hope that other translations will be contributed in the future.

Over 200 challenges are provided so far, ranging from a complete programming introduction for real beginners to more advanced topics such as recursion or sorting algorithms and to programming brain teasers.

I developed this program with Gérald Oster between 2008 and 2016. We used to use it in our teaching at Telecom Nancy whose students later become IT and CS engineers. It was used in several units of our curriculum, for a total of over 30h of practical labs (that are all included in the released version). This greatly increased the motivation of our students, allowing us to cover a much wider spectrum of topics than before the PLM introduction. Nowadays, I rarely use it in my teachings at ENS Rennes, but it's included in Debian and other Linux distributions for a wider distribution.

We distribute two versions: JavaPLM is an heavy java client embeeding everything, while webPLM is a web application providing the same features in a multi-user setting. webPLM is an ongoing effort to improve javaPLM, but it is much less mature. You should use javaPLM unless you want to help us improving PLM.

This software is distributed under the GPL license while the associated teaching material is distributed under the CC BY-SA license.

Download JavaPLM v2.9.3 for Linux; for Mac; for Windows.

Join the PLM's Discord server


On Linux, just double-click on the archive file, or right-click to select 'Run with Java runtime'. From the console, type

java -jar plm-2.9.3.jar

On Windows, extract the archive somewhere (right-click on the zip file, select 'Extract' and chose a location), open the destination and double-click on the plm.exe program that you will find in there.

The environment is completely self-contained, with all the important information directly in the program itself. So just give it a spin!

Just in case, older versions are also available from the GitHub download page.


Please visit our project wiki on GitHub. We hope that most information are given either there or within the tool directly. If not, please drop us an email, or fill an issue on the tracker to make sure that it does not get lost.

This Research article describes the motivation and design goals of the PLM. It was published at itiCSE'15 in Vilnius.


We are giving the PLM to the community, and really hope that people will adopt the tool and use it in their teachings. The source code is freely available from GitHub project.

We are eagerly waiting for your feedback and suggestions. Please fill them to the GitHub issue tracker. Naturally, patches are always welcome. Be them infrastructure change, translations, new challenges or universes, we'd be glad to integrate your improvement to the project.

If you have a problem, please open an issue on the dedicated GitHub page so that your remark don't get lost. Please do open this issue, we really need your feedback. In addition, we know the code base enough to fix most of the issues very quickly. But we have to know about these problems for that...


Understanding how students are learning to code is a passionating question. To help research in this area, the PLM saves any student code, provided that the user accepted to publish this data. All anonymized data are available online.

Each branch of this repository contains the code of a given student. For each exercise on a given branch, we save both the whole exercise setup (so that you can rerun the code for further analysis) and the run outcome that was observed at that time. The log message of every commit is a json field explaining what was going on. Here is a commit example that should be self-explanatory.

If you want to crawl the database, you may want to have a look at our harvester example code. But in any case, make sure to drop us a note so that we can help you using this data.

Related work

Finally, here are some cool other projects that ressemble more or less to PLM. I'd love to find the time to steal some good ideas, or merge the efforts if possible. If you know other projects, please drop me an email so that I add it here. Or even better, add these projects to the relevant wikipedia list so that others benefit of it too.

  • Java's cool. A comprehensive set of microworlds and learning situations. Many online resources, with a community behind it. Proposes its own programming language, lossely inspired of Java. In French only.
  • Hamster Modell, very comparable to the PLM. Only one microworld, but many (many) programming languages, very well done. A compréhensive set of learning resources (including 3 books that cover up to parallel programming). In German only.
  • Kojo. An IDE targeting novice programmers and learners. Proposes several activities, but it's more an open IDE where you have to figure out what to do than an exerciser proposing a set of challenges. Translated to some languages (but not French), Scala only.
  • Scalatron. Learn AI by programming a little vessel that fight with other vessels in a King-Of-Hill maner. Well done and well packaged. Scala only.
  • Human Resource Machine A very nice puzzle game in which you end up programming in assembly language without noticing it. Nicely done and pleasant.
  • RoboMind Similar to the PLM, with only one microworld (a little tank moves around) and its own programming language. Translated to most languages and nice looking. Commercial closed-source program.
  • Jeroo, very comparable with the PLM, but with only one microworld (a little animal moves between islands) and interpreting something near the target programming languages instead of using the languages for real. English only.
  • laby, very comparable to the PLM, but with only one programming language. Translated to french and other languages, too. A dozen of challenges only.
  • Reeborg, online application to learn Python and Javascript, using a specific microworld.
  • CodingBat, a set of repetitive challenges online, so that you can train until you master the concepts. Python/Java, English only. Nice dashboards for the teacher.
  • There is two similar systems to learn Git. The first one introduces the basics of Git while the second aims at teaching Git branching through a great-looking interactive set of challenges.
  • A rogue-like game where you have to program your environment (in javascript).
  • A set of online exercises I wrote to teach the usage of the shell terminal (in French only). You are given a console on a virtual machine somewhere, so the exercises a perfectly realistic.
  • An exploration game where you discover the basic shell commands while you go. Entierely implemented in javascript, the UNIX commands are not realistic at all.
  • A catch the flag, where you log into a real machine and you have to discover the password of the next user, to unlock the next level. In this game, you will discover the basic UNIX commands. These are the real implementations, so with the exact same semantic. This site also provides other games related to security where you will have to discover security flaws to reach the next level.
  • A programming game where you are opposed to another robot in something somehow close to the PacMan world.
  • A nice RPG game where you have to reprogram the environment.
  • A nice online game to learn Vim.
  • A nice tool to review the code submissions of your students.