Hacker News new | ask | show | jobs
Show HN: SkillPress – Learn JavaScript via spaced repetition and active recall (app.skillpress.io)
64 points by delabroj 1425 days ago
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.
16 comments

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.
Thanks for checking it out - it starts out with definitions and then builds into more interactive cards focused around reading and writing code.

Once you've completed 2-3 study sessions (1 study session = 10 cards answered correctly) you should be seeing a lot more code-focused cards.

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!

You might want to make the validation case insensitive as well as make the validation ignore any black space around the answer phrase.

https://imgur.com/a/AD2YZ0l

This is a pretty cool idea!

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

Should work now if you refresh.
Perfect! Thank you!
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.
I like the pitch but I don't like the kind of question, would prefer something along the lines of JS Is Weird[1] or the ClojureScript Koans[2].

[1]: https://jsisweird.com/

[2]: http://clojurescriptkoans.com/

Spaced repetition doesn't work though. Forced study is the worst.

Let the mind and heart decide what to do next, is still best strategy.

It's not a joke though, the result is, people are still using ORM to do data stuff, instead of ...(not sure about this).

Do you feel the same way about learning a non-programming language?
Yes. The same.

I natually learnt something for all i knew.

Forced study is just like a hack, because your mind is still out of control.

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.

Cool, I love how easy it is to jump right in and start using.

It would be cool if there was a "course" focused on ES6/relatively new parts of JS.

Why even mention `informational`[1] here? I was thinking it's a trick question. Either way, it should probably accept both `.info` and `.log`.

[1] https://i.imgur.com/FvYGqQL.png

Good point - updated the question.
It is great. The only thing is CodePen is slow as hell.
This seems like an amazing idea.

I feel the website needs better structure and depth.

Thanks - it's definitely at the MVP stage. Any particular features you'd like to see?
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

Edit: tested in Firefox and Chrome

Thanks for the heads up - that's what I get for doing most of my testing on mobile.

It should work now if you refresh.

This is good way of learning
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.
That could make some sense. To be clear I don’t think it’s a bad idea, just seems like this is for a very specific type of person.
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.

Thanks for checking it out. The course starts with the basics, so if you are already proficient at JS you would get less value from it.
Vip