6 ms·
I credit Anki with allowing me to successfully leap from ivory-tower academic to professional software engineer. I recognized right away that most academics wou
by xamuel 8y ago
I credit Anki with allowing me to successfully leap from ivory-tower academic to professional software engineer. I recognized right away that most academics would scoff at lowly "plebian" tasks like "actually learning the details of a programming language". So I forced myself to push through that prideful bottleneck and essentially memorized several programming manuals cover-to-cover using Anki.
- marmaduke 8y agoI've found I'm effective in Python simply because after 10 years I've learned by heart the most common APIs but would love to pick up one or more languages and it seems like Anki would be good approach, but I'd like to hear how you split up a language on to flash cards? do you make flashcards for every element of the API (module, type, class, method, function, etc)? Compiler flags, command line args etc?
- xamuel 8y agoBack then, I pretty much made cards for everything possible. One trick is I found it's best to design the cards so you can say the answer fast. You don't want to waste time verbalizing long asnwers. So my cards end up looking like this: (Front of card) Evaluate: {'foo': 'bar'}.get('baz', 0) (Back of card) 0 Or like this: (Front of card) How to get [1, 2, 3, 4, 5] in lodash? _.___(1, 6) (Back of card) _.range(1, 6) That latter is an example of what's called a "cloze", where you show the full answer on the front of the card, except with one part blocked out. You can block out different parts of the answer to create multiple cards for the same question e.g. (Front of card) How to get [1, 2, 3, 4, 5] in lodash? _.range(___) (Back of card) _.range(1, 6)
- marmaduke 8y agoI see what you mean, that's very pragmatic, in the sense that accelerating those sorts of question-response makes coding faster.
- deleted 8y ago[deleted]
- andrepd 8y ago>most academics would scoff at lowly "plebian" tasks like "actually learning the details of a programming language" What nonsense. You must have hung around insufferable people.
- xamuel 8y agoHave you seen how the usual mathematician/physicist programs? They "google as they go", looking up everything, copy-pasting from stackoverflow, etc.
- andrepd 8y agoOh I thought you meant CS academics. With that I (semi-)agree with you, physics professors can't code for shit. I only semi agree because this seems to be a phenomenon of an older generation. Newly minted PhDs are often much more proficient in programming, since they usually have received a much stronger education in that regard.
- rurban 8y agoWhat's wrong in reading the complete documentation, the examples and then the source code of said programming language? Debugging through also helps sometimes on tricky problems. That's usually the easiest way to learn a new language.
- marmaduke 8y agoNothing's wrong with that, but the point is to improve retention.
- xamuel 8y agoThat should be done as well, the flashcards are just a supplement. I find there's often a weird transition where if I'm just reading docs as if it were pleasure reading, I'll be nodding my head, "yeah, that makes sense", "yeah, that's easy", "yeah, I understand", then all of a sudden, "wait a minute, I'm totally lost and don't remember a thing from the last five pages!" Also, it's easy to get the bird's eye view of a language (say, React, for example), but when you're down in the trenches, you need to KNOW about the pedantic little details (like "class" vs. "className", "for" vs. "htmlFor", minutiae of React lifecycle, etc.)
- bpizzi 8y agoWell, IMHO (no offense meant), memorizing programming manuals makes one a good lonely programmer. To become a 'professional software engineer', one must learn to be a team-player within a group of persons tasked in building and maintaining a piece of software that will stand the test of time. Which requires a very different skill set. One can be a good SE and still be relying on auto-completion and inline help in one's favorite text editor. Remembering the API of your languages definitely helps, but actually building softwares that will be used by real users, for years, that's what makes you a 'professional software engineer'.
- wiz21c 8y agoDead on. I make specialized softwre (one off for one customer). I'm always super amused to see how much the software my team writes is at the intersection of many constraints : budget, time, this group of user, that manager, those dev's, etc.
- xamuel 8y agoSure, but teamwork isn't everything. Or studios would hire cheap communications grads and there'd be no need for CS programs.
- tralarpa 8y agoSorry, I hope this doesn't sound arrogant and after reading your other responses I am still not sure whether you are joking or not... But using flashcards to learn a programming language is by far the strangest thing I have ever heard. Usually, a programming language (or an API or whatever) has some core part which you use daily. So, no need to memorize anything actively. Yes, sometimes you write something and wonder "Is there an easier or more idiomatic way to do that?", then you will search in the manuals or on stackexchange and you see how it's done. If you are curious (which I hope), you will maybe also check WHY it is the easiest resp. most idiomatic way. Again, no need for active memorization. Then there is the part of the language or API that you rarely need and that you don't have to memorize anyway. To be honest, I am completely speechless. Flashcards? To memorize programming manuals? I know people who use flashcards when following crash courses to qualify as Cisco engineers or whatever. But for programming???
- grzm 8y agoCards can be really useful for systematically expanding your "active vocabulary" in a programming language or framework. Yes, you can research stuff, but sometimes you don't know what you don't know. Cards can be one useful way of doing this.
- xamuel 8y agoAnki is a shortcut to muscle memory. Learning-by-doing is great, but inefficient. And when you stop, you forget. Anki cards space themselves out based on your responses, so there's almost no cost to maintain memory. Part of how I got the job I got (an amazing dream job) is because the interviewers were flabbergasted seeing me live-code flawless idiomatic code like it was the back of my hand. Difficult to achieve that without SOME sort of systematic study. Most master pianists don't get there by just doing lots of casual play. I should also mention, one of my main language is kdb+/q. Try mastering THAT without flashcards ;)
- Lordarminius 8y agoIm really curious. Could you explain in some detail how this works out in practice ? For example with someone learning JavaScript or Python ?