Ask HN: How do you personally learn?

190 points by tchaffee ↗ HN
My short list of the skills that have helped me the most in my career as a software engineer is not sorted. But the ability to quickly learn things is easily on that list. With technology constantly and rapidly changing, small improvements in the speed at which I learn things can have a big and cumulative impact on my productivity. But we rarely discuss personal learning strategies. What are your personal strategies? Please consider mentioning even what you consider to be dead obvious. It might not be to others.

82 comments

[ 2.8 ms ] story [ 174 ms ] thread
I'll start with a few off the top of my head:

- Make sure it's something I'm interested in learning. There is no substitute for passion.

- Find a hero. Find someone who is already an expert and attempt to get as good as they are. But be realistic that you don't ever need to become as good as they are. It's just something that helps you focus on where you are headed.

- Have a list of other things you want to learn. You will get stuck a lot in the beginning and it's better to just quickly switch to something else when you are stuck and let your subconscious work on what you are stuck on. Sitting in front of a screen frustrated and trying to get unstuck is usually a big waste of time.

- Go for a walk. Some of my best thinking is during a walk. And there's mounting evidence that exercise generates new neurons.

Deconstruction. The ability to break something down into its smallest parts, and understand how the relationship of those parts makes something tick, will teach you how it works. It also them gives you the ability to innovate, as when you put the parts back together, you can do so in new ways.
This is a great one. It's actually so important it's a separate item on my short list of top skills. I have it as "ability to debug", but "ability to decontruct" is a better and more general category. Thanks!
Through a series of costly and humiliating mistakes
I like this because it's exactly what I asked for: don't leave out the obvious. Great point for brainstorming.
seconded this method for me. Hopefully more of the humiliating and less of the costly.
I try to understand things as deep as possible, often that goes together with building it myself. I am not satisfied with “that’s the way it works”. That worked well for a lot of things, I often read other people’s code to see how stuff works. This approach is the reason why I refuse to use Kubernetes; I wasn’t able to understand it, it has just been too complicated so far.
I've been doing an audio blog on just that topic: https://alchemist.camp/learning-machine

I've experimented a lot with MOOCs, OCW, spaced repetition, paid courses, teaching strategies, etc. The specific ideas I've recently been most focused on when learning are:

- The depth of processing. I learn much faster and retain the knowledge/skills longer when I take a very active approach that involves deeply processing the material I'm learning.

- Making my studies more game-like. Games are fantastic, not only for motivation, but also for learning.

- Tightening my learn-use loop.

> when I take a very active approach that involves deeply processing the material I'm learning.

Can you give a concrete example of what that looks like?

Sure. If I'm reading, I ask myself what I expect the author to suggest or I ask myself specific questions I think the chapter could answer. Then, as I read, I update my priors.

If I'm taking notes, I'll do it by hand (which leads to better retention of information than typing), and I do it in cursive (which involves deeper processing than printing). In the past I tried taking notes in another language, but that was too slow.

If I'm learning a language, I'll try to spend more time listening to audio instead of watching video. When working on pronunciation, instead of just trying to say a phrase "correctly", I'll try to say it like a specific actor in the way they would with the same pacing and the same facial expressions.

If I'm learning a web framework, I'll take breaks from reading guides or docs to rewrite something I've previously written in an older framework. Then I'll go back to the guide.

For most skills, I absolutely must have a small project in mind from the beginning. I have no patience for learning a new language or tool if I don't have a particular project that uses it.
I can learn things quickly. Read a few chapters, poke at some code, make something work.

I do however need a few months to _understand_ something. I have found that this "incubation" time works well for me, and I find myself far more comfortable with the subject afterwards.

My most productive learning has happened while I was deeply invested in creating something new. Being a bit thick, I would run into obstacles almost every step along the way, but being thick has its benefits: the obstacles break down before my skull does.

I've tried going through books and courses, thinking, ahh, it's time to get serious, I must Learn JavaScript or Learn C or what have you, and this never gets me very far. But if instead, I decide to Make Thing, where Thing just happens to require C or JavaScript, now I have a point, a purpose, a destination, and though there may be headaches, I know that they are worth it, and I get where I'm going in the end.

I only learn when I have a project in mind that I want to do. No matter if it’s work on or around my house, creating an app or designing something like a logo or interior. Then I just start. Walk into a wall. Stop. Look for learning material or inspiration. Start over.

Reiterate. Learn more. Reiterate.

I’m not easily frustrated by failure, starting over or general lack of progress. If I have an interesting goal I just keep going. It might not be the most efficient way, but it’s how I learn best.

> I’m not easily frustrated by failure or lack of progress.

That's one of those very obvious but super important things I was looking for. I would have never thought of this myself, but it's one of the most important factors in my own learning too.

Same here, and I'll add ask questions (to yourself or whoever you can). Lots of questions. When there is something you don't understand, find out first.

This is not limited to IT. You can also apply that to other domains.

In my experience, that's the best way to learn. I think a lot of people are scared off by intellectual challenges that seem insurmountable because they underestimate what persistence can do.

