Live data from Hacker News

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

news.ycombinator.com

121–130 of 181 posts

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

#121
post #105

Earlier quoted context omitted.

It's a weird feeling when I don't know how to do something so I practice a lot and I then still don't "know" how to do it but somehow I can do it.

Then the best part comes next: you read some more theory again, and suddenly it connects - the abstract becomes understandable in the context of pains and solutions suggested by gut. And now you have a solid piece of understanding you can reason from.

I always save the big picture books for after a bit of successful hands on stuff. Often then i want to go back and redo the original learning efforts.

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

#122

I guess my method for new frameworks / languages / etc is sort of a combination of top down and bottom up. I start with very high level overview, followed by a very simple tutorial, then work my way up in the hands-on path, and work my way down in the reading and theory path. One reinforces the other, so the reading does not remain abstract, and the practical has context.

For an actual framework I always like to step thru a typical unit of work line by line in the debugger, from accept to write (I mostly do server processes). It is surprisingly illuminating to see how IO is managed and hoe the layers interact and fit together. It gives data to build a robust mental model of the framework. This is why I weep when I see some Spring backtracks with 100 or so stack layers.

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

#123
This is mostly related to systems or data modeling, but what works best for me is drawing diagrams that have lines which connect all the related components. Whether it’s call stacks, data (or energy flows in the case of circuits), or data models. I usually use a pen and paper. You’ll probably make mistakes or run out of space on the first attempt but that forces me to redraw it a few times which helps with memorization.

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

#124
post #65

I do not have advice directly addressing your question about how to read, but I will say this: A lot of this complex-dense-technical stuff is difficult precisely because it can get abstract. That is true for example in writing proper C for kernel development (your field) and physics (my old field) and chess (everybody's field). My solution is to do lots of exercises and learn lots of examples before learning these bi…

>You have to take on the pain before the learning can alleviate it, if you try to skip the pain then you have only a superficial idea of what you're talking about. > [...] > Each of these tasks I am setting for myself needs to be answered by consulting tutorials and references, but if I just follow a tutorial I will not build true knowledge, I will just know how to do things when someone is holding my hand.

That makes so much sense, thanks for the advice. I struggle with this too much nowadays, I just try too much to reach perfection too soon when learning new technologies. Thinking about this made me realize how this wasn't how I started when I was younger. I wasn't going for perfection, I was going for something that worked. Slowly afterward I learned the more technical parts, mostly by need, and the best practice, first by need, but then by desire. Nowadays I think that because I can handle some pretty technical knowledge, I can start by learning that, but seems like I waste quite a bit of time doing this and it just doesn't stick in my head.

Next time I'll learn something, I'll start that way, a crude experimentation, and then see from there the next steps. Screw the best practice, that'll just be another experimentation down the line, could even be some rewrite of previous experimentation.

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

#125
You can learn big systems by tearing it down to subsystems, and learning them one-by-one, the same way how you would split a big implementation (waterfall) into small steps (agile).

Here is a concrete example how I learned Kubernetes:

1. I tried to get an overall sense of what is it: "Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications." - Ok that makes sense, but don't know what big part is it made from.

2. What problems does it solve and why? what are all the solutions? What features does it have?

3. What is the overall architecture? What parts does it have? API server, scheduler, controller managers, etc...

4. I installed it so I had to learn networking. What is a network plugin? How do they work? Learned most things which needed to running them.

5. What is the structure of it's API? You don't need to go into great details, just to see the big picture, like main api endpoints: /api/v1, /healthz, /logs, etc, etc...

6. Kubernetes Objects model high level overview. What are objects in Kubernetes? What Fields do they have? What are Controllers, Pods, Labels, Deployments, etc.

7. Authentication. How does it work, what methods does it have?

8. Services

9. ...

And so on. So basically you take ONCE concept at once and read everything until you feel you got the thing. For example, if you already understand the overall concepts, you can dive into what a Pod is by reading the article about it. I usually try to read the minimum number of manual PAGES until I confidentially grasp the entire concept I want to learn about.

By splitting huge and complex systems into small subsystems like this, you can become productive much sooner. Don't try to understand the whole thing at once.

You said you want to learn "kernel development". That's not gonna work, because the kernel itself consist of I don't know, thousands? of subsystems. So try to get an overall feeling. What are those subsystems? How can you split them into easy-to-digest parts? What is a driver? What parts does it have? What data structures are in the kernel? So if you try to learn "kernel development" from day one and learn "kernel development" until you can "develop for kernel", it won't work. First, you need to know what you don't know. :)

