Live data from Hacker News

Memorizing a programing language using spaced repetition software

sivers.org

21–30 of 94 posts

Re: Memorizing a programing language using spaced repetition software

#21
Sounds like SuperMemo http://www.supermemo.com/ by Piotr Wozniak (http://en.wikipedia.org/wiki/Piotr_Wo%C5%BAniak_%28researche...). Piotr has been working on computer-aided spaced repetition since 1987. He's got a lot of data on his website. He was written up in WIRED magazine a few years ago.

Re: Memorizing a programing language using spaced repetition software

#22
post #14

I have been programming for the last 15 years and I still sometimes look things up, even in languages I use daily. I would not really change this, since if I use it often I will remember it - - and if not, it's just one search away. I think memorizing random facts is a really bad way to become a better programmer - - much better ways is to solve problems and read expert code (via ex. GitHub). Regarding the memorizati…

If anything the most important skills are the "meta" ones - being able to judge search results quickly for their credibility and knowing what vocabulary to use.

And it is a good idea to look things up every now and then because they change. In the olden days if you wanted to open a file you just did it. Nowadays you have to consider things like TOCTOU, process credentials, character sets, permissions to require/set, virtual locations (eg "My Documents", localization), quotas, race conditions, fsyncs and renaming of temporary files etc. Heck even adding two integers can result in security flaws if not done carefully

Re: Memorizing a programing language using spaced repetition software

#23

Earlier quoted context omitted.

The "vocabulary" in a programming language isn't really the reserved words. It's the libraries . Deep recall of the standard library of any major language would probably improve programming fluency a lot -- and it might improve code quality too. I wrote an honours research proposal on this; email me (see profile) if you want a copy.

What happened to your research proposal? Did you do the research?

I submitted 4 proposals; I wound up doing a different one.

The others were:

* a robust user-tracking protocol for websites (this is the project I went with). Inspired by a business idea I had in 2008; currently the basis of my "big" startup project.

* a "whole-machine" architecture proof-of-concept -- basically a blog app targeting a VPS. Gives you a lot more design options if you can control the architecture from the OS up. Inspired by my eye-blistering hatred for Wordpress.

* "A model of player Agency for software-created, interactive, just-in-time plot generation". There's simply no way this would have fit into a one year project, but it would be very interesting to pursue some day. I was particularly proud of my little taxonomy of plot generation mechanisms. Inspired by chatting to mates about what's wrong with MMORPGs.

Re: Memorizing a programing language using spaced repetition software

#24
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…

I agree with everything you said. SRS is very seductive, but after you do it for some time it loses its glamor and just becomes another tool in the tool belt. John Pasden's article that you linked to is great and on point. SRS becomes annoying after some time.

A few months from now Derek is going to be asked what Array(5) does. He will be pissed off that he doesn't know the correct answer, but does now remember to not use the Array constructor because it is ambiguous and the literal syntax is better.

var a = []; a.length = 5; is better than: var a = Array(5)

The former is obvious nonsense, the latter is non-obvious nonsense. If derek is like me, he will then be asked to rate his knowledge, and be pissed off that he now knows more but anki makes him admit to not knowing it.

Re: Memorizing a programing language using spaced repetition software

#25
post #14

I have been programming for the last 15 years and I still sometimes look things up, even in languages I use daily. I would not really change this, since if I use it often I will remember it - - and if not, it's just one search away. I think memorizing random facts is a really bad way to become a better programmer - - much better ways is to solve problems and read expert code (via ex. GitHub). Regarding the memorizati…

If anything the most important skills are the "meta" ones - being able to judge search results quickly for their credibility and knowing what vocabulary to use. And it is a good idea to look things up every now and then because they change. In the olden days if you wanted to open a file you just did it. Nowadays you have to consider things like TOCTOU, process credentials, character sets, permissions to require/set,…

Absolutely about the change point. It's also valuable to understand why things have changed, memorization is not going to help you with that, but you should be able to at least notice that things have changed and be able to conceptualize why they have.

Re: Memorizing a programing language using spaced repetition software

#27
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 personally think the amount of library functions memorized is the biggest difference between average programmers and the so-called 10x programmers. An extremely high level of fluency with a programming language environment is invaluable when it comes to efficiency and code quality. It is analogous to conversing in a language where one has to look up every other word compared to a native speaker who has a deep fluency. It's not just a matter of speed; the depth and quality of thought is orders of magnitude greater in the fluent speaker. The more of the heavy lifting you can do unconsciously, a vastly higher level of output one is able to produce for the same amount of mental effort. We accept this in just about every profession, yet we resist when it comes to programming. Personally, I'm glad my doctor memorizes a large amount of the facts he uses in his day-to-day work.

It is unfortunate that just about every new language brings with it a new set of standard libraries that we must learn to use effectively. We give up so much expertise and efficiency when we don't allow ourselves to build up a high level of familiarity with them. I can imagine a future where there is a standard library of methods that every programmer attempts to memorize and that every new programming language is programmed specifically for this standard library. We are already seeing this with language frameworks like the JVM and .NET, but we need to go even further. Hopefully libraries themselves will be created specifically to be easy to memorize.

Re: Memorizing a programing language using spaced repetition software

#28
Seems like a less than efficient way to learn and remember a programming language. Unlike natural languages, we can write programs with programming languages. We can run these programs, and if they still work, then they're probably still correct*. You can't do that with written/natural language.

As far as remembering programming language constructs and vocabulary, the way to do it is do projects. You use what you learned, and naturally, you're going to come back to it when you have to fix a bug or implement a new feature. All the while, you're building something good, too.

Another thing. If you're using a well-designed language, the concepts will incrementally build on themselves. They won't just be a bucket of orthogonal concepts, (like PHP, which seems to be mentioned in the article). Therefore, by learning fundamentals, you can more easily understand and decipher more advanced concepts. So, maybe you did forget what something does. But after a few minutes entering commands into a repl, you fully understand it again, because of your crystallized knowledge of other concepts.

I can't imagine a worse way to learn a new programming language than brute memorization.

Re: Memorizing a programing language using spaced repetition software

#29
...this could only make sense if you want to maintain fluency in programming languages that you are not using regularly. And why on earth would you want to maintain fluency in a language you are not using?! It's not as if you'll forget the basic concepts.

IMHO, if you want to maintain fluency in a programming language you're not using, say to keep your knowledge of C and C++ fresh while you're working in higher level language, you should keep contributing to a bunch of open-source projects written in that language, same as for natural languages you need to keep conversing with people that speak it or at least watching movies in it. Otherwise you'll end up knowing and artificial subset of that language that's useless for real work... And the plus is that having the os projects contributions in your resume will keep you employable for future work in that language.

Re: Memorizing a programing language using spaced repetition software

#30

Earlier quoted context omitted.

What happened to your research proposal? Did you do the research?

I submitted 4 proposals; I wound up doing a different one. The others were: * a robust user-tracking protocol for websites (this is the project I went with). Inspired by a business idea I had in 2008; currently the basis of my "big" startup project. * a "whole-machine" architecture proof-of-concept -- basically a blog app targeting a VPS. Gives you a lot more design options if you can control the architecture from th…

The last one sounds fascinating. I assume the generated plot would be a few levels beyond "Fetch X units of Y and take it to Z"? :)
Post reply on HN