How to Learn Programming Concepts

Software engineers have to retain a massive amount of knowledge and constantly learn new technologies, so it’s important to understand the basic neuroscience behind how the brain absorbs and stores information. The human brain is the most complex device in the known universe, but software developers only need to know some basics to learn more effectively.

Sleep
The brain produces toxins in the awake state that are washed away during sleep, so it’s important to get a good night’s rest. It’s beneficial to attack hard problems first thing in the morning with a “fresh” mind. The behavioral economist Dan Ariely is even making an app to help humans fully utilize their “two hours of peak cognitive capacity”, which is typically first thing in the morning.

Exercise
For most of the brain, neurons are not created or destroyed during life, so the neurons you’re born with are the same as the neurons you die with. It was recently discovered that new neurons are created (called neurogenesis) in the hippocampus, a critical part of the brain for learning and memory. Neurogenesis in the hippocampus is enhanced by exercise and/or a stimulating learning environment.

Practice and Repetition
The brain has working memory and long term memory. Working memory is stored in the prefrontal cortex and can hold 4 chunks of information (think of trying to remember a phone number you just learned). Information in working memory is ephemeral and it requires a concerted effort to hold data in working memory (think of repeating a phone number you just learned over and over to remember it).

Repeatedly studying concepts is the best way to store information in long term memory and practice retrieving the information. It’s best for the practice to be spread out over many days for the brain to fully work out the storage and retrieval of the data. Cramming does not work because the information is not properly stored in long term memory and quickly evaporates.

Letting Your Mind Wander
There are two types of learning:
1. focused – concentrating intently on a subject
2. diffuse – thinking about a subject broadly (how you think about a topic when you’re going on a walk or taking a shower)

When learning, it’s important to engage in both focused and diffuse thinking. It’s important to hit the books and concentrate hard, but then take a break, and contemplate the material at a higher level while relaxing in a chair or walking in the park. Taking a break to broadly brainstorm a problem is not lazy, it’s a critical technique for building strong neural connections.

Practical Suggestions
Living a generally healthy life with adequate sleep and regular exercise creates a healthy body and a healthy mind. The brain is freshest first thing in the morning and it’s best to use this time on productive tasks, not waste it commuting.

Reading over technical concepts passively without revisiting them frequently over the course of several days does not allow the brain to develop strong neural networks and store the information in long term memory. Merely reading a technical book is a waste of time. Learners need to read the book, take notes, write blog posts on what they’re learning, and create quizzes that can be constantly revisited to solidify neural connections. Repetition is the only way to train the brain to store information in long term memory and load the information into working memory at will.

Diffuse thinking should be prioritized. When going for a walk, make an effort to have your mind ponder computer science, not family gossip. Turn your computer off and draw a picture of what your learning. Metaphors and analogies are powerful learning techniques. When I was learning object oriented programming, I always thought of classes as factories that worked to product objects, like an automobile factory. Make your own metaphors and have fun using diffuse thinking to build strong neural connections and efficiently store data in long term memory.

P.S. This post was motivated by the first class of the Coursera Learning How to Learn class.

Leave a comment