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

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

About 160 exercises are provided in the existing lessons, ranging from a complete programming introduction for real beginners to more advanced topics such as recursion or sorting algorithms and to programming brain teasers.

We develop this program since 2008 for our teaching at the school Telecom Nancy for our students, that later become IT and CS engineers. We use this tool 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 increase the motivation of our students, allowing us to cover a much wider spectrum of topics than before the PLM introduction.

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

Download

You can download the program as jar archive from here: plm-2 3.jar. Afterward, you can run it with

java -jar plm-2_3.jar

The environment should be rather self-contained, with all the important information directly in the program itself. So just give it a spin! You only need a Java runtime for that.

Alternatively, you can get a stripped down jarfile that does not include the python and scala dependencies: plm-light-2 3.jar. Its size is about 6Mb while the all-in-one version is over 40Mb. If you use Java, you can run it just like the full-blown version.

You can still use scala and python with this version provided that they are in the classpath. Since java does not allow to use both -jar and -cp flags at the same time, you should do something like this instead:

java -cp path/to/jython:plm-light-2_3.jar plm.core.ui.ProgrammersLearningMachine

Just in case, older versions are also available: plm-2 2 7.jar or plm-light-2 2 7.jar, plm-2 2.jar or plm-light-2 2.jar, jlm-2 1.jar, jlm-2 0.jar.

Also, you can find a preview of the next release here: plm-2.4alpha-20140724.jar. Please use it and make sure to report all issues that you encounter. You can use the in-game feedback report for that, as it automatically opens bugs on GitHub for you. Please use it, abuse it, and tell us what needs to be improved!

Learn

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 report can also reveal instructive to you. It describes the motivation and design goals of the JLM. It was unsuccessfully submitted to SIGCSE'11. I hope you will find it useful anyway, but if you have any advice to improve it for the next SIGCSE conference, I'd be more than grateful.

To keep informed of furture versions of PLM, subscribe to our announcement mailing list (very low traffic).

Participate

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 exercises 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...

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 exercices. 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.
  • 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 exercises only.
  • Learn Git branching A great-looking interactive set of exercises to master Git.
  • CodingBat, a set of repetitive exercises online, so that you can train until you master the concepts. Python/Java, English only. Nice dashboards for the teacher.
  • http://alexnisnevich.github.io/untrusted/ A rogue-like game where you have to program your environment (in javascript).