When I was getting into web development I used a combination of Anki and git to help me quickly learn and retain skills. Figuring there might be demand for a product that uses the same strategy (without the requirement that you already know Anki and git), I created SkillPress.
No account is needed to start learning. I would greatly appreciate any feedback or suggestions.
IME/IMO, Anki is best at aiding recall for domains where there's a long tail of infrequently used items which benefit from quick recall. As in, it's obviously great for language learning; and I've heard it's good for e.g. health science students.
For programming, most things is programming are either going to fall into either side: "you'll use it frequently enough that recalling it is easy", or "you'll use it so infrequently, and it's better to just look it up than to try to remember it".
Where I have had some success in programming related domains was using flashcards to capture parts of some system that were at the edge of my understanding. I wasn't interacting with the system enough to understand it; but, interacted with it frequently enough that I wanted to get some understanding of it.
But, almost always, I think flashcards need to be very clear/short.
In terms of product-ising the idea of "SRS as applied to learning programming", I guess the main question is "how is your product going to be better than just using flashcards with anki"?
Yeah, I found that in my case I'll boot up in a new language or technology using an Anki deck, then as things start to stick and I am using the new skills in my daily work I'll stop studying the deck.
I've found a few limitations with this approach that I tried to address with SkillPress:
1. When you stop using Anki for any length of time, when you come back you get an avalanche of cards that are due - which can be demoralizing. I solved this by doing away with the 'due cards' UI in favor of the forgetting curve graph. This way you are encouraged to come back weekly to keep your graph green, but you aren't hit in the head with a mountain of cards when you do.
2. When you are first getting started with a technology, you aren't sure what is worth committing to memory, so you'll either add too much or to little detail. With SkillPress the decks are created by someone who is proficient in JavaScript, so the courses are closer to the 80% of the value from 20% of the knowledge sweet spot.
3. In software development you'll often learn a technology and then stop using for a long time because your job or career has moved away from it. With an Anki deck that you haven't studied in months you'll be presented a large pile of cards that you don't know, often showing the more advanced cards first. I solved this by prioritizing cards on both the initial learning and review phases. You can come back to a course any time and SkillPress will try to get you back up to speed starting with the more basic concepts.
I don't see how this would be useful for learning JavaScript at all. It is definition trivia, maybe for some kind of CS1 quiz this would be useful. But the way to learn JavaScript is to write Javascript.
I've been thinking about a similar thing lately, but as an Anki plugin: while reading the docs/documentation/tutorial, and a fact is mentioned that needs to be memorized, click on it to add a card it to that doc's designated Anki deck, then immediately answer it in Anki (putting it into the rotation.)
I've also been thinking of this in terms of live lectures, where the lecturer could send a card to their students' lecture deck as the concept is explained.
So study homework and quizzes etc. would be replaced by Anki, and classwork could be split between lectures that introduce new concepts and cards and guided programming assignments.
If people do their Anki, they'll remember the facts against their will if the questions are designed well enough. The instructor could concentrate on guiding them through applying those facts in practice.
edit: it's how I tend to do my decks. For example I have a pretty good Git deck that I'm refining (and want to add more advanced usage to) that just takes on the git book at git-scm.com in order, with a card for each individual fact (and an excerpt from the text), tagged with the chapter where the fact is first mentioned. After you're done with a chapter, you can add it into the rotation with "custom study." Once you're done, you can just play with git, instead of constantly context-switching between your sandbox and the docs, or having complete blind spots about things you've had no reason to try yet.
-----
edit 2: I really like this implementation, and the simplicity of the questions. Are they from your own deck?
Yeah, I adapted them from my JS Anki deck. Also ended up cutting out a lot of stuff out that turned out being less important than I'd thought as a new learner of JS. I'm hoping the courses are more useful than those a learner would create themselves since as a proficient JS user I have a better idea of what skills are actually needed.
Similar to your thoughts, I'd love for this or something similar to eventually replace textbooks. It'd be great to have experts in every field build interactive mastery courses that help you both learn quickly and retain the knowledge long term.
Just to add a footnote to the above: I wasn't aware of https://foosoft.net/projects/anki-connect/ so what I'm thinking about is very doable right now, and probably being done.
Replacing the "due card" count with a graph that visually shows the memory decay is brilliant. What I imagine being especially nice about this UI too is that it would do a much better job of adjusting to how much of your content is new vs. mature -- that is, your graph decays quite quickly if you are learning a bunch of new stuff recently, but decays more slowly if you haven't added anything new in a few weeks and just took a few days off. In Anki, both of these cases appear the same since you're just looking at a raw due count.
Some of the "Explore" examples look to be broken for me, even if I try to go to CodePen directly. For example, the card "a binary operator requires.." does not seem to have anything in the CodePen.
My own workflow is too locked into the Anki app itself but this is a great project, well done!
I noticed when I hit enter to go to the next card it will automatically submit a blank answer. There's no way for me to use this without taking my hands off the keyboard to click 'next'.
Fun idea. I'm a big Anki fan for learning languages. I'd consider turning off case sensitivity and ensure you're stripping spaces and making it as easy as possible to match answers. If you have to manually type in the answer its a pain to remember what case the answer should be in too. Still not sure what the sweet spot is for click vs typing outside of language context.
You keep using the phrase "forced study" as a substitute for spaced repetition.
Nobody is forcing me to do spaced repetition, I enjoy it. It helps me remember things, and I get a dopamine hit when I remember stuff correctly. So instead of talking about "forced study," let us talk about spaced repetition.
Yes, the point is, it forced you to remember things which i should forget instead.
It's dangerous though. In real life, we should learn how to forget unnessesary stuffs ? Or, i think a better strategy is, it should remind me of something "new" that i'm not aware of instead. Remembering is two-sword knife.
I think the point when you're learning programming or another language is to remember things long enough that you can recall them when you need to use them. Once you've got in the habit of using them, the cards don't matter anymore.
For example, to remember "almohada" in Spanish means pillow, I just think of a pillow shaped like the Alamo, and Tinkerbell, the fairy from Peter Pan, sitting in one of the windows ("hada" means fairy is Spanish.) I only need to remember this until I've talked or read enough about pillows in Spanish that I don't need the memory device. And as an example of that, "hada" is a word I don't need anything to remember, I just know it now. I don't remember why. I may have come up with some mental image, I may have had a flashcard, I may just remember the movie Veneno para las hadas because I like it.
It doesn't matter anymore, because it's now knowledge that I have.
Keyboard only navigation! Right now when you press Enter after (incorrectly) answering a question the next question get's answered with an empty value.
I'd like to see:
- Fill in answer
- Press Enter
- UI shows correct/incorrect
- Press Enter again
- UI shows the next question
- Repeat
Sorry but this will not help you learn JavaScript.
I am sure it will help you remember built-ins and terminology, but using PLs is far more than a human memory game, I know JS pretty thoroughly and cannot recall every Math or Array method, it's just not very important. If you want to get better at any PL, write it, write it, write it.
If you don't know what to write, I'd recommend heading over to somewhere like rossetacode and picking an unimplemented problem you like the look of.
Yeah, a lot of this just looks like trivia. There are a couple of very rudimentary “coding problems,” but I’m unsure how useful this would be. Writing code >>>> answering trivia questions about terminology.
I agree - the best way to learn to write code is to practice writing code. After you learn the basic terminology the course progresses on to more and more advanced coding problems.
For clarity, are advanced problems something like “write the output of this anonymous function” or does it teach this concept before asking the question? Is this supposed to be adjunct to a more holistic course?
The course leans pretty heavily toward active recall - there are a lot of high quality tutorials out there, so I wanted this one to focus more on maximizing retention instead of serving as a gentle introduction.
I was looking at some human language learning material. One of the exercises in it was to rearrange jumbled words into a meaningful sentence. That got me thinking, what sort of exercises can we borrow from human language learning to learn programming?
A ten line jumbled function that the learner needs to order correctly? A small function with missing lines or wrong conditions that the learner can fix, to get the function working correctly? None of these are substitutes for writing code of course, but these can be fun exercises?
For me, those things are too complicated for a card. I want my cards to drill one thing. I might even want five cards to drill one thing five times, but with five different contexts. I want them to help me retain facts, like a syntax, a library, configuration, keywords, and enumerations/flags/switches with arbitrary names.
Programming practice is what I do after I have (or while I'm putting) these facts at my fingertips.
For programming, most things is programming are either going to fall into either side: "you'll use it frequently enough that recalling it is easy", or "you'll use it so infrequently, and it's better to just look it up than to try to remember it".
Where I have had some success in programming related domains was using flashcards to capture parts of some system that were at the edge of my understanding. I wasn't interacting with the system enough to understand it; but, interacted with it frequently enough that I wanted to get some understanding of it.
But, almost always, I think flashcards need to be very clear/short.
In terms of product-ising the idea of "SRS as applied to learning programming", I guess the main question is "how is your product going to be better than just using flashcards with anki"?