Ask HN: How do you learn complex, dense technical information?

420 points by _benj ↗ HN
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 ] thread
Learning new things just takes a lot of time. In my experience the method doesn't really make a huge difference. Your conscious effort is the part you control, the unconscious effort you also need to make is not really something you can force. Don't forget to rest/sleep so there is time for your brain to process things in the background.
proper C, get Zed shaw's book python the hard way it has a good deal on proper C coding.
what? zed has an entire series 'learn c the hard way', ignore the python stuff. it'd teach you modern c, but even going completely through that would leave some gaps of whats used in kernel code
I've learnt recently (not much former higher education) the power of making long hand notes on pen and paper. It helps me connect with and think through the material and take it in at a pace I can process it.

It'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 second this.

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.

There is a reason for that I've seen articles on it. If you take notes using a pen to write on paper you retain more. Using a computer to type notes into a text application is terrible. There is a disconnect between listening, then looking to type (or at the screen).

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-...

I've experienced something similar though I find that I hate my handwriting and messy notes.

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.

> then looking to type (or at the screen)

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.

I do this by creating a side project with a concrete objective. I then do my best executing the side project.

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.

I'm a big fan of the idea of using Spaced Repetition for this. The idea is that it allows you to both:

- 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

I second using SRS--it's been very helpful for me to remember API minutiae or commands that I would otherwise have to google each time I needed it.

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.

SRS is great for memorizing truly unconnected pieces of information, like names of capital cities.

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.

I find that my brain sort of automatically uses connections. The really interesting thing about SRS is that you don't have to consciously think about how you're going to remember the cards. Like, you don't consciously think, "Ok, what's the pattern here, how can I turn it into a mnemonic..." Rather, your brain subconsciously does that for you.
I have used SRS and found it powerful, but not that powerful. SRS only commanded the times of rehearsal but not the way memory consolidated. And it consolidated by creating connections. So I needed mnemonics, prompts and all the likes, on top of SRS.
> 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.

It's not a false dichotomy because time is limited.

Every minute spent on flashcards is a minute that cannot be spent on more contextualized study.

> 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.

> it's a lot better to use those connections instead of drilling it in a decontextualized fragments via SRS.

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.

Maybe this will be a clearer explanation of what I said: https://alchemist.camp/learning-machine/spaced-repetition-sy... (starting at 11:27)

> "[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...

Cool, I’ll take a read.

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.

Personally, I am a big anti-fan of the Spaced Repetition.

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.

Do you have any suggestions on alternative methods, personal or otherwise?
Their suggestion is in this sentence:

> 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.

I agree, but with something like react, I may use SRS to memorize the order of the lifecycle methods, etc.
> 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.

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.

Well, I finished a mathematical physics PhD, without a hint of SRS.

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.

> During my undergraduate time I knew people memorizing instead of trying to understand theorems (especially ones with background in chemistry).

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 ;-)

I would be curious as to any techniques you used to overcome this painful regular learning. I find certain 'plain' tasks (for lack of a better word) excruciating.
Read "Driven to distraction" https://www.amazon.com/Driven-Distraction-Revised-Recognizin..., you may resonate with some of these points (even if you don't experience a full-blown ADHD).

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).

Hmmmm. Maths is one area where I have felt you hurt yourself by remembering things (except maybe definitions but then usually people state the current in scope definition in the preface or something). You can derive most things about as fast and more usefully than you can remember it. Except maybe a couple identities per area. But these will tend to be beautiful enough you will run over the derivation just for pleasure from time to time.

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.

> You can derive most things about as fast and more usefully than you can remember it. Except maybe a couple identities per area. But these will tend to be beautiful enough you will run over the derivation just for pleasure from time to time.

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.

My general practice with mathematics is and Anki is to:

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.

> 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.

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.

I’ve done some cloze deletions for math and related things, but I generally feel like having almost the whole proof in the prompt gives me too many cues. It often leaves me thinking that I indeed wouldn’t be able to come with the answer with fewer hints.

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.

"Covering and reproducing in your own words" is a combination of recall and synthesis, both necessary for remembering. This was a different section, and it might have been the Mindshift class, where she mentioned in US schools, we focus too much on understanding and conceptualization, while in Chinese schools, it's mostly memorization. Unfortunately, the two ideas only really work optimally together. Either model produces extremely well educated on occasion, but if you use both, then anyone can not only educate themselves well, but retain it for a far longer time period. Further, understandings of subjects are compounded by the memorization process. In my own practice, I've found this to be true, but that's anecdotal. Some nation is going to get their act together and try this on a larger scale, and I can't wait to see the output.
(comment deleted)
Yes. This is spot on. Another issue is losing the larger picture.

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.

