I have created a learning framework for myself to learn literally anything.
First of all It’s not going to be easy to get started learning something new because there are many holes in your mental model about the material and the aim of the learning is to fill those holes.
We’re living in an information era. You can drawn yourself in surfing the web/docs/articles if you are some kind of perfectionism to convince yourself that you’re learning. But that’s the trap. You should spend about 30-40% of your time learning the material and 60-70% of your time applying it and then under the process you’ll find: “Oh I don’t know how or what is X” then you go to learn about X specifically. This works best. In other words as you will be applying what you have learned so far you start “learning on demand”. In other words filling the individual holes. This loop will force you to learn the topic.
I think it's a very big problem when learning things that almost everything can be made to sound plausible when you don't have real world experience to compare them to.
It's also very easy for those plausible-sounding ideas to stick around for so long in your mind that you sort of start taking them for granted, and we tend to be really bad at scrutinizing those things we take for granted.
It's only much later, when it just isn't working, and you're relutantly forced to come face to face with the difficult fact that some of the things you thought you knew really well were just some loudmouth opinion on the internet.
> First of all It’s not going to be easy to get started learning something new because there are many holes in your mental model about the material and the aim of the learning is to fill those holes.
It's worse than that, which you allude to later in your comment. The problem is not holes in your knowledge. The problem is, as they say "what you know that just ain't so."
A large part of learning is about unlearning invalid, oversimplified mental models. And you won't find those problems without trying things out and realising the outcome diverges from your expectation.
Overall a pretty good summary of how to teach yourself new skills. I personally went far too much into unguided learning early in my software journey. I took on personal projects that were far too ambitious and floundered with problems that would have been 10x easier if I'd focused on grasping fundamentals.
What's missing in this post is that it entirely focused in isolated learning, away from tutors and other forms of interpersonal teaching. Any approach to learning stuff "quickly" should take seriously Bloom's 2 Sigma Problem. [1]
Partly offloading your learning problem onto an expert tutor trained in master learning has a good chance of vastly exceeding any learning approach a novice can adopt on their own. The internet has thus far failed to support this learning model, I think because it would be incredibly expensive for students.
+1 for a mentor. Everyone who has ever learned an instrument knows the value of a good personal teacher.
Slightly odd personal recent example, a friend who is really good at speedrunning Super Mario 64 taught me for a few hours and I got better at it in an hour than I did in the three days before trying to learn on my own.
Finding a mentor isn't the easiest process, though. I'm a very motivated self-taught developer but there's a giant gap that could be filled by someone with more experience. It's frustrating when I post more nuanced questions on forums and get zero response.
From what I gather, there are two approaches: (1) post in forums and develop a relationship over time (this can take forever), or (2) pay for an inorganic relationship through codementor or some other service and hope that it turns into a more organic mentor/mentee relationship over time. Neither is ideal.
You need to balance having an expert and not having an expert around. Having an expert around to quickly learn the basics is great, but you will never reach the same level as that expert without learning how to learn on your own. This is the key difference between people at higher levels, there are no experts that can teach you there so it all depends on how good you are at self learning.
What do you mean "higher levels"? Is there some forbidden knowledge that must not be written down? Because if not, all levels have experts who can teach you.
There is a lot of knowledge you can't write down since you yourself don't know what it is, you just know how to apply it. For example, how do you structure your programs? You can write down some rules of thumb, but you can't write down your entire decision process as a flow chart that can be used on any program to structure every function in them. How to structure big programs is one of the biggest hurdles for new programmers, they just have to learn it themselves since nobody can teach them that. You can get a bit of feedback for simple program structures, but for more complex cases you wont even get good feedback, to continue to improve at that stage you just have to rely on yourself.
There is so much software out there in a way it is not too different from biological systems. Programs are like creatures you can study and observe. There is no single book explaining all of software. You must be a bit of scientist yourself. Discover how thing work and what works best.
At some point it becomes more like knowledge extraction and synthesis rather than being explicitly taught, because there are intangibles that your mentor can't directly teach you.
> Partly offloading your learning problem onto an expert tutor trained in master learning has a good chance of vastly exceeding any learning approach a novice can adopt on their own.
How have you implemented this in your own learnings?
I must say it's worth mentioning that as you build up a library of knowledge and experience in your mind, learning new things become more transitional than exploratory. Picture spoken languages for example. At first it's daunting and most languages have their quirks but overall after a few you find your marks easily.
The effort becomes a memory concern where cheat sheets are how you transition or learn quickly into a new space.
I'm a polyglot in software development. I can work with most tech stack within 2-3 weeks and be efficient within 3-6 months, idiomatic within a year maximum. A big part of that is due to relatability between spaces. Every toilet has a flushing button and every kitchen has a sink and every language had a form of exposing positive or negative response.
My advice is always throw yourself in and swim. Find whatever swimlane or swimming aid available and move forward.
One caveat is learning spaces that are constantly shifting. For example, Swift. What a mess. Look up anything in that language and find 5 ways to do something, 3 expired, 1 manageable and 1 undocumented that works. It's sad but know that that's the outlier, not the average!
I originally started off as an electrical engineer but these days I do backend and more frontend. I’m “full stack” if you will.
I very much agree with you. Eventually most “new” knowledge feels like it’s just really a new “intersection” of a few core concepts that you already know.
On the topic of the effort being a memory concern and related to the spaced repitition comment in the article, I've found the app Anki to be great for learning a new programming language. There are pre made flashcard decks for many languages at the community ankiweb.net site or if you're good at scraping you can create your own from the docs pretty easily.
First, there is no need to put pressure on yourself to learn 'quickly' - that's counter productive.
Second, you need to find a good teacher.
Finding good teachers is how you learn 'quickly'. Now the way to do that is to have parents who can help you.
Really, the way to learn 'quickly', is to be born into a family that's loving and competent at life. Then it just happens - by the time you develop the ability and interest in looking around to figure out what's going on, you'll have been in after-school activities and a good school for like 10 years.
There's a bit of an escape hatch - if you're good at academics or sports, you'll get to have secondary father/mother figures and that'll be your chance to catch up. If you don't, you're kind of fucked :)
If you weren't born with loving and competent parents, you'll be floundering through-out life, in relationships, in your career, in lack of self esteem. It's a near guarantee, because whatever short comings your parents had, you'll be solving and then some. That's just how life goes.
Being able to learn quickly is extremely valuable, and you don't need a teacher to be able to do so. In saying that, I'm not sure it's something that can be taught.
Don't really get what your parents being "good at life" means though, and everyone's parents have shortcomings.
Whatever parents and teachers you might have in the end you either learn to learn for yourself or don't and you either keep on learning or don't. It isn't very hard or a special thing where you need to have everything go just the right way, this is a very basic thing for our species and anyone can do it.
The internet raised me and I've learned everything from it.
I agree with you on the first point. If you wish to actually learn, you take your time. As for everything else... maybe you should keep out of the """psychology""" section of the library for a while.
Learning quickly only works when every situation favors you. Because learning requires time while knowing doesn't. In this context, to be learned means to craft on your own. And only by knowing things do you get to master things.
If the above lines made sense to you, then only read the following paragraphs because I don't know if you can relate to this or not.
Learning quickly happens when you can know things quickly. That way you will have time to explore a lot and test a lot. Going through tutorials and documentation just allows you to know things. Therefore the quality of tutorials or mentors helps to grasp quickly because they just tell you what to know.
Real learning happens after you know things. Throughout my life, I got confused between knowing and learning. I can read or hear facts such that it allows me to recall the fact. But there were cases where I actually didn't understand the fact as I hadn't absorbed it completely. I just knew how things were but not the idea and reason why they were such.
When you want to truly learn something, to the finest detail, it really really requires a lot of effort and dedication. Picking up new skills is relatively easy. It just requires knowing enough to go through and solve your problems. But honing the skill to master level is really difficult.
Think about drawing sketches. You can just watch a tutorial on it and draw. Then close the tutorial and repeat it. You now know how to create at that pose. But when you want to change it, you will have to know about shading, pose, color, etc. Even if you know them, it's hard to use them because you may have never learned about them. Because to learn about colors, pose, shading requires experience and time. The more quickly you can iterate through it, the better you get about your preferences and style. Knowing them will only give you a shortcut. Learning them will give you a lot of creative freedom.
> But there were cases where I actually didn't understand the fact as I hadn't absorbed it completely. I just knew how things were but not the idea and reason why they were such.
So-called programming "tutorials" have never sat right with me. The idea is fundamentally wrong. It's like trying to learn painting by watching a series of videos in which you're taught which parts of canvas to paint what exact hue to recreate famous works of art, instead of being taught how to mix paints, negative space, and color theory.
"I'm stuck in tutorial hell, I understand the tutorials for how to multiply 3 digit and the tutorial for how to multiply 4 digit numbers. But when I try to multiply 5 digit numbers on my own, I just can't figure it out and have to go look up a tut."
Programming shouldn't be taught piecewise via 15 minute videos on YouTube of how to accomplish one particular specific task. It needs to be built from the ground up, from first principles of the environment in which you're programming, and the instruction given to pupils must be "determine the solution you need, break it into a series of building block steps, and then perform those building blocks." Not "try to re-create the tutorial of how to make a React component send a JSON request step by step without looking at the video." But no one makes video "tutorials" about the building blocks. Which is a shame, because that's the actual learning part.
> It's like trying to learn painting by watching a series of videos in which you're taught which parts of canvas to paint what exact hue to recreate famous works of art
I have some bad news for how artists traditionally learned how to paint. I agree with the overall thrust that only learning by copying with no theory behind it is bad, but the problem isn’t the copying it’s the lack of theory. A python flask how-to that also explains how flask works while doing the step by step process seems just fine to me.
Disagree. You view programming as an art, okay that's fine, but most of the time it's not an art. You want to know how to do something one way and then if you really care about what you're building, you research better ways of doing things and from understanding why certain ways are better you start building the blocks of the underlying concepts.
Building blocks from the ground up is great for schools, but is incredibly time consuming for learning the breadth of a tool.
I'm thinking of writing an anti-blog post on how to learn stuff slowly. In my experience, the subset of "stuff" that I mastered and differentiate my skills from others is actually the "stuff" that cannot be learned quickly. It's often not so black and white how to learn this "stuff". It requires years of deliberate practice, there will be no tutorials, there will be no king's road (guided learning), there will be no mentors that can help you, there will be periods with no progression, there will be setbacks, there will be periods with no practice at all.
I think every successful learner in CS or programming is doing a large amount of experimenting. Many books I've read encouraged or even required the reader to extend the software or algorithms written by the authors.
Growing in a poor Eastern European country with a cheap Z80 computer, meant experimenting was needed for me to learn as a kid. There were only a handful books about Z80 programming and all were about Basic and also very basic. The other books were either in abstract CS territory, full of high level math or about some big iron machines and languages that did not run on my Z80.
So after reading somewhere that I can poke some address to obtain a particular effect, without explaining why, the next question was what happens if I poke another address?
> If you're anything like me, you don't like making mistakes. You want everything to go perfectly, the very first time. This mindset is generally helpful in life...
I'd say that it's normal to feel that way but that it's directly detrimental to learning. If you want to learn something outside your comfort zone you must first learn to recognize, identify and embrace the fact that you are outside your comfort zone.
Wanting things not to go catastrophically wrong is one thing but not letting yourself play, experiment, or even try, because you want everything to go perfectly the very first time, is probably one of the most unhelpful things in all of life.
I don't think that's actually true. I mean, obviously, I'd _like_ things to go perfectly the first time I try, but I'm resigned to the idea that they most likely will not, and that in fact they might _never_ go perfectly. Playing the guitar taught me that. :-)
So I don't stress about failure too much, and encourage my son to start small and fail from time to time.
The opposite of what Homer Simpson's advice where he said: "You tried your best and failed miserably. The lesson is, never try."
Yeah, also it might be poorly expressed of me to say that the desire for things to go perfectly is the thing that is holding people back. Maybe it's better expressed as the fear of looking bad in front of others (and often even to ourselves).
I glanced at the article and there are some good tips here, but I really enjoyed seeing an actual hit counter at the bottom. :) Love the throwback to a simpler web, even though this one is surely much more complicated under the hood.
My latest way of learning a new programing language quickly is to actually understand how to read and navigate the API/Documentation properly, followed by learning compiler/interpreter error messages and what they mean. Understanding the syntax sorts itself out through sitting down and commencing coding something... It's not something I will directly study in a book.
A good summary including many of the common techniques of how to learn something. One of the things I always ask myself at the beginning is why. I might see something that is interesting and get temporarily motivated to do it, but if I stop myself and ask why, I'll often discover I'm just riding someone else's interest.
Where I tend to get stuck is somewhere between the “make something similar to tic-tac-toe, like bingo” and “make a level editor for beat saber”.
It’s a difference both in scale, and in divergence from the known. While I’ve built large systems for work, it’s usually on the scale of ~1000 development hours and 10-100k+ LOC. Most of my personal projects are basically toys, a few hundred LOC and do-able in an afternoon. I’d like to be able to build medium-scale things without dedicating a significant chunk of my life to them.
The other facet, divergence from the known, is the other sticking point. Given a tic-tac-toe board it’s pretty obvious how to build bingo. I don’t even know what I don’t know about how to build a 3D editor, so it’s hard to get started. (I have this problem with math, too; since so many concepts build on each other, it’s hard to jump in and do something interesting.)
Nice article! Also consider reading a book after you've got some practice. Things will make much more sense than if you do it without prior experience and you'll get much more in depth understanding of the subject.
I greatly prefer books over videos when it comes to learning programming topics.
I'm always disappointed when I am directed to a video, rather than text, when I'm searching for a particular topic.
It takes a long time to seek to what you want, and you're forced to learn at the speed of the presenter, rather than your own speed, as with text.
I also find it easier to learn things offline. I had to get up and running with the Spring Framework quickly, and what worked was putting the documentation onto the Kindle.
Actually it's 25. Around that time your neuroplasticity changes and it becomes a lot harder to learn new things. You still can, but it takes much more effort and deliberate protocols to follow.
Prof. Andrew Huberman from Stanford University School of Medicine has some great podcast episodes on this (among other interesting things) [0].
>> You still can, but it takes much more effort and deliberate protocols to follow.
>is absolutely true, words for words :-)
Do you follow a specific protocol or method for learning these days? And compared to when you were learning something when you were younger, do you find it more challenging (even with the protocol)?
My general health is not very good and age has effect. Basically, memorizing is much harder. I need about 3x more time to memorize. Moreover, in the past I could memorize some stuff "by heart" but now it's almost impossible so the consequence is that I have to understand every single bit of information I learn. That needs a lot of work. So I need to work a lot more and plan a lot more than when I was young. Moreover, when I was young I was a top 10% student and without too much work. Things have changed and I had to realize and accept it :-)
Being older has its advantages : when working with young students, I can influence groups to go in the good direction (before I was more of a follower). Also, since I've chosen to study again, I'm 100% clear on what I do. This translates to studying very seriously (I'm not distracted by the web, tv, etc. except HN of course :-) ). The professors have also lost a bit of their charisma, so I don't fear them any more.
The life/studies balance is a bit tough sometimes but fortunately my family is very supportive. This is really important because when the work load is high (say, work 12 hours/per day for several days), the kids, my wife start missing me. I also most often refuses socializing 'cos it takes time and energy. All in all, they show a lot of patience.
The hardest part for me is the stress of the exams. Before I was (over) confident in my ability to succeed, now I'm not at all, so it's stressful. Also, I sit in front of my courses for long hours and it has real effects on my muscles. It's difficult to maintain physical activity when under pressure.
So my protocol is simple : I work 5 days a week, about 10 hours per day. Saturday is off, no matter what. Sunday I work only 7-8 hours. I do my best to be in bed before 11pm; I start working before 9:00. I do my best to have a 40 minutes walk 3-4 times per week. I try not to spend time in front of my computer when not needed (I don't spend hours tuning emacs or Debian any more :-)). I try to read 15-30 min. before sleep. The rest of the time is for family, preparing diner, dishes. So basically, I don't have personal leasure time anymore (but since I like studying, it's not much of a problem).
All in all, it's doable if you can afford to stop working the time needed (2 years in my case). But you need lots of discipline and a supportive family 'cos your brain has definitely aged...
The change is gradual however. You don't wake up one day at 25 having drastically changed neuroplasticity overnight. Being healthy and in shape also seems to be important, as well as continuing to learn new skills and engage in novel activities.
Thanks for the insights. I followed one of your links, namely your link to DEV (0). And found this guy's work (1) where he publicly details working through "Eloquent Javascript". Useful.
(0)https://dev.to/
(1)https://dev.to/prerana1821
One thing that has helped me to learn better is not immediately ask for help but try to solve it on your own. While it might not be possible for everything, trying to solve on problem by yourself in a day goes a long way.
For example in programming, when I stumble on a problem, not immediately going to SO for an answer but thinking about it for a while has helped me to learn better.
When learning something new, I’ve found it’s helpful to hear the top experts engaging with one-another about the topic. Not to hear what they think, but to hear how they think, and in particular, the level of abstraction in which they’re working.
Speed is not usually a problem, at least for me. The real problem is _retention_. That is, specifically, being able to recall what I learned if I stop using it regularly for as little as even a couple of months. If anyone has some _real_ tips on how to improve that, please share.
Don't bother trying to remember details, especially about software: When you next need them, they will likely have changed. Instead, learn how to efficiently look up the current information when you need it.
Actively look for relationships between what you're learning and what you already know: Does the thing you're learning solve a problem that you're familiar with? Is its mechanism similar to something from another field? Does it achieve a similar result in a novel way? etc.
Write down these insights somewhere, and figure out some way to habitually review them. The details of this habit probably don't matter too much, as long as it's something comfortable for you to keep up long-term.
I usually write a quick reference/cheat sheet document for myself, first on paper, then move it over to OneNote. If I can find the paper version the next time I need it, great :) Otherwise I can look for the digital copy.