Ask HN: How do you learn complex, dense technical information?
When in the past I've picked up a reference manual or something of the sort I'd go slowly, lookup every word I didn't understand and started experimenting as soon as possible.
But that is quite time consuming and intense. I've been considering skimming through the whole things to get kind of a big picture of what the thing is and where I'm going and then going back a second time to catch then the details and experiment.
Any other ideas? How do you tackle learning something new and complicated?
(ps. the complicated thing for me right now is kernel development, including writing proper C)
180 comments
[ 3.0 ms ] story [ 224 ms ] threadIt's not quite the same, but I recently studied for a technical exam/certification where the syllabus included about 400 slides (about 10 days of teaching & lab work). I failed the exam just reviewing the slides, even when it was sat quite quickly after I had taken the courses.
The next time I sat it several months after doing the training, I spent about a day and a half writing out the slides. I went through two A4 pads and a couple of pens. I will never review my notes (I have the searchable PDFs), but I found that exam really easy the second time round.
I studied for the PMP exam by hand writing the glossary in the back of the study guide then outlining each chapter, again, long hand. Hand writing the glossary helped me recognize important topics in the chapters as I read through them.
I read through my notes once before the test. I did all this over the course of a week in the evenings. Maybe spent 12 hours total. Passed the test.
I've noticed it myself. I went back to school late in life (48) and at first I wrote in notebooks. Feeling a bit old compared to my much younger classmates I went digital. In class I typed notes into Word. I convinced myself it was neater, safer and I could make backups. In reality I discovered I learned the material better if I wrote my notes by hand in cursive, block printing was too slow.
I'll see if I can find the article about it.
edit: this isn't the exact article but it is similar: https://www.npr.org/2016/04/17/474525392/attention-students-...
My wife and coworkers have found a solution in using a tablet like the iPad with stylus or something like reMarkable. The technology may be at the point where it is a satisfactory solution to the digital type vs note writing problem.
If someone is looking to type or at the screen, whoever taught them to type failed them. This sounds like the same stupdity of pair programming where "one can type while the other thinks." I'd be curious to see differences in note-taking retention between those who can touch-type and the hunt and peckers.
For me, the benefits of digital are too many: sorting, searching, organizing and of course the backups. I'm also left-handed and do not miss my school days where I would end up with smudges on my hand. I might buy that scrawling something out by hand leads to slightly higher retention rates than touch-typing notes, if only because the ROM is much higher, or it forces you to either go more slowly, allowing more time for reflection (Neal Stephenson wrote the Baroque cycle this way because of this), or have to condense lecture notes more, which would require more active thinking.
After I get something useful doing the Side project then I try to give a presentation about the side project.
Note that I have failed multiple times with getting something useful enough to justify the Side project.
Another way you can do this is just promise to give a presentation about the topic at a local meetup. And keep on giving presentations about it.
- be able to keep your knowledge / understanding of an area around for the long term; but also
- be able to gradually build up your understanding by first committing the fundamentals to memory, and then using that to build up your level of abstraction and get to the more complex ideas and principles.
Michael Nielsen has written fairly extensive explanations of two slightly different approaches in:
- Using spaced repetition systems to see through a piece of mathematics [1]
- Augmenting Long-term Memory [2]
I've only used this particular approach for a handful of subjects so far - indeed, it seems to just take time to build a high-quality, long-term understanding of a thing. However, I've been pretty happy with the process so far.
[1] http://cognitivemedium.com/srs-mathematics [2] http://augmentingcognition.com/ltm.html
For programming topics, I also try to make sure I'm using the information. I unfortunately have too many cards about topics that I never actually used, and they are frustrating upon review because I never had some practical structure to place them into mentally. Don't waste time trying to memorize thing you don't ever use.
That said, SRS is good for memorizing trivia if you want to do that too. I've been using the Anki deck Ultimate Geography for a couple of months to memorize every country, capital, their flag, and location on a map. Useless, but kinda fun.
For anything where the information is connected, it's a lot better to use those connections instead of drilling it in a decontextualized fragments via SRS.
It's a false dichotomy. You can, and IMO should, do both.
Every minute spent on flashcards is a minute that cannot be spent on more contextualized study.
I often spend less than 5 minutes in the morning on my flashcards. There's not much deep contextualizing you can do in 3-5 minutes. Certainly not in areas like physics.
It is a false dichotomy. All minutes are not equal. I'll gain much more by spending less time on HN than by cutting out flash cards.
Or, you can use SRS for "spaced repetition" of making these connections. That is, instead of treating it as rote memorization, use it for the timing effects. When I see a card about X1 which is part of a larger concept Y, I don't think "what was the exact answer to X1, which I remembered without any understanding and will just recite now?".
Instead, I often think "how do I come up with the answer to X1 right now? how does it connect to the larger concept Y?". Even better, if I've recently seen card X2 about the same concept, I might think "how does X1 relate to X2, which I just saw recently?". Sometimes, this actively helps you to make new connections. Of course, you need to explicitly make an effort to do so, yourself. If you practice pure recall only, that's what you'll get from SRS.
As another commenter mentioned, it's a false dichotomy.
> "[00:11:27] These SRS flash card apps are very good for learning vocabulary and depending on what's included in the flashcards, they could be for grammar as well. But the problem for a language learner is that it's de-contextualized. So say if you just study vocabulary words, then they're going to be a lot of things that you'll miss like collocations. You won't know which words are normal to use with which other words. For example, in English, if someone asks, "How are you?" it would be completely normal to answer, "pretty good". It would also be fairly normal to answer, "absolutely fantastic". But it would be strange to answer that you're doing "absolutely good". There's no grammatical reason. It's just not something that English speakers tend to say.
[00:12:17] And there are many, many, many language features that are like this. There are also questions of word boundaries. For example, in English, the word "nose" refers to a person's nose or a dog's nose, but not every kind of animal. For example, an elephant in English doesn't have a nose. It has a trunk. In Japanese, the same word, 鼻 (hana), is for a person's nose and the elephant's nose. So the question is, what exactly does "nose" mean? Well, really tedious language teacher could explain this for every single word that you study, or even put this on the back of every flash card for every word that you're reviewing. But, it's not going to be efficient. You'll spend so much time worrying about edge cases for every single word that you're learning that you're actually not going to get anywhere.
[00:13:11] The solution in language learning is extensive reading. If you do a lot of reading and the material is easy enough that you can go at a decent speed, then you'll just get so much input that you'll have a feel for what words are used when and you'll know what the specific definition boundaries around though are. And of course, it's not just language learners that have this problem with spaced repetition systems—that everything is reviewed out of context.
[00:13:11] You might remember from when you were younger and taking math classes, there were certain techniques that you had to get good at or you had to be able to do at least on some tests, like say, use trigonometric identities and some information to figure out how tall something is or how far away it is or completing the square to derive the quadratic formula... something like that. Mastering these kinds of problem solving techniques has the same sort of issue revolving around context. If you just mechanically memorize each piece of a method, you won't necessarily be able to apply it when you're given an actual problem on a test or any other situation.
[00:13:41] On the other hand, if you put the entire problem into a flash card like say you just write out a math problem and that's the cue part of your flash card, and every time you see that card, you have to solve the whole problem. Well, that's going to take enough time that you won't be able to do those problems very often. You might want to do it for some really important things, but it can't be your go to study method.
[00:14:55] Similarly with programming, you can memorize a lot of things about a programming language, but you're not actually going to learn that language or learn how to program at all if you don't write programs and if you don't have the experience of making mistakes and then the experience of debugging those mistakes and fixing your programs."
Trust me, this is an issue I've thought about a lot. I contributed to...
Just to clarify something in case it’s not obvious from my other comments. I’m not arguing for SRS as a replacement to all other forms of learning. You still need the extensive reading, problem solving, experimenting with a programming language.
However, I’ve found SRS to be a great addition to the methods above. For example, I haven’t found the methods above to give you long-term retention on their own. (And I’ve done a lot of problem solving.) Math is also a lot about building up the level of abstraction, and SRS can help with spacing the practice of lower-level concepts so you can more easily apply them to more complicated ones.
I’ve never been a fan of memorization in the past. However, I’ve found that:
1. Memorization (as in knowing foundational facts and being able to recall them efficiently) is actually pretty useful, as much as I didn’t want this to be true.
2. SRS can be used for thinking + deriving the answer to a card in addition to just memorization. It just gives you the right timing to do so.
IMHO it is a wonderful solution to a wrong problem (i.e. memorizing random things). Sure, there are use cases: learning words in a language one is not exposed to on a daily basis or cramming for a medical school exam.
When one actively uses something, there is a natural spaced repetition of the things that matter. With the frequencies as these things are used in practice. Everything else can be looked up later.
For programming, maths, physics, etc - "I forgot" means more or less "it is more time-efficient to google it once a few years than put effort in storing in in my memory". In programming, it is even more the case: libraries, their APIs, and good practices keep changing. Rote memorization may be highly counterproductive in this case.
> When one actively uses something, there is a natural spaced repetition of the things that matter.
So if you're trying to learn react, don't try to memorize the API. Just use react and you'll naturally have spaced repetition of the important bits. The unimportant bits that are rarely used you'll have to google when you occasionally need them.
Disagree: There's a grey area in the middle where it is costly to always look it up, but you don't do it often enough to ever be ingrained in memory. SRS is a fairly effortless way to cure it.
When I started my current job (somewhat math heavy), I didn't know enough background material. So I got put on a "side" project while I learn the main material. Unfortunately, that side project became fairly big so I didn't have too much time to study the bread and butter of that job. I would read a little from a text book every few weeks. Without SRS, there is no way that I would be able to do it. The frequency is low enough that natural reading would not preserve anything in memory, and it is one of those books that constantly refers to prior theorems/definitions.
> For programming, maths, physics, etc - "I forgot" means more or less "it is more time-efficient to google it once a few years than put effort in storing in in my memory".
You really cannot do mathematics well that way. When proving a theorem, you often will not even remember there is a theorem that could help you unless it's already in memory.
I once took a course on measure theory where it was a given that at least one question on each exam would be to prove a random theorem in the book. This was frustrating - since when should math require memorizing? And memorizing all the theorems? Sheesh!
When I was preparing for the final exam, I did attempt to memorize all the proofs. And then it hit me: There were certain proof techniques that were common to many proofs, and I had not picked up on it by merely doing the assigned problems.
This was a decade ago, when I did not use SRS (did try, but failed that time). Looking back at my experience in math courses, I realize that memory was definitely a bottleneck. Remembering certain theorems you took in a course a few semesters ago just wasn't happening beyond a certain young age (20). If I ever were to go back to math, I would definitely attempt some SRS use.
Of course, SRS alone won't cut it. You still need to solve lots of problems.
Oh, and after a decade of very heavy Emacs use, I tried using SRS to get better. And I did. A lot. So even heavy use isn't much of a guarantee that things will stick.
During my undergraduate time I knew people memorizing instead of trying to understand theorems (especially ones with background in chemistry). Often they got good exam results... and almost never it helped to build a bigger picture, or do research in mathematics.
That said, I have ADHD and any small-dose-but-regular learning (typical for classes!) was painful to me (and not to effective).
YMMV.
As I pointed out in another comment, this is a false dichotomy. You can do both. I contend that one who attempts to understand and memorize will know the material better than one who doesn't. The thrust of my argument isn't that it is necessary. It's that you will gain from it. Of course, if you make that your only tool in the toolbox, you will suffer.
And I never claimed that not memorizing will prevent degrees. I'm sure while in grad school you came across plenty of less capable people than you who nevertheless still got a PhD ;-)
In my case, well, if something really needs to be regular, the only way to go is external pressure (external deadlines, people meeting at a given time with the goal to learn) and bringing some intensity (instead of 1h learning, a day focused on that).
With enacs I find if it is not in my muscle memory it doesn’t matter if I consciously know about a feature. I can think “there must be some way of doing this” and then googling it and finding it as fast as I can stop my work and recall that in 2005 I used to have some good method of dooming this obscure use case of editing/process management.
Especially now with everything changing so quickly I find paying attention to the deep constraints and reserving the possible solutions from those conditions is more effective than trying to memorize a bunch of library or platform specific capabilities.
To derive things, you need to have memorized a basic set of theorems. As you go deeper and deeper, the "stack" gets bigger. If you only memorize the very basics, there's a good chance you will not be able to derive the deeper stuff whenever you need it.
If you are in second semester measure theory and you haven't ingrained a lot of the first semester of real analysis in your head, you likely will do poorly. Quick: When is a closed set not compact? If you do analysis a lot, you can easily answer this question. However, if you do it only occasionally, not knowing this will limit you (or even worse, and common, believing that all closed sets are compact).
I used to be in the camp of "Memorization sucks - just solve enough problems and it will stick". Its only recently that I'm realizing I was wrong. Everyone will have things stick if they do enough problems, but also everyone will have a different capacity for how much sticks. You'll hit your peak eventually by just solving problems, and a better memory will take you further beyond that small peak. Once you realize how effective SRS can be, you don't want to be limited by a poor memory.
> With enacs I find if it is not in my muscle memory it doesn’t matter if I consciously know about a feature. I can think “there must be some way of doing this” and then googling it and finding it as fast as I can stop my work
Often when reading the org mode manual I'll come across something that makes me say "Oh wow, I wish I knew this keybinding" and then would promise to remember it or look it up when needed. It's depressing how often I've said that about the same keybinding. Now that I use SRS, this phenomenon still occurs, but at less than half the frequency it used to.
Although to be frank, I now use hydra on Emacs often, so it's not as common for me to memorize keybindings.
> Especially now with everything changing so quickly I find paying attention to the deep constraints and reserving the possible solutions from those conditions is more effective than trying to memorize a bunch of library or platform specific capabilities.
Emacs is timeless :-) I will be using it for probably as long as I can use a computer.
But yes, I would be selective on what to put in SRS. Reviewing takes very little time, but creating new entries is time consuming. It needs to be worth it in the long run.
1) Understand the material I'm learning. 2) Put explanations of any algebraic procedures (for instance, the dot product of two vectors) as a flip card. 3) Put a single example of doing the work in a flip card.
For important proofs, I put them in Anki using Cloze deletion. I just drop in the whole proof, and knock out portions. This has been extremely effective in remembering and understanding the proofs. I also do this for geometric explanations of procedure.
This is definitely not overkill, and creates cards that you can go over really quickly. Ever since I have begun doing so, I have found that it is far easier for me to apply what I have learned, and that I can more easily understand the options that I have for finding solutions to problems, because I have all of the options available without requiring me to look over old information. It's just there.
Ever since taking Barbara Oakley's classes (Learning How to Learn and Mindshift), I have been a more productive and emotionally stable human being, and my ability to learn and understand the information that I am learning has exploded. One of the most important things I remember mentioned in that class was that memorization and understanding are actually quite tightly linked.
There are things that I have dealt with in the real world that would have been solved by math lessons that I've forgotten since I left University twenty years ago. I was never very good at studying because of anxieties and procrastination. The simple fact that I know I'm going to put information into Anki allows me to concentrate and gives me procedure no matter what I'm trying to learn, regardless of source (readings, lectures, etc.). I wish I had this ages ago.
Thanks - I still haven't used it for mathematics, but this is good to know. I do have a few proofs of theorems in statistics in my flashcards, but the whole point of the cards is to spend only a few minutes a day on them - and doing a few proofs requires a paper, pen, and time. So I keep those in a separate deck and do them only when I know I have time.
My concern with mere cloze deletion is that I'll likely get the illusion of understanding without real testing (being able to rederive something is a real test). I'll likely go for a hybrid approach - full proofs in a separate deck and either proof sketches or cloze deletion in the regular deck.
> One of the most important things I remember mentioned in that class was that memorization and understanding are actually quite tightly linked.
This stood out to me when I took the course, although my memory of it is different. I don't think she said memorization, but "covering it and reproducing it in your own words" - the latter requiring understanding. But yes, she claimed that the research showed this outperforms things like mind maps, and that nothing has so far been shown to outperform this.
What I’ve tried the last couple of attempts is to “chunk” the proof (also terminology touched on in Barbara Oakley’s course) so that I end up with a question that’s something like “what’s the high-level idea / approach in the proof for X?”. That card would likely require an understanding of some underlying concepts or “chunks”, so I add questions for these too until I get to something that’s less abstract and easier to rederive.
I’m still not 100% confident if this will work well when these particular cards get into the 6-month range or so, and they start showing up at completely unrelated times. My main concern is that if I’ve forgotten some idea from “the middle”, it would be hard to reason about cards that build up on top of that.
In the language learning example, Extensive Reading leads to not only picking up and remembering words, but also collocations, grammar and even cultural beliefs of the speakers of the target language. Single word flash cards miss all of that. Full sentence flashcards do a bit better but still fall short.
I think the best use for SRS for something like a language or programming is for laying down a scaffold in the very early stages of learning, and then moving to more productive uses of study time as soon as possible.
Systems, networking, databases, machine learning have fantastic resources available. I usually look up the syllabus of a course at Stanford or MIT and check out their recommended reading. Some professors publish their own books for free as PDFs as well.
All such information looks daunting at first. But then, over the course of time, things get connected, get familiar, and make more sense.
Take a small feature and fiddle with it, it will take some time, but eventually you learn really well.
Reading Cisco documentation is painful, but every word does matter. But it won't be worth the read if you don't know about the tech beforehand. Again talking from my own perspective.
> Because you should never ever think that you're clever enough to write your own locking routines.. Because the likelihood is that you aren't (and by that "you" I very much include myself - we've tweaked all the in-kernel locking over decades, and gone through the simple test-and-set to ticket locks to cacheline-efficient queuing locks, and even people who know what they are doing tend to get it wrong several times). There's a reason why you can find decades of academic papers on locking. Really. It's hard.
This is only about a single area of kernel development. While not really about how to learn something quickly, I still think one thing that's very important is keeping in mind that learning complex things takes time, potentially a lot, and that it all depends on your objectives, i.e. what level of understanding you want to achieve. So maybe your method of learning is actually what's working best for you. Maybe the speed at which you grasp concepts and internalize learnings is not as fast as you'd like, but maybe going faster would leave you with shallower knowledge.
That doesn't mean you shouldn't look for more efficient ways and methods of learning, but I think it's still important to keep in mind.
[0]https://www.realworldtech.com/forum/?threadid=189711&curpost...
Rinse, repeat.
Over time, your brain will make the connections between the parts and the patterns.
For example:
- 1st pass - I consume the materials as well as possible, and apply my knowledge. Typically, I have to look things up, some things are unclear, I can't remember much. Applying the knowledge is quite difficult. That's ok.
- 2nd pass - I return to the materials, re-read much less thoroughly. I realize some things that I missed, or got wrong. I apply my knowledge, without looking information up again. This is, from my experience, when I get most of deeper understanding, but also where I learn most things that I remember long term.
- 3rd pass - if necessary, I can go through the materials again, just like in the 2nd pass. Diminishing returns start to kick in.
- (3+n) pass - diminishing returns start to manifest even in form of being bored with the materials, and starting to build up mental dislike for the materials/topics.
The passes are effective if and only if they are some time apart. Ideally, they are spaced in increasing time, i.e. 2nd pass is a day after 1st pass, but 3rd pass might be 3 weeks after 2nd pass.
The above has been useful for me, for example, when learning math or when I started to learn development way back. Note that in all passes, knowledge is applied. Without applying the knowledge, I learn much much less (though not nothing).
It also assumes that you have quite good theoretical source of information (e.g. a math textbook) and practical problems (e.g. math problems with correct solutions). If you're missing one or the other, e.g. if you're memorizing history lessons for your history 101 test, I'm not sure how effective the passes are.
My reasoning is "I don't know what I don't know" on the first pass and my first goal is to understand that all of the things "exist", then how things individually work.
In defense of the other people here - often doing this properly involves a bit of a dense pre-read to make sure you can at least understand where these might be applicable. With a totally new area to you there's a big learning curve there.
Another trick I've learned is to find an older copy of a specification and read that first. Usually the older copies have less bulk, are more directly addressing the core conceptual issues, and are easier to read.
Sometimes if I want a rapid and superficial understanding I just go after the diffs or change notes for the last few versions of whatever it is. This can give a scattershot coverage of the contemporary state of the thing. It's not much but it's a place to start from.
For example, I put off SICP for a very long time due to not wanting to put in the time for the exercises. Eventually I just decided to take a first pass, and made I through in a month. Second pass did the exercises.
On the first pass, try to understand as much as possible, but don't push too hard if I hit a road block. It's OK to not fully understand or be hazy on key details after the first pass.
Then take a break, and ideally work on something else, sometimes for a for a day or two, until I feel ready to take another pass. Also, go for walks or watch a movie or do something else that takes my mind off the subject. Try to explain things to myself, to get a sense of which things I don't really understand.
On each subsequent pass, spend time only on those things I don't really understand -- until my little brain gets tired or I hit another road block.
Then take another break, and ideally work on something else, until I feel ready to tackle again. Again, go for walks or watch a movie or do something else that takes my mind off the subject Try to explain things to myself, to get a sense of which things I don't really understand.
Keep doing passes like this this until I can explain everything to myself because I fully understand it.
Throughout, I look for and rely on informal explanations, friendly tutorials, video lectures, and other auxiliary materials that can be readily found on the Web. Also, try to replicate experiments, do exercises, and/or write code if and when applicable.
My approach is best described as "long-term persistence."
IMHO mind maps are a more recent, dumbed-down subset of concept maps. I don't use them. My daughter has been using the 11x17” paper and pencil approach for the past few years to ace science and other subjects.
[0] https://en.wikipedia.org/wiki/Concept_map [1] https://vue.tufts.edu/
In a software context, first just get anything operating in the target space you are trying to learn and develop. Then expand that minor nothing piece of software to be just slightly more capable, and observe what adjustments were necessary in your thinking to get that minor adjustment working. Repeat this process of small iterative changes with a formal review of what you're learning, and at some point you'll realize you have developed both a body of knowledge and a small framework for further work, and probably several ideas how to "fix" your mini-framework. Now spend some time trying to fix the mini-framework and use that to solidify what you've learned. And throughout this entire process: take notes, review the notes, and observe the scientific method in your notes: meaning write down a hypothesis, test it, write down the test results, write down you thoughts on the test results, and repeat. The writing down portion is important, as the act of writing it into notes forces fragment sentences to be formalized, completed and that can catch incomplete thought processes, which are critical, as they are the edge cases that also need to be handled.
The first time was a real quick read-through - really more of a skim - just to get a sense of the overall shape of the subject.
Then I'd go back and actually read the bits that I needed to understand more thoroughly. While I was doing that one, I'd take some notes, because I find that helps a lot with retention. I wouldn't be trying to memorize everything here, more just trying to get a thorough enough understanding that I could quickly re-find information when necessary.
Finally, for anything I absolutely had to have in my head, I'd make flashcards. This part can be indispensable, but I tend to be pretty conservative about it. I'm fond of that (apocryphal, I think) Einstein quote about not memorizing such information as can be readily found in books.
1st pass is high level concepts, 2nd pass is more details, and third pass is anything I still dont know.
This is good because to remember something you need to anchor it to something you know. It's impossible to learn something in isolation, which is why you'll often become confused if you start from the details working yourself up. You simply have no context for the details.
There are four steps to the Feynman Learning Technique:
1. Choose a concept you want to learn about
2. Pretend you are teaching it to a student in grade 6
3. Identify gaps in your explanation; Go back to the source material, to better understand it.
4. Review and simplify (optional)
There are times that a technical manual comes along and there is a need to go off into the bowels of other technical information that is also provided and that to me does not help in any way. I must learn what I set my eyes out to learn and nothing more. The rest comes naturally as I begin to experiment and running into the same learning curve as others. That is when I begin to dig a little deeper. Again with all of the aids available, visual audio, reading and experimenting, until I feel that I have a strong grasp on that specific subject.
There is no secret, the only thing I suggest is to stay on it, and stay consistent. The more you do it the more understanding you will get. There is truth behind "practice makes perfection".