Live data from Hacker News

Memorizing a programing language using spaced repetition software

sivers.org

51–60 of 94 posts

Re: Memorizing a programing language using spaced repetition software

#51

As others have mentioned, its less about the syntax of a language and more about the plethora of libraries that is the real boon when it comes to using a programming language. It has been said that the majority of a tough problem is worked out unconsciously. If we eschew memorization for "just in time" methods, we are essentially putting a hard limit on the type and difficulty of problems we're capable of solving. I…

"I personally think the amount of library functions memorized is the biggest difference between average programmers and the so-called 10x programmers."

I don't know, what about the ability to think outside the box, a solid grasp of the fundamentals, or the capability to understand and create high level abstractions?

Seems like you're saying the ability to glue together a bunch of library functions is what classifies a great programmer. If that's the case, it should make programming interview tests rather trivial.

Re: Memorizing a programing language using spaced repetition software

#52
post #49
post #11

I was a contributor to Anki and one of the earlier language learning bloggers who wrote about spaced repetition for Chinese learning. One thing I noticed at that time was that those of us Chinese learners who were programmers went crazy about spaced repetition... some went so far as to SRS at the exclusion of actual reading. Other language learners blogging about SRS, often weren't so thrilled about the concept. http…

But can't you also use SRS with larger chunks? I think that's what the All Japanese All The Time author does and he's fairly confident about the results.

Putting whole sentences into an SRS definitely beats isolated words, but it's still not a replacement for actual reading.

The AJATT guy was big on SRS, but he was also watching hours of Japanese TV each day and even playing Japanese music and various other MP3s in his sleep. He got the requisite comprehensible input. He achieved a good level of language skill, but for the time he put in it wasn't exceptional.

L2 acquisition linguists generally agree that the important thing is "massive comprehensible input". This could be reading or listening. There is disagreement on whether if input alone is enough-- hardliners such as Krashen would say yes, others would say no. However, there's little disagreement that input is the most important factor. And an SRS will never keep up with actually reading a book when it comes to input.

3 years ago, I was that guy with a huge SRS deck, reading AJATT and writing my own blog about it. If you're unconvinced with the above, all I can say is make your huge SRS deck, do it daily and then come back in a few years and let me know how it went.

Re: Memorizing a programing language using spaced repetition software

#53

As others have mentioned, its less about the syntax of a language and more about the plethora of libraries that is the real boon when it comes to using a programming language. It has been said that the majority of a tough problem is worked out unconsciously. If we eschew memorization for "just in time" methods, we are essentially putting a hard limit on the type and difficulty of problems we're capable of solving. I…

The problem is that languages and especially libraries change too frequently. A doctor can learn the name of every bone in the body and that knowledge will for the rest of his life. In programming, there are very few things that will still be the same in 20+ years and we have no idea what those things are. It depends on the field but things can change so much within 2 or 3 years that its just not worth memorizing eve…

  > In programming, there are very few things that will still  
  > be the same in 20+ years and we have no idea what those  
  > things are.  
For the most part we are walking toward local optima in programming languages with larger jumps rarely succeeding.

SRS is well designed for gradually changing bodies of knowledge. New cards are added and come up more often, older cards can be retired but they rarely come up anyway.

Re: Memorizing a programing language using spaced repetition software

#55
Frequency analysis of human language shows that word usage follows a Power law distribution (Zipf's Law) which, for example, means that:

  * the 75 most common words make up 40% of occurrences
  * the 200 most common words make up 50% of occurrences
  * the 524 most common words make up 60% of occurrences
  * the 1257 most common words make up 70% of occurrences
  * the 2925 most common words make up 80% of occurrences
Speculatively, similar frequency analyses of library calls in various codebases for a programming language may reveal a similar long-tail distribution. This would provide a list of high frequency library routines that would be worth memorising - with clearly diminishing returns as the vocabulary grows.

This kind of analysis would also point at important targets for optimisation, simplification and parallelisation as well as direct the efforts of library implementers for new languages.

Re: Memorizing a programing language using spaced repetition software

#57
post #46
post #7

This is a good post that I'm glad to see refers to a lot of the work done on the subject of memorisation and it would be very useful for vocabulary building in language acquisition (amongst other things). I can't see the utility for programming languages (compared to human languages) however as the grammar and vocabulary of programming languages are tiny in comparison. The best way to learn them is to write something…

I don't see use when learning to program but if I memorised, say, the PHP standard library with all its warts, it would make me far, far more efficient at work. Whenever I write in PHP, there's always going to be a lookup for something in the standard lib, whether it's the signature of a function, how it should be used or whether it exists at all.

PHP is a good example as it is very hard to remember all its functions, as it uses a mix of naming standards. (For example, the case-insensitive version of strcmp is strcasecmp, and the case-insensitive version of strstr is stristr)

Whenever I write PHP I look up a lot more methods than when I write Ruby, even though I have more experience in PHP (Ruby cheats, a little bit, by having multiple names for many methods, making a wild guess much more likely to be correct)

Re: Memorizing a programing language using spaced repetition software

#58

Great article. I've made a chrome extension for making it easy to capture learning from internet and do spaced repetition. Check out http://memobutton.com

Nice - is it possible to combine it with existing SRS-systems? (I'm using Mnemosyne, so it would need to be possible to export the data in the mnemosyne xml format or as a tab separated text file)

Re: Memorizing a programing language using spaced repetition software

#59
post #7

This is a good post that I'm glad to see refers to a lot of the work done on the subject of memorisation and it would be very useful for vocabulary building in language acquisition (amongst other things). I can't see the utility for programming languages (compared to human languages) however as the grammar and vocabulary of programming languages are tiny in comparison. The best way to learn them is to write something…

I've been learning to talk French using CD's from Pimlseurs that uses spaced repititon to help you memorizing words.

You're constantly beeing asked by a english voice to say something in french, and after an hour it asks you to repeat the new words you've learned.

Re: Memorizing a programing language using spaced repetition software

#60
post #51

As others have mentioned, its less about the syntax of a language and more about the plethora of libraries that is the real boon when it comes to using a programming language. It has been said that the majority of a tough problem is worked out unconsciously. If we eschew memorization for "just in time" methods, we are essentially putting a hard limit on the type and difficulty of problems we're capable of solving. I…

"I personally think the amount of library functions memorized is the biggest difference between average programmers and the so-called 10x programmers." I don't know, what about the ability to think outside the box, a solid grasp of the fundamentals, or the capability to understand and create high level abstractions? Seems like you're saying the ability to glue together a bunch of library functions is what classifies…

These were my thoughts too - while I agree with the general sentiment of using Spaced Repetition; it also depends on the language you are using. If I find I'm beginning to recognize an abstraction I immediately begin to search for something someone else has already done.

The author of the post used PHP as an example and I think it's a terrible example because PHP's standard library and 3rd party libraries were all over the place in terms of naming conventions, structure, duplicated but not quite abstractions, &c...

I've found learning languages like Haskell to be very different - where learning the axioms and postulates is what leads me to implementation specifics. A good example: I was building accumulating recursive functions for a little project and was looking at the code and said this to myself, "This doesn't feel right, this looks like Scheme or Erlang code - not Haskell."

I set out to find any abstractions built into Haskell or 3rd party libraries that handled accumulators - low and behold folds! I've done that numerous times with this language proceeding from fundamentals and the process of abstraction to find first if the abstraction has already been done!

[EDIT]

I use Spaced Repetition for learning Haskell - but it isn't names of functions; it is the Monad laws, or Functor laws, &c... that I want to memorize.

Post reply on HN