This is to verbose, but hope it helps.

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

#126
post #64
post #24

Earlier quoted context omitted.

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…

> 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 jo…

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.

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

#127

This is mostly related to systems or data modeling, but what works best for me is drawing diagrams that have lines which connect all the related components. Whether it’s call stacks, data (or energy flows in the case of circuits), or data models. I usually use a pen and paper. You’ll probably make mistakes or run out of space on the first attempt but that forces me to redraw it a few times which helps with memorizati…

Lucid charts is outstanding for this sort of thing. First diagramming tool I have found that competes with white board for brainstorming / fleshing out protean ideas. It is easy to use - you rarely think about it and like can stay in the problem/solution space.

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

#128
post #65

I do not have advice directly addressing your question about how to read, but I will say this: A lot of this complex-dense-technical stuff is difficult precisely because it can get abstract. That is true for example in writing proper C for kernel development (your field) and physics (my old field) and chess (everybody's field). My solution is to do lots of exercises and learn lots of examples before learning these bi…

I totally respect your opinion, but I think I fundamentally disagree with the idea that learning = pain. Project-driven learning seems more effective when the project is something that excites the learner. I might suggest that your ability to learn test-driven development in Go is actually driven by the fact that you're interested in Fibonacci calculators.

> I think I fundamentally disagree with the idea that learning = pain

I'm not OP and my interpretation is probably not what he meant, but when I saw that line, I wasn't seeing learning as pain, but more so as living the pain that justify the better practice.

> Project-driven learning seems more effective when the project is something that excites the learner.

I agree completely on that, but we can easily screw up that part by going too technical too quick. It transform a quick and fun project, into something much bigger (learning take a long time) with much less direct result. Fibonacci is a great example I think because it's so quick to achieve, there's so much potential to improve it in multiple ways, and it doesn't require much technical knowledge of the development environment.

When I tried learning React, I was going for a fun quick project, but then I thought, well if I'm going to do that, I'll go with some database to store my data, an authentication layer seems also an obvious requirement, all deployed in dockers, with some server rendering, etc... Which individually all could be quite simple to add in crude ways, but theses decisions all stemmed from the fact that I wanted to reach perfection from the beginning, which make all theses individual feature now become something much bigger and much more complex to reach. If instead I just do the same project, no database, just a big array that I modify, stored in a cookie, no authentication, no dockers, no server rendering, I can build it much quicker, and thus learn what I need to improve much quicker too. Afterward I can add a database if that's what I want to go for, and then authentication, maybe some server rendering afterward and maybe, a docker to deploy it easily.

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

#129

I guess my method for new frameworks / languages / etc is sort of a combination of top down and bottom up. I start with very high level overview, followed by a very simple tutorial, then work my way up in the hands-on path, and work my way down in the reading and theory path. One reinforces the other, so the reading does not remain abstract, and the practical has context.

For an actual framework I always like to step thru a typical unit of work line by line in the debugger, from accept to write (I mostly do server processes). It is surprisingly illuminating to see how IO is managed and hoe the layers interact and fit together. It gives data to build a robust mental model of the framework. This is why I weep when I see some Spring backtracks with 100 or so stack layers.

I was reading the first half of your comment and immediately went "but.. but... what about those huge Java stack traces?".
Post reply on HN