I started working on this a few weeks ago: https://github.com/trane-project/trane-math It currently needs a README, but you could take a look at the courses on how I am building the flashcards. It's easy to reference external resources, so that's what I have been doing, rather than trying to create exercises of my own.
I am starting with a very basic olympiad-style book and a book based on Euclid's Elements, because I don't have the understanding required to clearly work out the dependencies of more advanced stuff. And I also would like to start at the beginning to make sure I don't miss anything.
The ideal end state is to have courses that cover all the undergrad and grad math curriculum. I am also curious on whether this could be used by researchers to keep up to date with the latest research on their fields. But all of that is a long way out.
As for your question, there are a couple of ways that Trane could handle multiple paths through similar material.
1. Just have separate curriculums. You could copy the courses, but the second copy has different dependencies, courses/lessons IDs. For example, one could have a series of courses teaching the undergrad MIT math curriculum and another the Harvard curriculum. They might share a lot of the material, but the order will be different.
2. Trane does not lock you into a specific order. There are filters that let you specify which parts of the graph you want to study. You are free to get questions from specific courses and lessons. You can also use the metadata in the courses to say things like "give me questions from all lessons teaching linear algebra" or "give me questions from all courses on real analysis but not from the lessons on set theory". The dependencies between the lessons that match that metadata are still respected. There are a few more options, but you get my point. The dependencies are not set in stone, and there's freedom to jump around and study specific topics.
I actually use option 2 most days. If I want to practice guitar, I just set a filter to give me exercises from the guitar. Similar thing when I want to practice the saxophone.
Mathematics doesn't really have dependencies. Everything can be thought of in terms of everything else: you need an in, which is usually arithmetic or geometry (but, for physicists, is often physics – and for programmers, is often concepts related to their favourite programming languages), and then everything can be defined in terms of something else.
However, many people find it easier if you have concrete anchors, rather than making everything an abstract ivory tower. A certain kind of musician might get Fourier series quite quickly by analogy to the behaviour of sound, and then pick up Taylor series by analogy to that; somebody like me might find it easier to translate the most general Fourier series to a Maclaurin series, then compare coefficients. All these approaches would give you an understanding of Fourier, Maclaurin and Taylor series', which then lets you learn things that build upon them.
The "separate courses" approach is doable (and the best I've come up with so far), but it doesn't scale: courses that cover the same things without providing further insight don't get merged together. It can't handle the combinations that, intuitively, I feel like there should be a way to handle. Human teachers can cope with it just fine!
One nitpick on trane-math: running `cargo test` will wipe out the .trane directory, if it exists. That seems not very good; perhaps there should be a way to point trane at a temporary directory, so you can test it better?
Thanks for pointing that out. I'll fix it, but for now just have the .trane directory in the folder right above.
I guess you are right. The textbooks definitely have dependencies, but that seems to be the very problem that you have with them. Unfortunately, I think other than different curriculums for each way to approach the subject, this is beyond the current scope of Trane. I made this thinking of music at first, which has a more rigid way of approaching the subject that tends to work for a wide set of students. There's no person on earth that will be comfortable studying highly chromatic music without mastering harmonically easier material first.
Yeah, trane's design works really well for practical stuff like learning an instrument. It's probably good for language learning, too: perhaps a series of books or texts, each of which builds on the language skills learned from the previous…
It's a good idea to limit the scope of your projects. Jack of all trades is a master of none, and the fact trane exists (and is GPL'd) makes it just that bit easier for me to solve the other problem.
I am starting with a very basic olympiad-style book and a book based on Euclid's Elements, because I don't have the understanding required to clearly work out the dependencies of more advanced stuff. And I also would like to start at the beginning to make sure I don't miss anything.
The ideal end state is to have courses that cover all the undergrad and grad math curriculum. I am also curious on whether this could be used by researchers to keep up to date with the latest research on their fields. But all of that is a long way out.
As for your question, there are a couple of ways that Trane could handle multiple paths through similar material.
1. Just have separate curriculums. You could copy the courses, but the second copy has different dependencies, courses/lessons IDs. For example, one could have a series of courses teaching the undergrad MIT math curriculum and another the Harvard curriculum. They might share a lot of the material, but the order will be different.
2. Trane does not lock you into a specific order. There are filters that let you specify which parts of the graph you want to study. You are free to get questions from specific courses and lessons. You can also use the metadata in the courses to say things like "give me questions from all lessons teaching linear algebra" or "give me questions from all courses on real analysis but not from the lessons on set theory". The dependencies between the lessons that match that metadata are still respected. There are a few more options, but you get my point. The dependencies are not set in stone, and there's freedom to jump around and study specific topics.
I actually use option 2 most days. If I want to practice guitar, I just set a filter to give me exercises from the guitar. Similar thing when I want to practice the saxophone.