What's your process?
1. Explore the subject almost randomly. Neither depth-first nor breadth-first; just follow threads that seem most useful or most interesting. Books, articles, videos, classes, whatever - it doesn't matter as long as you don't get bored. Dabble in all of them. If there are any practical skills involved (motion, writing code, etc) start doing those immediately.
2. At some point you get the ah-hah! moment. It is like the fog lifts and you can suddenly see the landscape. You don't know everything but now it seems like further knowledge is just a process of filling holes. You wield your knowledge to accomplish what you need by filling specific holes on-demand. Everything fits together like jigsaw puzzle pieces.
The time between #1 and #2 can be short or long depending on the complexity of the subject. But the experience of #2 is a massive dopamine rush. The main thing you need is patience; don't get frustrated and give up, you know that if you just keep poking around, eventually that dopamine rush will come.
However, we're now on to pre-algebra and using this book [0], "Prealgebra: The Art of Problem Solving". The first chapter is all about axioms, proofs of some sort, breaking down "obvious" conclusions back to their constituent proof-from-first-principles and it's not agreeing with her at all. Since this is the first week I'm struggling to find a way to have it all make sense, and I've concluded we need to kind of skip much of this first chapter (we'll look at the summary) and get to the later content which is more intuitive and applies "obvious" principles, and come back periodically to revisit the more mechanistic content in the first chapter. I think the parent post's description of exploring a topic matches how my daughter will come to understand the whole "algebra stack." (Wish me luck.)
[0] https://www.amazon.com/Prealgebra-Richard-Rusczyk/dp/1934124... , Amazon: "Prealgebra: The Art of Problem Solving"
Order of Operations(No Variable)
Order of Operations(One Variable)
Advanced Order of Operations (One Variable)*optional
- Logs, Roots, Exponentials
- Polynomial multiplication/Factorization
Change the variable to random symbols
- Greek characters, shapes, animals
Order of Operations(Multiple Variables)
Introduce functions
- f(x) = mx + b
Connect Order of Operations with Functions
- Simplify an equation and plot as a function
Introduce units (basic physics equations)
- Simplify to formula and Plot
The goal in formal classes is to introduce order of operations with variables, the concept of functions, and how to manipulate those functions. If you are stem oriented, then this is the perfect time to introduce dimensional analysis(units) and physics-based functions. Instilling a sense of confidence and comfort with algebraic manipulation is critical. Prepping her for physics and working with functions is just smart.
It doesn't seem like a bad idea to give a taste of it significantly earlier, but I don't think it's surprising if someone without a more mature relationship with mathematics doesn't find much value in 'going back to basics.' If your daughter is doing well with a more intuitive approach it sounds like a good idea to stick with it for now.
[0] https://terrytao.wordpress.com/career-advice/theres-more-to-...
And there's:
-1. Come across the solution by talking to people, reading books, articles, videos... long before actually needing it, sometimes not even being able to recall it in the next steps until the ah-hah! moment.
0. Have an actual need for that solution due to a problem you're trying to solve. And having that feeling of "there is a solution for this" but not being able to put your finger on it.
Talking to people helps a lot to speed up the process because everyone will have their own view on things which helps to shape your own understanding of the subject.
Mentoring/helping others helps solidify your own understanding.
I completely agree with you. I remember feeling the dopamine rush when I saw the 3b1b's video lectures on linear algebra and Andrew Ng's Machine Learning Lecture.
Although I strongly feel that simply reading books and watching video lectures are not the best way to learn on your own. You have to re-read them, use them, do the exercises and talk with peers to really get the underlying ideas. Maybe some better explainations exist, but hoping that you randomly stumble upon them as you browse through online articles is not a good idea, IMHO.
I like this quote from Prof. Michael Jordan:
"the first time you barely understand, the second time you start to get it, and the third time it all seems obvious."
You have to work with the material and come back to it again and again to really understand.
I have created a conversational learning medium, Primer, that is designed for self-learners. Our goal, right now, is to create conversational undergraduate-level computer science courses for anyone to learn on their.
It's primary focus is to bring resumability in play which books and video lectures lack. What I mean by that is that when you learn something from a book and video lectures, you start forgetting about it the minute you stop. After a month or so, your memory of the topics are maybe less than 30%. And if you haven't created flashcards or notes, then you have to skim over the book or watch the lectures to recollect.
On Primer, flashcards are automatically generated and your responses stored in the platform along with inline completions help to retrace & recover what you have learned. You can do the course for a while and resume again after quitting for a couple of months or years. Your responses act as memory breadcrumbs to help you retrace what you have learned.
You can test our two free courses over at https://primerlabs.io. ( No signup required ).
I have also created two comics-post about conversational learning that some of you may find useful.
1. Introducing Primer: https://primerlabs.io/comics/introducing-primer-comics/
2. Memory Breadcrumbs & Memory Trails: https://primerlabs.io/comics/memory-breadcrumbs-comics/
In the end, you have to treat everything as something you will eventually come back and update. That's why I like networked-thoughts tool like Roam and obsidian, a little too much maybe.
I see spaced repetition tools like Anki and clones on the front page HN every month but in the tech world, I've never needed to rote memorize items that would require it. The challenge is understanding a new confusing topic rather than memorization.
Yes, if you're learning arbitrary lists of items such foreign language vocabulary, or a medical student memorizing the Latin naming for all the various bones of a human body then spaced repetition is what to use. I've just never had an analogous situation in programming.
>Do you prefer to learn from books, articles or videos?
All the above because they have different strengths.
- books: good for more foundational information (theory) but will be out-of-date on software tools and cutting edge info (e.g. latest machine learning developments). When using books to learn a subject, I always read 2 or more in parallel to get different authors explanations. Many times, one author will explain a topic in a better way than the other. A huge problem with books (and book publishing in general for all domains) is the avoidance to criticize or find faults in ideas. E.g. a Java book will not "point out all the problems with Java". To fill in that knowledge gap, you have to supplement with blogs/videos.
- articles/blogs: more up-to-date info on tools usage. Also because web articles have less "unspoken etiquette" about omitting criticism, you have a higher chance of reading about the negatives and drawbacks of whatever topic you're learning.
- videos: good for visual explanation of tools usage. E.g. Tutorials on IDEs.
So an example application of the above roadmap for me learning Javascript:
- book: O'Reilly book "Javascript in a Nutshell"
- video: watch a bunch of videos for learning F12 Google Chrome Dev Tools to inspect Javascript
- articles: learn what the new Javascript runtime Deno is about because books won't cover that topic.
Like many other tech topics including Javascript, I didn't have a need for spaced repetition techniques.
I'll give a few examples of cards that I have.
> Why is the time complexity of Java's List#subList constant?
> Why are OOM errors common in Spark?
> What does EXPLAIN do in Postgres?
> How do you run a command on the command line in Vim?
> How are map entries in HBase/BigTable sorted?
> Why are HBase column families difficult to modify?
> When should you use a JtaTransactionManager?
> What makes read-your-writes consistency difficult?
> Why does ElasticSearch not have transactions?
> What is a common implementation for JPA?
> What is the observer pattern?
> What is syslog?
It's definitely helped me as a software engineer.
Here is a guide on making better prompts: https://andymatuschak.org/prompts/
That's the easiest and most known use case of anki, but hardly the only things suitable.
In any case, memorization is always made easier if you understand a concept, and yes you can ask conceptual questions in anki.
For example of a conceptual question: Q: What is the purpose of an aileron? A: To control the roll of an aircraft.
Then you ask the question: Q: The roll of an airplane is on what axis? A: longitudinal axis.
Or maybe this prompt? Q: What component controls the roll of an aircraft? A: The aileron.
Then you can continue to ask question like what forces limit the speed of an airplane, or what makes it fall, or what control surface do you need to use if you want to increase elevation of an airplane, and so forth.
> The git command that returns the .git directory that's controlling the directory you're in is git rev-parse --absolute-git-dir .
> In Scala, you have an array, a. What's the best way to turn a into a String? a.mkString(" ")
> In HTML, how do you tell an li tag to start at 3? <li value="3">
> In Scala, how do you do exponentiation? Use scala.math.pow(). Do not use Math.pow().
> In Scala, you have a variable "val l: List[SNid]". How do you convert l to a ListBuffer[SNid]? "l.to[ListBuffer]". Note that it's not "l.to[ListBuffer[SNid]]" or "l.asInstanceOf[ListBuffer[SNid]]"
> In multiple linear regression, is it better to have a large or a small RSE? A small RSE is better. RSE is the Reducible Standard Error.
These questions came from things I got wrong in the last week.
The only case I can really think of is learning the useful shortcuts for your IDEs, especially if you're switching between multiple IDEs for multiple languages. But even then I would rather just note them down and look them up when I need them. I tried Anki to learn emacs shortcuts and it's just such a slug. I don't want to spend time daily to maintain a mental database of senseless shortcuts.
I talk about this book club here on HN often, so at the risk of repeating myself, I do want to mention on this thread that as a result of these ongoing book club meetings, I realized something interesting. I realized that studying and learning in a social setting like this ensures constant progress. The risk of discontinuing the learning activity due to other priorities of life becomes lower. No matter what, barring exceptional circumstances, I know that I need to sit with our book club for 40 minutes everyday and work through a few pages of the book together. I think that kind of consistency is very important while learning an abstract topic like this that we are learning purely for the joy of learning! Further, the insights that the book club members share with each other during the group study is a nice bonus!
[1] https://news.ycombinator.com/item?id=26366464
[2] https://offbeat.cc/blog/our-trip-to-the-prime-number-theorem...
It's a very verbose way of learning but i can say i now truly understand Euler's theorem and Fermat's little theorem. I'm continuing this right now. The end goal will be to go deep on everything about RSA including the state of the art factorization algorithms.
Current start documented here:
https://rawcdn.githack.com/AReallyGoodName/RDM/5391c5a90fe39...
Edit: All my formatting was messed up. I'll fix it when i finish, i'm sure it's not a mystery that the powers are meant to be superscripted though.
Now that I've typed that out, it almost doesn't make much sense. But that's how it fit together in my brain.
That helped me understand frame-tick/physics-tick aspect at least, and how you could offload some processing onto separate queues of events.
I do think that a lot of what I did as a kid - clearing misunderstood words, using clay models or drawings or physical blocks to understand concepts - has been instrumental to my ability to learn new stuff.
I do not endorse or support Scientology by any means, but a lot of this is true: http://www.studytechnology.org/sh1_1.html
People using words they don't understand, that is definitely a problem. Actually, two different problems: either they believe that the word means something else, or they just parrot words without thinking about their meaning at all. Both are problems, but require different approaches to fix.
Sometimes you understand each word in the sentence, but you still don't understand the entire sentence. Maybe the sentence is unnecessarily complex or abstract. Or maybe it is a statement of "what", but you don't understand "why"; like if you read Fermat's Last Theorem.
And sometimes (and this is the part Scientologists don't want to hear), the statement is just plainly false or nonsensical, and learning the meaning of every single word in a dictionary is not going to help with that. Though you can force people into submission by making them read the dictionary long enough that they give up and pretend that the statement now makes perfect sense to them.
Similarly, engaging multiple senses is helpful. Describe by words, make people repeat using their own words, make them write notes, show a picture or an animation, let them draw their own pictures, use Lego pieces or clay models, whatever. It is not the magic of clay (although the clay is quite flexible), but the magic of approaching the same concept from many angles.
I suspect that most low-level Scientologist teachings were created by taking some respected ideas (of given era) generated by someone else, and making them simple and dogmatic. (The high-level teaching about removing evil spirits from your body are unrelated to anything practical.)
I set up a project, and assume that it will require whatever it is I want to learn, then, I figure it out as I go.
This is what I plan to do with SwiftUI. I have taken a number of courses, and read a bunch of stuff, but these have only a transitory home in my noggin.
I won't really know it, until I have done a few projects with it.
The project that I'm currently working on, is based on "classic" UIKit. I was not confident enough in SwiftUI to do it. It's fairly ambitious, and the fact that I don't know that much about SwiftUI, was the reason I chose not to use it. I have had projects, in the past, where I banked on an unknown, or partly-known, technology, only to have it hit a block, further in.
I already know what I'll be doing for the first couple of SwiftUI projects, but it will be a while, before I get there.
So I just dive in and do. Looking up stuff as I need it. There's usually a lot of crap info out there but I just need enough to get around a piece of bad docs here or unintuitive UI/commands/syntax there.
The thing is that I learn best like this when I'm not 'on the clock'. If I need to get a project done in a particular timeframe and use something new I'll fight against it. Don't want to do it. I don't know enough about it.
If you give me the time and leisure to work through it I'll get it done in the time it needs and I'll learn whatever needs to be learned to accomplish it.
I'm not deadline driven. Deadlines lock me up. I'm value driven. I know most people need a deadline to work against to not procrastinate and cram at the end. Doesn't work for me. I turned in my masters thesis weeks in advance.
https://www.freeplane.org/wiki/index.php/Home
The way I author the mindmaps is to form trunks of major subjects which then distil down to the details. I'll add questions to myself into the subtrees.
When it comes to revision, I'll "contract" the entire map (there's a button in FreePlane to do this), then I'll take each branch in turn and try and answer (on a piece of paper) the questions I've left for myself. As you progress through the mindmap, you are expanding all the branches out.
This works for me for 2 reasons: - reinforcement learning through the questions I've left myself - remembering places / locations is something the human mind is very good at, and fits well with the current theory of the mind (reference frames, etc).
https://1drv.ms/u/s!AjzG1BVufekQgscNkc27rVB9QMApWQ
(This is a onedrive link - hope it works!)
Spaced Repetition - For concepts that don't appear regularly enough to be familiar, but are still useful enough to be in short term memory.
Knowledge Management - I have a personal knowledge management system based on recursive concept definitions. I define my knowledge at the highest level that I understand, and let the concept definitions fill in the first principles that I forget; I intuit that the current crop of note-taking apps aren't working on the right level, but haven't had the time to productionise my setup, and I'm happy enough that I'm not going to look for something better. I suppose this is also an application of the Feynman method.
I keep papers in Zotero for reference.
Forgetting & Ignorance - A lot of knowledge isn't valuable enough to me at this stage in my life. It's a shame that I'm not going to have an appreciation for the Roman emperors, but that's OK. Time is limited and it's important that you don't spend too much time on theory at the expense of practice.
Reading the answers here, I should aim to join more discussions
Would you consider open-sourcing this, even if it's not productionised or intended for use by others?
I'll think about it in 2022. I'd like to start off with a Show HN using it for technical documentation.
On my toilet is a stack of dual-language books; German and Old English, Latin, French and Spanish, Ancient Greek, Japanese, as well as Shapiro's Introduction to Number Theory. Lots of Dover editions. Wittgenstein.
Next to my desk (on the second desk) there's always an open math book or two (Knuth Vol. 1 and From Frege to Gödel right now), as well as a few open notebooks.
By my bedside, a few works of great literature and philosophy (right now Rawls, Joyce, Homer).
In reach of the couch a variety of books on art history.
By the reading chair, well... lots of books.
I read, skip about, get stuck, forget things, but every day I dip into these little piles for a few minutes here, maybe an hour there if I'm lucky.
One thing I never care about anymore is finishing. My mind can grow a bit more, most of the time.
What are those? Is this a book that has the same text in two languages side by side?
I'd be very interested to see an example of such a book because I recently translated the one of my math books from English[1] to French[2] and I was thinking of releasing a bilingual edition too.
The publisher Dover makes a whole series across several languages, and it's not too hard to find Greek and Latin classics.
Recently I see more specialty publishers moving into the space.
There's also interlinear dual language books, with a very literal but you-do-some-grammatical work translation of each word below.
For weird biographical reasons all of the philosopher Wittgenstein's books are published with German-English on facing pages.
https://store.doverpublications.com/by-subject-languages-and...
Obviously it takes at least a skim to judge whether you feel the material is worthwhile. But being picky on this will likely pay off. Certain textbooks are so far superior that it's almost criminal the others are being sold. In some cases they were clearly knocked off by a prof to sell to their students, rephrasing the same material in a more confusing way and trying to take credit for the ideas without contributing much of anything.
Linear Algebra https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-S...
Convex Optimization https://www.amazon.com/Convex-Optimization-Corrections-2008-...
Linear Programming https://www.amazon.com/Introduction-Linear-Optimization-Scie...
Digital Signal Processing https://www.amazon.com/Understanding-Digital-Signal-Processi...
https://www.amazon.com/Discrete-Signal-Processing-Oppenheim-...
Surveying the whole landscape by asking yourself: why this, not that? This is the single most powerful technique I know to reach deep understanding, but is very demanding to apply.
In this case it's really about perturbation: what changes if Y is substituted for its close analogue X? Why is a 4-40 screw used here, rather than a 6-32? Or M3? What, of all possible arguments, made this one the author's choice? (Is it really the best, or does it hide something inconvenient for them?) Why is the city here and not there?
You start to see the flavor. This form of perturbative or differential analysis can be extremely powerful. It can also be extremely difficult and lead one down many side routes... such as, say, chasing down the diameters of all inch standard wood screws, not that I've done that or anything, just to determine what would happen if that wood screw were replaced by a self-tapping machine screw....
Similarly, when joining a new team I like to gather war-stories because when people tell you those, they are also telling you how they work (and allow you to infer a good strategy for working with those folks while also learning about the warts of the system).
Controversies are found at the cutting edge of most fields and analyzing arguments that take the "settled" knowledge in the field and still reach contradictory conclusions provides a lot of insight into the body of knowledge in the field and how much of it is really settled.
is it good? from the very little research i did, it sounds like it "depends on the person"?
Actually a few processes that are combined depending on the domain.
(1) Reading. At this I am relentless. I used to read technical documentation (say the manual for the Spring framework or maven) on a tablet while doing cardio at the gym.
If at all possible I like to know the official documentation for whatever toolset I am using like the back of my hand. I learn how to find answers quickly in, say, the Python manual, and avoid wasting time with Google, Stack Overflow, Spam Blogs and other places you find wrong answers.
In some cases there is no official documentation, it is not good, or it is a book you buy. (Buy Hickey's book on Clojure!)
Lately I hurt my leg and had more time to read, I so read enough books about love that I had to take a break and read trashy SF instead. This project has had the structure "Read book A", "Scan the references in Book A, get references (from 5-80%) from the library, look at the areas in the stack close to the references, read those, repeat." This project is unusual because it has a high fraction of fiction mixed in with the non-fiction.
(2) Doing. Here it is a matter of having a gradient of tasks. I hate to break it to you but spaced repetition, flashcards, etc. are useless when it comes to math. Instead you solve problems.
About a year ago I challenged myself to print something on an inkjet printer every day to keep it from drying out. I had no idea how that this would turn out, the kind of problems that I would run into (I felt I hit a "crisis" of some kind every two months), that I was developing for the metaverse before people started talking about the metaverse, or that with 15 cents of materials I could make somebody spend $1500 (not by causing property damage!)
For a while I made prints of anime characters and then art reproductions, now my main activity is developing a repeatable workflow for photos I take myself. Personally I find it a "hard problem" that there is "something missing" in the prints I make from my camera but I realized I couldn't fix this problem one print at a time but it was something I'd get after doing a long series of them.
It can be quite daunting at first though. My strategy lately for this is
1) Accept that the documentation is big and will require some dedicated time for reading, not just a 10min elevator-pitch-tutorial between two meetings.
2) Skim through the table of contents, then continue reading the first paragraph of ALL pages and give each page glance. Write notes on which pages that you need to read and now and which ones you can save until you are web-scale. This step is important before you really start reading. It will teach you which topics that are important and give you a sense of exactly how much you need to learn, see it as some kind of internal progress-bar. You will also categorize which topics requires trying things out hands-on vs which topics you can bring to the tablet and read on the bus.
This step also helps you avoid traps you might end up in when reading things in order like "Congratulations for finishing tutorial 1, this was actually the old deprecated way of doing things, in tutorial 2 we will show the new better way of doing things and you will now truly understand the beauty of this improved design., or missing the last page on important security differences between debug and production mode.
3) Read. Now that you know the important topics and you've allow yourself to just sit down and just read them top to bottom. Allow jumping between topics if you get stuck somewhere. Set up a local environment to try things out on the way, confirm your assumptions, otherwise read more about that topic. Check the api reference if there are classes not described in the topics and figure out why.
From here you can transition more and more into innovative exploration and implementation of what you want to create, only reaching for the docs when you get stuck.
Trying to figure out some new API that gives gross error messages and has zero useful documentation? I start writing down what I _think_ things do. Yhis pretty quickly
After that it's project time. If I don't have a project of some sort it's impossible for me to get going. Then picks the simplest sub-problem, and build from there.
If it is something I absolutely need to know how to do, then I do it over and over only muscle memory kicks in. When I need to learn how to use LVM I most have create, delete, recreated expanded, reconfigured and killed a hundred volumes.
Learning theory is useless for me, at some point I used to think that I may be dumb. It wasn't until I reached college and was top of class in all CS classes. Not bragging I honestly used to think I was not intelligent.
I learn through books and videos. However, the real learning happens to me when I am given a problem and need to come up with a solution.
As an example, I didn't know anything electrical about cars, I also had just an idea of how a fuel system works. Until, I installed an engine in my car and it would not start without any error codes. I went and studied the complete fuel system and how it works. Everything was just clicking as I had a faint idea of it.
Then, I did a bit of troubleshooting after reading, I figured out part of the puzzle, the fuel pump on the engine was not powering on. Therefore, it was power issue. I started reading about everything electrical, how to test if the fuel pump is getting power.....and discovered that it was lose ground.
Today, I am complete car nerd, I know how to use professional scanners and read data from different sensors. I no longer replace things in the dark.
Plus, this boosted my programming skills. Building business applications I never encountered a problem I could not solve.
I even studied negotiating techniques before car buying to practice. This allowed me to double my salary in 3 years as a software dev. I am ice cold during salary negotiations and can recognize tactics potential employers or recruiters can use to gain an advantage.
It’s a blessing and a curse, I have great big picture creating thinking abilities, seeing things that aren’t there but could be, however I also often have to “learn the hard way” in many areas of life because I don’t internalize things second-hand very well.
For any programming language there are two other things I do. First, I make a repo with a bunch of nested directories that I'll add to. So I'll have something like Array -> Iteration, and that might contain 5 different programs going through different types of iteration. Yes, a book will have that, but actually coding it really helps it sink in.
The first place I look for resources (even before something like <language>.com) is stackoverflow. Search for the tag of the language (like "[go]"), then click "Learn more...". I've found these lists of resources to be the best jumping off point, though the language may vary.
Again I use the pad for details of the language. There are times when I know I'm doing something that works but is maybe slow or looks ugly because the language has facilities to do it more cleanly.
Then there are the personal differences. I've reached a decent level of fluency in 2 other languages. I really struggled early on with typical instruction until I tailored study to my style of learning. Where most people seem to learn new words through use and context, I did so much better by learning them on paper -- to the point where it was a substantial departure from the rest of the class. So my point here is to figure out what works and don't be afraid to do things differently.
1. If there's an introductory textbook on the field, grab it and read it. Almost nobody does this in professional life - how often do you see people reading books in the workplace? By analogy if there are solid "overview" papers recently published that outline the state of the art in a field, read through that.
2. Find experts in the field to help you pose your problem well. Papers literally have the email addresses of the author and it's not hard to find book authors. Reach out through your network and cold. Practitioners love to talk about their work and get people excited about their field.
3. Find online classes and tutorials; Udemy, Coursera, or even speciality ones like Harvard Medical. Be willing to drop a few hundred dollars to educate yourself.
4. Tinker and share. Start with "toy" or modest projects. Don't be embarrassed at having extremely limited scope. Small things (IT setup issues, misalignments, etc) are going to consume a huge amount of time but grind through it and don't be afraid to ask for help and ask dumb questions. When you find bugs or typos in others' work, speak up. See if you can get some even basic PRs landed. Start contributing to the community. Write about what you've learned so far: what's surprised you and what it seems is maybe missing.
5. Convene: is there a conference or meetup for folks who do this? Show up. If there's not, put this together. The first DevHouse we threw was a dozen folks in my living room but we kept throwing them until we had 2,000 folks taking over two blocks of Palo Alto. Convening isn't hard to do but few do it and it gives tremendous value both to the community as well as to yourself as host. Get people to give short (5min) interesting talks. Get to know folks and connect them with each other. Don't be mercenary, just seek to help however you can.
coursera course: https://www.coursera.org/learn/learning-how-to-learn
a previous thread: https://news.ycombinator.com/item?id=23211184
I am currently learning Spanish. - Use Babbel to bootstrap conversational Spanish [learning enough to express myself, but also those quick wins that keep it fun] - I handwrite the conjugations to learn verb tenses and moods [diving into the specific details] - I use anki (spaced rep) for learning verbs and nouns [expanding knowledge] - And I talk to native speakers, who have been more than happy to chat. [feedback loop]
I am not the brightest bulb in the shed and doing this with deliberate practice has gotten me pretty far in 6 weeks.
1. Research on the topic using multiple sources.
2. Collate all the interesting and useful information into one location
3. Condense this information into a blog post/article(optional: publish it in a 1. learning in public system - there might be errors in this)
4. Create a plan to use this knowledge in a project
5. Do a retrospective after using the knowledge and seeing results - What worked, what didn't work, what can be improved.
6. Add these points to your article
7. Use the knowledge in another project(ideally, in a different contexts) and do the last 3 steps. You might have to do it 3-4 times before you have a decent understanding of it.
1. I submerge myself into that topic. I read blogs, I watch YouTube videos, I watch recorded conference videos, I talk to people working on that topic. I basically familiarize myself with that topic like I familiarize myself with a new place or the food of a new restaurant.
I just let all the information flow in. Slowly but surely.
I don't bother about getting it. I just learn about it.
When I am thus superficially familiar with the topic, interest and motivation is generated.
2. I then study good resources, the ones considered the best and most helpful- as I find them on relevant forums from real people. I read, I understand. 1 goes on in tandem. I don't intellectually cheap out on learning resources. I take notes on paper and occasionally study them.
3. I do. This is the single most important phase in my learning process. You can only learn properly if you do. I get hands-on practical knowledge and learn things that books or courses cannot teach efficiently. Makes 2 make much more sense, and makes 1 make total sense. Why I am doing something is extremely important. In this phase, I start noticing people who just talk superficially about that topic, like people generally do that about hot tech or quantum mechanics or macroecnomics but they themselves don't understand them well- the influencers, advocate s, popularizers, and the people trying hard to appear smart.
4. I talk about it and/or write about it. With the knowledge gained from amalgamation of 2 and 3, I talk in small groups, I write blogs. Really cement the knowledge and help me bridge gaps.
5. Doing, talking etc. goes on. I sometimes forget too theoretical knowledge that were on top of my head when doing 2, but not needed in the real world. I just have to go back. I am thinking of spaced-repetition or some other technique to remedy this. I am not sure if I should even remedy it.
This is how I do it.
Familiarize -> Learn -> Do
Oh, and I be patient. If I don't immediately gain satisfactory understanding of something (my standards are very high), I just be patient. As I know that the topics I know well, I have spent 2, 4, or even 10 years with some of them. Some things come slow.
And I always remeber when it comes to understanding something-
You must not fool yourself, and you are the easiest person to fool
~ Richard Feynman
I feel like when I'm learning about a subject I'm not super familiar with, it can feel like "drinking from a fire-hose". There's a million different proper nouns that you have to learn, and each one can be a rabbit hole in itself. I feel like with Obsidian/Roam/Logseq/Athens, it helps me focus on the high-level and drill down on tasks as I grow more familiar with the subject. It also creates, in my opinion, extremely easy-to-read notes later, more or less like I'm just reading through Wikipedia.
I don't think it's for everyone, I couldn't get my wife using it, but I genuinely do believe it has helped my knowledge-gathering a lot.
------
In regards to your second question, if you had asked me three years ago, I would have said videos, but honestly as I've gotten older, I don't think I have enough patience for them anymore, and generally prefer books for conceptual stuff, and articles for practical stuff. Videos are often way too slow, and I end up having to listen to it at 2x speed anyway.
The exception to that is if I'm trying to learn something somewhat interactive (e.g. how to use Blender or something).
This has never failed me, but it’s hard, because it’s WORK. You can’t just sit and consume material (though consuming material is important). My typical strategy for consumption of material is to do such when I hit a road block in the application of my knowledge.
A few concrete examples to get the idea:
Want to learn about how cars work? Don’t take your car to a mechanic, force yourself to fix it.
Want to learn about electronics? Build an electronics project.
Want to learn about machine learning? Build an actual ML powered software application.
Want to learn about math? Use it to solve a real problem (physics/engineering has some of the most concrete representations of applied math from algebra to through differential equations, etc)
More difficult subjects will take more “projects” in order for you to gain in-depth knowledge. However, nothing beats experience at applying the knowledge in order to achieve true mastery.
Where some folks get hung up is they think they need to pass some knowledge threshold before they begin to try to apply it. I think this is false, for any application where a lack of knowledge is not actually dangerous. The sooner you try to apply what you know, the sooner you will master the subject.
If I remember where in the book information I need during the project is I'll use that, if not, DDG.
I also enjoy reading/hearing anecdotes from others, though that's less to learn details generally, and more to learn what's out there to learn about.
No, really. It took me a long time to realize that my brain sucks, and forgets things all the time. Writing things down gives me a frame of reference and physical (or digital) token of my knowledge. A lot of people champion the idea of a 'mental library,' and I believe a good Zettelkasten system lives in the brain much the same way.
I've been doing this for about a year and have made steady progress. The main limiter has been having enough time to immerse (read/listen) properly. I can manage 30 min to 1 hour per day but it's not enough.
Spaced repetition works really, really well though. I've thought about using it for other non-language things I want to memorize, but haven't yet done so.
I feel that the main issue lies in the lack of repetition. I read a book on a subject, think about it a bit, then move on to something else, and in a year or so nothing is retained. The spaced repetition theory seems to provide an answer to this.
I have currently stumbled upon the software SuperMemo. In addition to the usual card stuff from anki, it allows something called "Incremental reading". This feels like the solution to my problem. The idea is that you read to learn. You can read about it more here http://super-memory.com/help/read.htm#Introduction_to_increm... but the main concepts are that:
- you add your readings to a priority queue
- the software schedule for you the readings
- you read and distill the main information at the same time
- the software revisits the information that you have distilled in intervals, each time you revisit information you improve over your distillation and create flashcards from it
I am still learning this new approach. I have to say, the software is extremely complicated and badly designed. I would love something like this would exist as a plugin to roam. A way for you to at the same time:
- determine the priorities of your reading and orchestrate them
- build a wiki-like knowledge graph
- easily create flash cards
- extract knowledge from articles
1. Teach Yourself Access in 24 hours (or something like that). It was a book that had a chapter/lesson and then exercises to utilize what you learned.
2. Learning Perl (the camel book). Same thing.
3. Nand2Tetris (I did the first course. Still need to do the second one.) I watched the video lessons, then did the exercises and submitted them for automatic checking.
Edit: The material, in this case, will often be a niche Internet forum.
1. Learn the Basics.
2. Read key reading material/analysis. Read papers, analysis, articles, etc. in that space.
3. Seek out key people. Find all the key people in the space, follow them. Engage in conversations with them or see what they talk about.
4. If possible, hang out in the community.
5. Write in Public. Last but probably most important, document your journey in public.
The problem I had as a programmer working on legacy systems intermingled with new stuff is I had trouble finding my notes about stuff. Confluence's search is basically unusable and there's quite some overhead in using it to take notes in the first place. Using Zim/Foam lets me easily find the information I need when I need it.
Basically, I'm just not gonna remember everything that might become useful months/years from now so I dump everything in my own personal wiki and make sure it's easy to navigate/find stuff I need when I do remember I saw something similar before.
First of all, read. Read the instructions on the game cabinet, the instructions on the screen, read the video game magazines, read the books of arcade game tips.
Second, watch the experts. I would never put a quarter in a new game until I had watched multiple people play and learn from that. Watching someone fail was a quarter they spent that I didn't. I wasn't rich.
Third, ask questions. If you've got access to experts, ask them how and why they do things. This got dicey in the arcade/7-11 since it was pretty working class and you had to be careful not to bother people, but if you could get them talking, that was information straight from the source. Invaluable.
Fourth, practice. Went to the 7-11 every day before school in the morning. Another session after school. Figure out what your weakest point is and target that. It can be brutal because the weakest points can be the parts you dislike or are not good at, but you have to decide if you want to be good or great. Might not be worth the pain if it's just a hobby.
Making time for deep focus
Prioritizing important work (whether its learning or executing on tasks) for the morning right after waking up
Healthy sleeping and eating habits
There are a plethora of tools out there to optimize your workflow, but I think that is more a matter of preference.
Videos can be hit or miss. The right videos can jam pack a ton of information and get you learning complex topics very quickly. Books and articles have their place too, though I tend to read later in the day into the evening when I'm more keen to winding down.
One common thing I tend to do: I may end my day working on something that leads me to a new pillar of information or complicated topic that I need to grok. In those situations, I stop the day there, and plan to wake up the next morning to research the topic (over coffee), and absorb any videos, articles, material I can get my hands on. Your brain can do amazing things with a little bit of caffeine and deep focus after a good night's sleep.
Sorry I’m rambling, but, when possible I think it’s great to get a person better than you to help learn. For me personally, that level of accountability keeps me from falling off (which I still do, but, less)
My process is usually this one :
- Understand learning space ontology. Once I am able to visualize the concepts associated with the field and their relationships, I stop digging the theory and go to practice.
- Start practice: try to solve a simple problem in this learning space. Maximally use all information sources available to solve problems as we go (articles, youtube, wikipedia, blogs, anything). If I get confused I recognize that I missed some theory and go back to square one.
- Solve real use case, go back to step 2 if I get confused or blocked.
I usually get where I need in less than 6 steps. I use this in Software Engineering, Physics and Mathematics.
When I encounter a problem in an Ontolongy space I already encountered, I go directly to step 3.
I'm not saying to only learn things you're passionate about- almost all of us will have to learn skills that we aren't particularly interested in. But finding some goal to push for beyond just "learn x" can give me that motivation.
When I need to learn a new technology, I create a new Anki deck and a new Markdown or org-mode file. Every discrete bit of information that I collect goes into the file, with the URL or book name and page attributing it. That's mostly complete sentences, terms with definitions, and code examples.
The most important-seeming points go into Anki as well. I have Note Types for complete sentences (cloze deletions), for terms with definitions (with acronyms and synonyms as well), and for code examples (description-to-code and also code-to-description).
The nice thing is that I can forget a technology for a few years, but if I need to go back to it the knowledge is already laid out for me in an extremely information-dense format.
An oh , take notes and preferably link them up in mind maps. That's how anything stays with me anyway
Like folded steel and alloys, I find that I learn things from lots of different angles, and appreciate the amalgamation.
Veritasium did a whole video [https://www.youtube.com/watch?v=rhgwIhB58PA] recently pointing out that it's really hard for us to self ascribe our best learning methods.
I'll take whatever works and try as many as I can to keep the experience as rich as possible. If there's any unifying theme for me, it's "I learn by embracing Humility, and avoiding Lazy".
Depends if I'm learning to get something done or leisure. I don't know why but I can't stand reading large blocks of text so I usually pass it through a TTS like Amazon Polly to listen.
I'm passively working on my own browser extension NLP, nothing new, I was looking at this text summarizer on Rapid API that seems to be pretty good. Though I have to compare what it comes up with versus what I would summarize from an article. The NLP/summarizer are not relevant, just related to condensing info/peaking without reading through it like a thread.
1. Consume input 2. Extract key points 3. Map key points into a model of what I am learning -> repeat
I read books & articles on ReMarkable and I make hand written notices OR I watch videos/learn online and put my notes into Scapple. I keep my data in OneDrive to access it from all devices. I brainstorm and rearange in Scapple.
Then I put it into Notion to build a knowledge database there. If I want to publish or share, I pipe it into .doc or .pdfs
Edit: The points are: a) I have a flow that turns input (learning material) into unstructured data (notes, scribbles), which is then turned into more structured data. b) this keeps me constantly engaged with what I'm learning as I keep rearanging and expanding my map/model
I love videos and articles these are the most efficient way to absorb essential concepts provided they are written/released either by experts or great teachers.
Books are good references and great resources for problems/exercises but working through an entire book can be a chore.
The only thing I can claim to be good at is that I am persistent and I come back again and again either to same material or similar material for deeper understanding.
Now part me still wishes I should have continued on in academia after my PhD, because there I had license to read.
There is simply too much that can be known about anything for a serial learning style to be complete.
Having said that, the 'other' person can be yourself, but separated in time, which necessarily results in more gradual learning. In that case it's important to have good recall for what was known at time point a, b, c in order to measure learning.
The book "Atomic Habits" mostly inspired this - the idea of setting both a clearly defined time and place for doing something + making it easier to do the right thing / harder to do the wrong thing. The "before laptop is turned on" is important for not drifting onto Slack and blasting through various notifications.
I've gone from spending literally years thinking "I really need to read more papers and these textbooks" to actually making solid progress on stuff I care about.
Later in life I learned that I can grasp theory much better when I saw AND worked on a bunch of practical examples myself before diving into theory.
I'll also do 2 or 3 of them to see the task from multiple conceptual angles, it helps me to see how multiple people think about and solve an issue.
I have a lot of trouble learning things that are not related to what I want to do. Not sure how I made it through college but I think I generally had a good idea how many classes applied to what I wanted to do...
This is how most autodidact programmers learned to code, and a really good way to make progress on one's own. Not because of taking courses, but doing projects...
For context: I've also been many many years in the formal education system, but all the actual useful skills I have developed came from a self-directed learning loop.
For other topics, I pick a stellar piece of content to lean on. It can be a book, but it can also be a video primer or an introductory article. Then down the rabbit hole I go, researching terms and saving other content I need to understand the subject matter.
For physical activities, like baking or fixing hardware, I prefer video so I get the nuance or where things go or how the output of each step feels like.
The habit forces you to distill insights in your own words and make connections to your current knowledge — mimicking how your brain learns.
Regardless of the source, reinterpreting it in your own words is key.
See Sonke’s “How to take smart notes” — or this primer article [1]
[1] https://www.bryanlee.net/blog/the-life-changing-magic-of-zet...
In my experience, videos are mostly a waste of time, only good for getting an overview of the topic.
But the best way for me is to be presented with a problem to solve. I've learned how Cesium Beam atomic clocks work by fixing them, same with Magnetic Amplifiers, etc.
Small projects work best for me.
Especially if you include the fact that something can't be done.... that one really frosts my cookies.
I really like doing impossible things.
I can't take a book and make myself learn ("push"). Instead, I find a project I'm interested in and let it "pull" me in. Sort of the difference between studying a French book ("push") and actually going to live in France ("pull") with French people. You still bring the book of course.
Trying to figure out some new API that gives gross error messages and has zero useful documentation? I start writing down what I _think_ things do.
This helps me find patterns, but also helps me say "there's no way that is what this does. No one would write a function for that, it must do something else."
I don't find spaced repetition helpful unless it is rote memorization of small facts.
At first I listed and ranked a bunch of methods of learning (see below) but I found that a general ranking isn't as helpful after a while.
The biggest takeaway for me was developing my own logging process. I always start a log on a given learning topic, to keep myself accountable and to allow myself to detach and reattach to the process.
The log template I use has headings like this (Markdown):
- Title
- Contents
- To-Do & Questions
- Tips
- Chronological Log of Lessons Learned
- Log (Meta) -- When log was last reorganized, etc.
- Resources (Web links, and so on)
Then I use my own task system, Task BATL, to help me select logs to work on and mark up the to-do lists (like that above) with symbols that establish clarity. I also use a basic tagging system throughout, with shortcuts like +lll for "Log of Lessons Learned" and +crp for "Current Position" (current philosophy / position / strategy in the topic--like how I trade assets, or write system scripts) so on.
In terms of specific methods--books, articles, and videos, I also tend to ask my intuition what it thinks the best one will be for each given topic. Usually one specific method comes to mind. Over time, I rank them for each given topic/log.
I'd also add these:
- Image search
- PDF search
- Reddit posts & other forums
- Slideshare
- Podcasts (useful in topic review or topic updates)
- Writing and publishing my own guides or tutorials on blogs, etc.
- Creating HTML start pages for the topic (friendlyskies.net/radio was one of my first)
- Online courses
- In-person courses
- Get-togethers (for ham radio this has been a really good one; I'd add nets to that as well)
- Volunteering
- Certifications
- Teaching courses
- Shopping/buying things related to the topic in a well-informed way
- Starting profit-projects / businesses
Anyway, good question, I think it goes super deep too.
Recently, I've lost interest in tech/coding/math but motorcycle repair, racing, and engine internals are cool!
It's always been internal validation.
more generic.
1. read as much as I can find on 'how to', 'tips and tricks', 'things I wish I new when I started x' etc 1.b watching videos on 2x speed. 2. practice
tests are helpful if I can find them, but there aren't that many, good ones
1. Get a good article or book about the topic. Not a video.
2. Read it multiple times. Each time, highlight and leave notes in the margins. By the third read-through, there's usually nothing more to comment on. (I can't do this with videos.)
3. Turn those notes into new Anki (spaced repetition software) cards that go into the unseen pile.
4. Every day, Anki adds ten cards from the unseen pile to the cards I'm reviewing.
I've been doing this for twelve years, and it works very well for me.
When I need to learn a lot of material quickly and it's not interesting, I do 1 hour learning and 1 hour mentally consuming entertainment (gaming, Netflix) interchanged, as long as I have to. 30 minute intervals if the subject is really boring.
Keeps me concentrated and I can sustain it for extended periods of time.
Over the years, I have to learn things ASAP to get things in place before world breaks loose. I follow an approach that I call : SPOTS. It stands for Survey, Prioritise, Organise, Test, Show. Lets go through it one by one :
1. Survey : Collect all possible things you need to know about a new topic or thing. Make a mind-map. Do not forget to check out academic sources for possible models. Reddit and HN are cool places to look. This should be done in a time boxed manner.
2. Prioritise : Now we bring the goal and see our mind map in context. So, you want to build an app and you know, say, Nuxtjs. How can you do it so you have to acquire as little skills as possible. Or you want to write a research protocol for conducting a simple user test for a product. This step will help you find possible ways to reach goal. Now, you have a prioritised way to achieve the goal and maybe have a sense of how things could be.
3. Organise: This step is very important. The prioritised 'knowledge elements' have to be revisited again and again. Using a small notes app or Athens[2] you can make a list of key steps or if its a tutorial, the major steps. In short, take notes. This will help you bring more clarity in terms of various approaches you can use the knowledge elements. Say, you need to use low power mode on ESP32, you have the documentation + sample code and you know how it works.
4. Test ( or Try) : Now you need to keep trying and testing the various arrangements of knowledge elements and what works and what not. Dont get attached to any particular way. Keep figuring out. With code etc it is easier, with research (and human things), test things with friends or cousins. The idea is to be iterative and see if we are able to get to the goal. Iteration is the key. Sometimes you might need new 'knowledge elements' that you might have missed out.
5. Show : This is the most important and something all good humans should do, as philosophers would say, further the epistemological understanding of humans— write a f#$king blog, post a documentation, or answer a stack overflow, heck at least make a tik-tok. This will make sure, if someone gets stuck solving the same problem in the future, your knowledge element will help them. Also, it cements the concepts for you as well. sings "You may say, I am dreamer...But, I am not the only one"
Nice try, Skynet.
Maths / Comp Sci: Knowledge here is heavily theoretical and problem solving. For both, the only way to learn effectively is to take exercises and practice, practice, practice. I've studied both at university level and this is the only method that works.
Philosophy / History / English (ie. humanities): I (along with my classmates) have always been led to believe that the humanity subjects are about fact memorisation. Although memorisation is certainly a component of such subjects, it should not be the primary component. First and foremost, the student must understand the ideas and events. Thereafter, they can plug in facts they have learned off. To achieve understanding, the method is as old as knowledge itself - read and write. Read to find questions to ask, write to answer your questions.
Music / art: For the creative arts, practice is the primary tool to learn and progress. Mentorship is a critical part too, but secondary to practice.
Language: To learn a new language, only one thing has ever worked for me - complete immersion. Without being in the country that speaks the language and practicing everyday, I have never made any progress.
TOOLING - I have some thoughts on different tools for learning, but it is by no means extensive. I guess that each person is unique in how they learn - something we do not understand very well. I don't know of any test that figures out what kind of learner you are similar to a personality test.
Books: My primary way of learning. I read, write in the margins, underline, find a question and then write about it. Without writing about it, reading was a waste of time (for non-fiction anyway).
Articles: I regularly check HN each day for anything of interest. Most of the time, I can't say that I learn much. This is probably because I cannot write and absorb the author's writing like I would in a book.
Videos: I've given up with videos unless a visual representation is needed. In particular, programming videos seem to be a waste of time except for explaining basic concepts. That's not to say I waste a HUGE amount of time on youtube...but there you go.
Podcasts: My favourite way of picking up new ideas when I'm driving. I try to pick multiple podcasts at a time with the same topic so that something (but not much) sticks in my head.
Anki: Tried it - it reduced learning, which I enjoyed, to a chore I needed to remember to do everyday. I foresaw I would get burnt out from learning if I continued to use it.
Zettelkasten (software): For me, taking notes on a computer does not ingrain itself as much as physical notes. I tried Zettelkasten software and found it a similar experience to Anki.
Zettelkasten (physical): This has been my favourite method of note taking. By manually creating my notes and figuring out the system to link them up, the web of knowledge is created much faster than the software equivalent. However, something similar happened as when I tried to use Anki. My focus switched from "I want to learn this" to "I need to put this in a nice note". Maybe I didn't practice it enough to get good at it. I plan on returning to it again to give it another shot.
Writing blog posts: THIS. Following Dr. Peterson's essay writing guide, I find I am building up expertise quite quickly. This is my favourite and, frankly, best way of learning. It is strange because there are no tricks involved and it is the oldest method of learning. BUT, I do think it is the most difficult method. Maybe that's why it is so effective.
2. Try it.
3... Repeat.
But assuming that's the case:
1. Follow the history of a thing, from its simplest early incarnations, through warring schools of thought, up to cutting edge ideas. Understand the forces (and people!) guiding a thing and you'll have a good way to contextualise everything you learn.
2. Have a project and dive into it straight away. Don't just learn to play an existing song on the piano, write a new song. Don't write another todo app, write a brand new app. Don't learn to ask for a cup of coffee in French, learn to argue about anime etc etc. This exposes you to more tensions, pitfalls, opportunities for failure, and therefore more chances to learn.
3. Skim texts a bit, then play around a bit, and stay in this loop until you feel you have a very high level map of the territory. You're trying to understand firstly what exists at all in the subject you're interested in, but also learning how to relate specific things to specific places/themes/topics. This phase is very much learning how to google in your specific domain, and you're welcome to use fancy note-taking tools and techniques here if they suit you.
4. Pick the most interesting or most challenging part of your project, and go deep on that area. Find examples of experts solving that problem, understand where they're coming from, why their solutions might be different. Pick whichever camp you feel intuitively at home in (maybe you want to be a gung-ho attacking chess player, maybe a slow, positional one), lean towards that solution. Let passion guide you even if you eventually decide you took the wrong turn - don't try and learn OOP and FP at the same time, try out being an insufferable bore about each in turn.
5. Once you've had a few failures and disappointments and proven you aren't going to give up, establish long term feedback loops and use them honestly. What are you trying to paint that looks worst? What words do you keep forgetting? What neural network architecture do you always copy and paste without understanding? Keep practising new things and learning all the ways you still suck. I personally wouldn't over optimise for this early on though, I would wait until you have a lot of momentum built up.
6. Don't let self improvement take over your life. Stop and smell the roses.
Every book would be better if they wrote how to do stuff as if I was a moron and didn't know where step 1 was. While it's kind of annoying for people who've done it for a while, it's great because it covers EVERYTHING. Even that one little tid bit you are so used to that you forgot it exists.
Videos suck often because they are like 30 minute videos when they can just edit out the whole process of them typing and stuff. I want to see you get from point A to point B, but explain what is happening in between. Not see you type out the stuff. Just a waste of time. Not to mention reading off power points.