I think my most important lesson in uni was not to give up, even if you feel like the subject matter might as well be in a foreign language. I distinctly remember sitting and reading documents on cryptography for a larger project and it was all more or less unintelligible to me. When it was over I explained all of those concepts and more during my presentation, and even got the highest possible grade.

That was accomplished by simply repeatedly banging my head against all the theory while researching it and reading different explanations and trying to go at it from different angles.

Start from examples almost immediately. If you start with the foundation or background, you'll lose me almost immediately, because I lack the context to tack the new knowledge onto.

Show me what we're doing/how we're using this knowledge, and very frequently I'll start thinking "hmm I wonder how they do that, I bet that's why we have to do XYZ first." Then you learn about it, you've had a moment to think through it in your own, and now you have plenty of context scaffolding to stick to.

My strategy is roughly: Figure out what is the hardest part and do that first. Spend a lot of time to do it right. Then iterate until there are no hard parts left. Or in other words, don't waste time doing things you are already good at.
To anyone experienced and good at something, this is such an ingrained habit it's one of those obvious things we easily forget. Average musicians practice the song over and over, great musicians practice the hard part over and over.
For me it’s 20% what everyone else is saying and 80% stack overflow. For real.
Yes! SO is one of my biggest learning resources. I'll go into a little more detail: the minute I want to learn something I start looking on SO for questions to answer. Yep, questions to answer. I can't answer any of them at the beginning, but I sort of try to brainstorm it a little and guess at an answer. And when someone else does answer, I learn a little. Eventually I can start to actually answer a question here and there. Sometimes I get it wrong and people correct me. And that's another learning experience. Repeat on a daily basis or even several times a day and it hugely increases my learning rate on any give tech topic.
What I love about stack overflow is that when you have a technical decision to make you can get a really thorough understanding of all of the pros and cons.

And if people are arguing over which solution is better, its even more valuable, because then you get to learn about all the hidden nuances of each solution and when they matter.

For difficult subjects, or stuff I might not work on immediately, I go through a book or class and take COPIOUS notes.

The idea is that they're good enough for me to use to explain the subject to someone else; the old proverb about "You only understand something when you teach it to someone else" is really true.

Some really random, obvious things I do:

- I really look for learning materials that have diagrams, or videos. Plain-text blog posts and documentation are really obtuse for me to actually grok what's up

- I've got into a good habit of writing (with a notebook and a notes app). I actually do weekly check-ins, almost like "sprint retros", just for myself. Sometimes they're silly, but they're handy to crystallize whatever I was thinking about the last week

- If I want to learn a programming language or framework, I try to build something I'd actually use, or something someone else can use. It's a useful motivator!

Also, checking HN is a good way to stay on top of things :)

I tend to run when I take a lunch instead of shoving food in my face (I sit at a desk, I can do that whenever I want), and almost all my "break through" moments happen on the treadmill. It's a little frustrating, to be honest. All I'm trying to do is to not think about running, and consequently how much I hate it. BAM! Something clicks, and the solution to something I wasn't even thinking about comes to mind.
Does anyone have a system they would recommend for organizing physical notes that backs them up in the cloud?

I take a lot of notes the old fashioned way because I find it helps my retention, but they can pile up fast when I'm particularly busy.

I use syncthing across various devices and organize a group of folders with markdown files in them, then view / edit them with a markdown editor.

Super simple, free, and the best note system I've used so far.

I directly take notes online. See here: learnook.surge.sh

Then in the chapter 2019.

I have used the Things 3 app on ios because it lets me organize notes by area/projects.

For notes on books, I still take those on paper

Good idea for a personal sprint retro.
Plaintext vs diagrams or videos vary greatly by person.

I for example cannot stand videos at all when it comes to learning - it is either too drawn out, or too distracting - and i actually prefer plaintext. On the other hand i have few friends who absolutely cannot stand plaintext and need a good video, or real life interaction to learn.

The one thing in common in most posts is your 3rd point - build something that you want to build - that's the best way to stay motivated.

On a subject of notetaking - i really like recursive approach to notes:

* summarize the source

* read the source(n-1) and your summary(n)

* do a summary of your summary and repeat this process

I do it few times, depending on complexity of the subject.

This is me- for learning 3d graphics (Maya, Blender), video tutorials are far more prevalent but less useful. I understand the ease of just starting a screen recording, but it's such a pain to pause the video every time I get behind. Text-based tutorials (with screenshots) require more planning on the part of the creator but seem more informative for me.

Now with math or science, video tutorials seem to better teach me.

I don't have time to do a proper write up this morning but I've got a pile of brain dump for you.

First, learn to operate your "hardware" efficiently.

Look into NLP (Neurolinguistic Programming, it gets some crap for being pseudo-scientific, which is not entirely undeserved, some NLP folks play fast and loose with science.) I recommend this book, but there are others: https://www.goodreads.com/book/show/3803577-get-the-life-you...

Also, investigate self-hypnosis. The biggest mistake people make is trying to think with only their conscious mind.

Next, what kind of learning? Most of what you're talking about is "little stuff", really. Learning on the level of values or identity is much more powerful and far-reaching than picking up a new habit or skill.

