<story><title>Ask HN: How do you learn complex, dense technical information?</title><text>When in the past I&amp;#x27;ve picked up a reference manual or something of the sort I&amp;#x27;d go slowly, lookup every word I didn&amp;#x27;t understand and started experimenting as soon as possible.&lt;p&gt;But that is quite time consuming and intense.
I&amp;#x27;ve been considering skimming through the whole things to get kind of a big picture of what the thing is and where I&amp;#x27;m going and then going back a second time to catch then the details and experiment.&lt;p&gt;Any other ideas? How do you tackle learning something new and complicated?&lt;p&gt;(ps. the complicated thing for me right now is kernel development, including writing proper C)</text></story><parent_chain><item><author>crdrost</author><text>I do not have advice directly addressing your question about how to read, but I will say this:&lt;p&gt;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&amp;#x27;s field).&lt;p&gt;My solution is to do lots of exercises and learn lots of examples before learning these big theories. Essentially I think learning is fundamentally Pain. 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&amp;#x27;re talking about.&lt;p&gt;So like if I am learning Go, I am writing a command line Fibonacci calculator in it, then I am rewriting this ground-up with test driven development so that I can learn what testing looks like in Go, then I might try to build an HTTP server, then I might connect it to a database, then I might learn how to mock the database. 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.</text></item></parent_chain><comment><author>dwild</author><text>&amp;gt;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&amp;#x27;re talking about.
&amp;gt; [...]
&amp;gt; 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.&lt;p&gt;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&amp;#x27;t how I started when I was younger. I wasn&amp;#x27;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&amp;#x27;t stick in my head.&lt;p&gt;Next time I&amp;#x27;ll learn something, I&amp;#x27;ll start that way, a crude experimentation, and then see from there the next steps. Screw the best practice, that&amp;#x27;ll just be another experimentation down the line, could even be some rewrite of previous experimentation.</text></comment>
<story><title>Ask HN: How do you learn complex, dense technical information?</title><text>When in the past I&amp;#x27;ve picked up a reference manual or something of the sort I&amp;#x27;d go slowly, lookup every word I didn&amp;#x27;t understand and started experimenting as soon as possible.&lt;p&gt;But that is quite time consuming and intense.
I&amp;#x27;ve been considering skimming through the whole things to get kind of a big picture of what the thing is and where I&amp;#x27;m going and then going back a second time to catch then the details and experiment.&lt;p&gt;Any other ideas? How do you tackle learning something new and complicated?&lt;p&gt;(ps. the complicated thing for me right now is kernel development, including writing proper C)</text></story><parent_chain><item><author>crdrost</author><text>I do not have advice directly addressing your question about how to read, but I will say this:&lt;p&gt;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&amp;#x27;s field).&lt;p&gt;My solution is to do lots of exercises and learn lots of examples before learning these big theories. Essentially I think learning is fundamentally Pain. 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&amp;#x27;re talking about.&lt;p&gt;So like if I am learning Go, I am writing a command line Fibonacci calculator in it, then I am rewriting this ground-up with test driven development so that I can learn what testing looks like in Go, then I might try to build an HTTP server, then I might connect it to a database, then I might learn how to mock the database. 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.</text></item></parent_chain><comment><author>freedomben</author><text>I approach languages in a similar way.  I will often start with solving Project Euler problems in the new language, then I re-implement my perennial favorite project (a password manager) using the new language (mostly the server side and command line client). It&amp;#x27;s a long and hard way to do it, but I actually learn the language instead of knowing how to copy paste from Stack Overflow and Google even little things like &amp;quot;How to get substring in &amp;lt;lang&amp;gt;&amp;quot;</text></comment>