Trane

Github Checks Status Coverage Status docs.rs Latest Version Stars

Trane is an automated practice system for the acquisition of complex and highly hierarchical skills. It is based on the principles of spaced repetition, mastery learning, and chunking.

Given a set of exercises which have been bundled into lessons and further bundled in courses, as well as the dependency relationships between those lessons and courses, Trane selects exercises to present to the user. It makes sure that exercises from a course or lesson are not presented until the exercises in their dependencies have been sufficiently mastered. It also tries to keep the difficulty of the exercises balanced, so that most of the selected exercises lie slightly outside the user's current abilities.

Trane is named after John Coltrane, whose nickname Trane was often used in wordplay with the word train (as in the vehicle) to describe the overwhelming power of his playing. It is used here as a play on its homophone (as in "trane a new skill").

Quick Start

For a guide to getting started with using Trane, see the quick start guide at the official site.

For a video showing Trane in action, see the Tour of Trane video.

Documentation

Full documentation for The Trane Project, including this library, can be found at the official site

A Code Tour of Trane

A goal of Trane's code is to be as clean, well-documented, organized, and readable as possible. Most modules should have module-level documentation at the top of the file, which includes rationale behind the design choices made by the author. Below is a list of a few modules and files to get you started with understanding the code:

If there's a particular part of the code that is confusing, does not follow standard Rust idioms or conventions, could use better documentation, or whose rationale is not obvious, feel free to open an issue.

Contributing

See the CONTRIBUTING file for more information on how to contribute to Trane.