Levels of learning, from most profound and general to most specific:

    identity
    values
    beliefs
    capabilities
    behaviours
See also Gregory Bateson's work, this seems a decent source: "Bateson’s Levels Of Learning: a Framework For Transformative Learning?" Paul Tosey, University of Surrey https://epubs.surrey.ac.uk/1198/1/fulltext.pdf

Fun stuff:

"Programming and Meta-programming the Human Biocomputer" John C. Lilly (YMMV)

"Psycho-cybernetics" Maxwell Maltz This is based on self-image modification. Dr. Maltz was a plastic surgeon who noticed that some people had profound psychological changes from cosmetic surgery while others didn't. Upon investigation he discovered that the difference was whether or not the external change in appearance affected their internal self-image. The surgery was a (hellof a) way to effect change in the patient's self-image. So he started teaching people how to do that directly, so they didn't need the cosmetic surgery.)

"Super-learning" Ostrander, Schroeder, & Ostrander Old but interesting stuff.

+1 for the excellent Maxwell Maltz
take 3 months off and do a project that requires a new skill

this may be a personal observation (not sure it's industry-wide), but companies are averse to letting in-house people apply new skills on the job. They can even be averse to reading and experimentation during work time. Even when they're cool with it, the work day isn't structured for heads-down time.

Most managers have little patience for intentional 'try fail' cycles.

structured work is especially hostile to category jumping -- for example, I switched from high-speed finance to web, I picked up marketing & branding knowledge, from self-started projects. It would be hard to seriously try these at a job but they've paid dividends in my career.

there's a forgiveness / permission spectrum here but interrupting an ongoing job for 'mini grad school' has been the way that I keep fresh and make vertical jumps in my programming / tech management career.

I use my wiki (https://philosopher.life) to help me reason about everything. Some things take a long time to discover or digest, and I like that I get to structure the path that I take.
I saw "stoic" and "bayesian" in the first 5 minutes of browsing your page. That's enough for me to decide to spend some real time digging into it later.

I'm looking forward to digging your brain!

I make a plain text file of a certain topic (e.g chess, economics, politics) and progressively add my own thoughts on in it and useful info I get from others (books, videos, lectures). A lot of early modern thinkers had this thing called a commonplace book. like John Locke, William Paley, Jonathan Edwards, Leopardi, Bacon, Emerson and Thoreau. I think it's a pretty good way to learn. I prefer having a digital version of it since it's much easier to access and I don't have to worry about losing it.

https://en.wikipedia.org/wiki/Commonplace_book

1. When learning something, learn it in small chunks — like reading a chapter at a time from a book. Then write things down on paper and review regularly.

2. Keep a bullet journal[1] for learning new things.

3. Try explaining what you learn to your spouse, friend, coworker, and see if they can understand it. If you’re able to explain it in simple enough terms then most likely you have mastered that. Also, teaching reinforces your knowledge.

[1] https://bulletjournal.com/

I learn with the classic read (or watch), do, repeat loop.
I just keep writing code, glancing at docs when needed and try to spend as much time as possible actively using the thing I'm learning instead of reading about or getting stuck in "what if" scenarios. In most cases writing as much code as possible (and looking up things as needed) will help you learn things faster than sitting back and reading.

A few days ago I wrote a post on what I learned from 7 programming languages over 20 years[0]. It kind of touches on the process of learning and takeaways. I almost always have a project in mind to build when learning something new.

Basically I'm not afraid to experiment. I don't think it's a problem to write code and then throw it away, or spend weeks learning how to use something to ultimately throw it away. You almost always learn something you can apply to something else which is really the main takeaway from the post.

[0]: https://nickjanetakis.com/blog/it-is-not-a-waste-of-time-to-...

I learn best when I make something as soon as possible, however basic. Then after a while I go back, find the best book on the subject I can find, and read it from start to finish.

For example: JavaScript. I procrastinated learning JavaScript for years. It was intimidating. Then jQuery came along, which is not exactly JavaScript, but it was easier to pick up. After several months, I was ready for the next step. I bought David Flanagan's book, JavaScript: The Definitive Guide, and just started reading it from the beginning. I don't know if I actually finished it, because the second half is reference, but I at least skimmed that part.

Copying snippets from the Internet will get you started but leave your knowledge patchy and even wrong. Eventually you need to read an organized and thorough tour. For example, I would never have understood JavaScript's prototypes by copying snippets.

On the other hand, if I had tried to start on page 1 of a thick book, without hands-on experience, it would have been equally unfruitful. It would have been too abstract. With some practice under my belt, the advice in the book had something to adhere to, in my mind.

At a micro level I learn by doing. Just building stuff, trying to extract general principles as I go.

At the macro-level, I try to learn things where I can transfer knowledge as much as possible. It's easy with software development, as critical and computational thinking and top-down/bottom-up reasoning can be used everywhere.

Personally. Spend a lot of time on a topic and choose a small amount of things. Don't let the list of things you want to learn grow too larger before things are ticked off.
Scanning before reading getting a idea what it is going to try and teach me before actually reading it.

Writing down every word I don't know/understand and getting comfortable with them.

Playing with the subject matter.

Discussing the subject matter with people.