Complex and dense? Wrong crowd, this in HN.
Only ever by trying to do something with it. To learn information you have to have a ‘hook’ to hang it on.
for topics that are well established, I highly recommend using a textbook! Since a college or grad level course is intended to give someone a lot of background, historical and otherwise, they tend to cover a wide range of information and can be more efficient than piecing together knowledge from blog posts and reference docs.

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.

(comment deleted)
Time and practice, there is no shortcut.

All such information looks daunting at first. But then, over the course of time, things get connected, get familiar, and make more sense.

I can't read the information to understand, I need to try out, make it work/break it/ make it work again. If not it wont get stuck.

Take a small feature and fiddle with it, it will take some time, but eventually you learn really well.

This is how I learn mixed with understanding the tool / framework / language from a first principles point.
Which means that for me, dense technical documentation is useful when I know how to read it.

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.

Quoting Linus on a topic directly linked to what you're studying[0]:

> 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...

Dive deep into some aspect of it. Doesn't really matter which, so find something interesting and dive in, even if it makes no sense. Do that for about an hour or until your head feels tired, then leave it until tomorrow.

Rinse, repeat.

Over time, your brain will make the connections between the parts and the patterns.

I think time plays a role. Trying to learn complicated stuff fast usually leads to not learning them well enough, in my experience. If I do so, jumping to wrong conclusions or applying a method on the wrong place/in the wrong way is almost guaranteed. So just keep reading, studying, picture yourself explaining it to a classroom, talk about it to colleagues and friends, engage on discussions about it online. Eventually you'll master the craft before you know it, and the good part is that such things may be on constant evolution and there will always be something new to learn. Just avoid being that one trick pony that knows a lot about one specific topic and that's it.
I am fairly sure this is not the optimal way, but I've been learning complex information/structures in passes.

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.

I do this in reverse. First blaze through reading with very little comprehension, then go back thoroughly.

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.

This is my philosophy as well. Start by touring the forest quickly, then go back to appreciate the trees. When learning technical material, the first pass means skipping any exercises.
This is my exact approach - get familiar with the vague concepts and where you might use them, having lots and lots of these concepts to dig through in your head can be extremely helpful - then go back and learn in detail when it seems like one might be applicable to a given situation.

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.

I do the same. First pass is mostly getting a feel for what the extents and pieces in the system are, and getting familiar with the vocabulary. Then one can search targeted and efficiently afterwards when working on a task.
I also do this. A trick I've learned is to grab a PDF or Word or any editable copy of a document, then highlight sections with various pastel shades to indicated "don't care", "maybe care" or "get deep". Then on the second pass I can focus more intensely on the sections I need to get deep on.

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.

This describes my process as well. I'd add that one of the huge benefits of the 1st pass is that it is low pressure. You just have to get through the material.

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.

For me, it takes multiple passes too, but their quality varies significantly depending on how familiar I'm with the subject. If the subject is challenging and truly new to me, my approach is more or less like this:

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."

Overall similiar to this, except I get a pencil and a couple of sheets of 11x17” paper and I incrementally build concept maps[0]. These help me memorize entities and relationships, identify abstractions, chunk details, etc. I also use Visual Understanding Environment[1] and there are other good concept mapping tools available.

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/

I use a process I made up based on how suspension bridges are built: 1) literally an arrow is shot from one side to the other over the span the bridge is to occupy, and that arrow has a kite string attached; 2) the kite string is used to pull a thicker piece of twine; 3) the twine is used to pull rope and the rope is used to pull steel cable; 4) with the steel cable in place, the large scale bridge construction can begin.

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.

When I was in grad school, I fell into a habit of going over everything up to 3 times.

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.

I use the 1st, 2nd, 3rd pass methods but use SRS.

1st pass is high level concepts, 2nd pass is more details, and third pass is anything I still dont know.

I use the several pass method where each pass is a deeper dive. After each pass I write down or review what I have learned before moving to the next pass. I also like going from the full scope down to the focused details in steps. Finally break the big parts down into sub parts. In some cases I identify the parts I understand and then build out to the parts I don't know.
Go from the big picture to the small. Begin by summarizing the information on a high level, then start drilling down in select areas but always be sure you know where it fits in the big picture.

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.

I’ve found that I’m able to absorb math and programming resources well, but I approach each slightly differently. With math, I pick up a textbook and read through the exposition, trying to work each sample problem based on the explanation before I read the author’s solution, then compare my solution with his. Then, of course, I work as many sample exercises as I can. With programming, on the other hand, most of the materials don’t (unfortunately) include sample exercises, so I at least type in each sample program by hand rather than cutting and pasting them. Then, when I run it, I try to modify different parts to make sure I really understand what they do - that is, I try to predict what making each change will do before I do it, and then verify whether or not I was right.
https://fs.blog/2012/04/feynman-technique/

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)

Everyone learns differently with a combination of what you mentioned. visual aids, auditory aids, reading. There is no secret to learning only that you are consistent.

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".