I don't see the value in memorizing programming -syntax-. It's irrelevant to me to remember how to open a file in ruby or do a specific command- that's what search engines and then my personal wiki is for.
If I worked -only- in ruby, then I'd likely remember those specifics much more, but since I hop around with rust, python, c#, clojure ... depending on our clients, there's no way I'm going to remember stuff like that for every language. Especially since languages tend to get updates and changes!
I would use anki to retain knowledge of stuff like more complicated data structures. Right now, I just search for what I need, then toss it into my personal wiki folders. I can then use notational-fzf-vim to rapidly fuzzy search my markdown files. [0] I keep these synced across computers with a selfhosted nextcloud instance.
I have been remembering Python syntax through Anki. Recently, I needed to write some adhoc scripts for backfill. I felt so productive without looking at any references. It took me 3x less time to complete my task compared to always looking at references.
What happens if you include the time you spent drilling yourself with Anki? Are you still ahead?
They change that often?
I memorized the programming syntax so that hopefully next time I opened up a language I haven't seen in years, I don't have to stumble around trying to catch my footing.
I also found that I have terminologies issue which may make communication difficult, so it's a good idea to have labels for structures in your program.
Typically not very much, but it -can- happen. I don't see the need to have stuff like that memorized when I can just check my wiki, or search online if that fails. Or I can even just look at one of my past codebases really quick with fuzzy searching or grep.
For any domain that I'm working in, it's typically unnecessary anyways. I do a lot of work in Rust right now so I have most things like that off the top of my head, etc.
https://ai.facebook.com/blog/aroma-ml-for-code-recommendatio...
Also a huge component of memory is contextual cues, which is why people find it so hard to code on a whiteboard vs. being at their normal computer/keyboard.
This is akin to looking up words you don't know in a foreign language and hoping through repeated exposure that you learn the right words to use. It's very slow and frustrating. It is much more efficient to just know stuff off the top of your head.
Just because you look stuff up doesn't mean you efficiently memorize those things either. Reading had been proven to be a poor strategy for studying.
Also a huge component of memory is contextual cues, which is why people find it so hard to code on a whiteboard vs. being at their normal computer/keyboard.
Context clues can be embedded in flash cards as necessary.
Although it's also possible that you're associating arbitrary clues to your cards, which would be to your detriment. For example, an arbitrary part of the card trigger the answer, instead of an appropriate context.
It's why some academics recommend studying using different rooms so that the context for your answer don't become glued to that environment.
> Just because you look stuff up doesn't mean you efficiently memorize those things either. Reading had been proven to be a poor strategy for studying.
The research of Krashen, Mason and other L2 acquisition linguists on extensive reading for language learners directly contradicts this claim. Regular, sustained reading is considerably more effective for acquiring a language than flashcard-based methods.
Anki is great and I'm a contributor! But it's more of an ancillary tool. SRS shines when it comes to memorizing decontextualized, atomic information (e.g. countries and capitals, the periodic table of elements or writing Japanese kanji), but not for learning a language in general.
I'm sure all of us programmers have been in the situation of discovering a faster/better way to do something that we've been doing for years.
There are so many things that you can memorize:
- common standard library method
- code-level design patterns (like the factory pattern)
- system design patterns (like caching in Redis)
- SWE process patterns (like code review or 1-1 meetings)
Why would syntax be the right level of abstraction to repeatedly review?
The space of things you can memorize (or "cache" in your mind) is too large. So a better strategy might not be to use Anki (which optimizes for retention but takes time to set up) and instead "randomly sample" a bunch of different things so that you know the techniques out there. Then you retain the knowledge that you need by actually using it on the job.
If anyone has had similar experiences, I've found the best way to learn has been writing about things that I use, as I'm using them. The rule for writing in that way is only write what you've come to understand...don't just copy text that is "useful" from another source. Dive deep and learn the shape of the concept, then write about it in your own words, then move on.
By writing from your own perspective it has 2 effects: 1) it helps solidify the concepts a bit more, because you can only explain something once you've reached a certain level of comprehension. and 2) it serves as a "stack snapshot" of your mind when you had a handle on the concept, and re-reading that snapshot loads the context back into your mind very quickly.
One of the first rule of spaced repetition is that SRS is a system for retaining information, not learning.
Once you learn the information, then you use the SRS to retain the knowledge you built up.
Also, if you have trouble connecting individual facts into larger conceptual framework, you may not be making enough connecting notes to connect those facts.
By writing from your own perspective it has 2 effects: 1) it helps solidify the concepts a bit more, because you can only explain something once you've reached a certain level of comprehension. and 2) it serves as a "stack snapshot" of your mind when you had a handle on the concept, and re-reading that snapshot loads the context back into your mind very quickly.
Writing is what I do too. I have a note system that I devised that I looked up and revised all the time. It's part of my learning system, but I considered it secondary storage.
But beware of reading. It can make you feel like you understand something, but you really don't. Reading is considered a poor study strategy, since it mislead you into thinking you have fluency when you don't.
var a = new Array('5');
// what is a?
var a = 5 + '5';
// what is a?
It's sad that many languages force people to memorize trivial stuff like this.This is one of the things that really impressed me about Smalltalk/Pharo syntax when I started learning it recently. The language itself encourages you to name things in a way that labels all the parameters. E.g. you can have a constructor like this:
OrderedCollection ofSize: 5.
And method names are composed of parameter names: array insert: 11 before: 2.
Instead of array.insertBefore(11, 12);A while back I made a Chrome extension for LeetCode. [0] It takes care of scheduling problems for you and the extension users love it :) It costs only two dollars, so you might want to try it :)
In all honestly, I have no idea how useful anki would be in setting up habits.
https://senrigan.io/blog/everything-i-know-strategies-tips-a...
Taking one example from the article, if the front of the flashcard is:
var a = 5 + '5';
// what is a?
And the back is: '55'
If either side of + is a string, the other is
converted to a string before adding like strings.
I'm sure it would work great if in a real programming context you're ever presented with literally: 5 + '5'But whether you'll remember the principle that "If either side of + is a string, the other is converted to a string before adding like strings" when you see, say 237 + "foo" is open to question.
Of course, in this highly simplistic case you probably would remember, as it's not difficult to memorize this principle even without the flashcards, but with more complicated examples I suspect it could be a real problem.
Difficulty in generalizing things is a common problem from learning. Unfortunately, from what I know from research, the best way to overcome this is through lot of examples, especially examples that seem contradictory.
Its working well so far.
Imagine you don't know the language and are trying review a few thousand lines of code.
Well, you wouldn't be doing that if you don't know the language, right? But that's just it; maybe spaced repetition can be a good way to get there, especially if you're already an experienced programmer.