- Effective instructions should match the content not the learning styles. For example, cooking instruction should use hands-on practices even if the student is a visual learner.
- Learning means that a change made to long-term memory.
- Human memory is not as precise/reliable as computer memory. It has
read-and-update
. Reading memory will lead to strengthen and modify the fetched information especially if the information is recently learned. - Stored information is stored in interconnected neural pathways. If we try to access targeted information, we activate a pathway of neurons to access the information which leads to spread the activation to other connected pathways that may not be related to the target information. This spreading activation leave related pathways primed for activation for hours . As a result:
- Spreading activation leads to related but imprecise information to be conflated with target information, which leads to unreliable recall of information.
- Because pathways stay primed for hours, it helps us with problem solving when we step away to work on something else, go for a walk, or take a shower, and the two unrelated areas connect in the middle.
- There are two types of memory:
- Long-term memory where information is permanently stored and is unlimited. It is analogous to disk storage.
- Working (short-term) memory is used to solve problems. It is analogous to CPU’s registers. The bigger the working memory, the faster we can learn. It is roughly fixed at birth.
- Chunking is when we relate information together as one piece. The more we combine information as one piece (chunk), the easier it is to reason about and solve problems related to it. This is due to the fact that we can store pointers to such chunks in the working memory and access such chunks in long-term memory if needed. Therefore, it is critical to decompose difficult tasks into smaller pieces (chunks) when learning, which later will be chunked together as we practice.
- The difference between experts and beginners is that experts remember and recognize patterns to help them solve problems. However, beginners read code line by line to understand what it is doing or how to approach solving problems. Therefore, to achieve proficiency in programming, you need to read/write and work with a lot of code to be exposed to more patterns as well as programming using different programming paradigms/languages.
- To understand a concept, we may need to go from abstract to diverse set of concrete examples and back to abstract. This helps us with chunking and treating all the concrete examples as different views of the abstract concept. Once we understand the concrete examples, we can connect it back to the abstract concept.
- Spacing and Repetition are keys for learning. We learn problem-solving concepts best by spacing out their practice across multiple sessions, multiple days, and ideally, multiple weeks. Practice helps us connect the text in the problem to the concept and applying the concept to solve the problem.
- Concentration after 90 minutes is hard due to neuro-chemical balance in the brain. It is recommended to rest/sleep/walk after the 90 minutes so the information gets consolidated. Don’t work on other tasks, talk to others, or browse the internet.
- Even if we can access information on the internet, it is advisable to understand concepts we deal with frequently so the brain can form connections and help us understand deeper concepts. Also, it is much better to try to recall information from long-term memory than search for it on the internet especially if we are not experts.
- Problem-solving is not a generic skill. It is domain-specific skill. This means that a good chess player may not be a good problem-solver in programming or other domains. As a result, to get better at programming problem-solving, learn to solve programming problems.
- There is no clear predictor in programming ability other than experience.
- Growth mindset, learning to overcome setbacks and failures, and practice is all you need to be successful in your career. You will have to always evaluate your learning strategies to get the best outcome.
- Recommendations.
- For recruiting:
- There are no good proxies for programming ability, look at their previous work or test them on authentic programming tasks.
- At least among young developers, years of experience may not be a very reliable measure of ability.
- For learning and training:
- Reading a lot of code will help become a more efficient programmer.
- Experts are not always the best at training beginners.
- Learning takes time, including time between learning sessions. Intense cramming is not effective, but spaced repetition is.
- Similarly, spending time away from a problem can help to solve it.
- Just because you can find it through an Internet search or generative AI tool does not mean learning has become obsolete.
- Use examples to go between abstract concepts and concrete learnable facts.
- Seeking to succeed (rather than avoid failure) and believing that ability is changeable are important factors in resilience and learning.
- For recruiting:
- Further reading:
- Why Don’t Students Like School? by Daniel T. Willingham provides a short and readable explanation of many of the principles of memory and how the brain works.
- The Programmer’s Brain by Felienne Hermans et al.c relates these concepts to programming and describes how techniques for learning and revision that are used at school can still apply to professional development.
- How Learning Happens: Seminal Works in Educational Psychology and What They Mean in Practice by Paul A. Kirschner and Carl Hendrick provides a tour through influential papers, explaining them in plain language and the implications and linkages between them.
- 10 Things Software Developers Should Learn about Learning by Neil C. C. Brown, Felienne F. J. Hermans, and Lauren E. Margulieux.
#personal-growth #career-advice