Source talk: Allison Kaptur Effective Learning for Programmers
Confidence is great for old or routine situations but utterly fails in the face of obstacles, setbacks, or failures. A growth mindset embraces these unexpected issues and utilizes them as a means to grow in knowledge and experience.
Learning is a skill that you can get better at.
Effort retrieval (flash cards vs reviewing notes) is exemplified by the fluency illusion: skimming docs thinking, "yeah, I got this", then closing the text and your mind going blank.
Difficulty is desirable as more difficult things are more likely to be retained (e.g. blurry font was better retained because it was harder to read). Struggling to come up with the wrong answer on your own then getting corrected is better than being given the correct answer. One exception is anxiety about performance. You spend cognitive load worrying and perform worse. Psych safety is key to growth mindset.
- Spaced Practice
Something that keeps coming back is more likely to be remembered.
Tweak all the variables in the system to feel them out and get to know them. Breaking, building, and tinkering deepens knowledge.
Mix with other similar tech/skills. This helps identify when to apply the new tool or skill and ties to existing mastery.
You want difficult. Difficulty makes it stick. It doesn't feel efficient, effective, or easy. You don't feel like you're making much progress at any one time. This feels bad, it feels terrible. Even when you know this is more effective, it's easy to slip back to less effective methods of learning because they feel better, faster, and more effective.
Use flashcards to build a base to build your tower of knowledge on.
Take guesses and quickly verify. If you don't recall an API, give it a try before looking it up.
Run war games or mock outages to guess and test what systems will do.
Have a working knowledge of where a bug might be and constantly double check your hypothesis.
In conversation you can check your understanding against someone else's knowledge.
Do spaced practice using side project! Reloading context is good for your learning.
Context switching is not great when trying to get something out the door, but great for your long-term learning. Take a good judgement approach.
Implement difficulty: make space to make errors. Create feedback loops to yourself.
Many programmers accept a growth mindset in learning technical skill or new languages but then have a static mindset about social aspects of the job (which are often more important and necessary).
If you list all the things you're good at or interested in, you can go in with a more broad spectrum of thinking. You're not bucketing yourself into one area (which can be difficult to grow out of).
This happens with musicians and athletes too, people think they're born with the talent, which is only partially true. Practice makes a difference.
Some context switching helps reinforce (several small sessions is better than one large one). But there's a balance here, have a view of their learning and forgetting outside of the classroom.
Make it easy and safe to guess wrong and make mistakes (repls are great for this).