Learning anything new can be exciting, but it can also be tough. We go into it with the expectation that we’re going to spend a certain amount of time every day or week learning something about a specific topic. We are all striving for some degree of mastery over the topic we choose. If you’re anything like me, then you will feel frustrated when your study time doesn’t yield the same amount of learning as it did the day before, but this is natural and part of the process. Learning is not linear.
Learning by repetition
Some things we learn simply by doing them repeatedly. I’d be willing to bet that you can add 2 and 3 in your head and not even think about it. But why is that? It’s because you’ve done it so much over the course of your life that you don’t even have to think about it. Quite a bit of coding is like that. If you continue long enough, through repetition, you will begin to be able to do things easily that you had to make a concerted effort to accomplish before. Likely as not, you will be unable to pinpoint an exact time when it made sense to you. Somehow, over the course of repetition, it just does.
Scaling the cliffs
By contrast, some ideas are more abstract. There will likely come a time in your learning when you notice things becoming significantly more difficult. These tend to happen when concepts come into play. You’ve learned the basic building blocks, but now you must put them together to architect a solution to a problem. In my experience, this feels a bit like standing at the bottom of a cliff. It is here that I’ve felt the most frustration in my learning process.
There is good news, though. It can be overcome, and you can climb that cliff! I have personally experienced situations where I simply could not grasp a concept. I may have heard twenty explanations and seen twenty examples on the same topic. For some unknown reason, it might be the twenty-first explanation and twenty-first example that makes it all clear for me. In most cases, there is nothing incredibly different between that example and ones I’ve seen before. I’ve been known to sit in my office and audibly say “Oh!” when it finally hits me, and the concept crystallizes in a way that it just never has before. The great thing about these moments is that once you understand the idea, it’s difficult to forget.
When you understand a concept, your learning isn’t as much of a curve as it is a vertical leap upwards.
The thing we should unlearn
Humans are not born believing that they can never be smarter. That is something we learn during our lifetime, and it’s something we should all unlearn. If you’ve ever seen a child tackle a puzzle, then you’ll have some idea of what I mean. A child will become bored with an easy problem but engaged with a tough problem. By contrast, an adult will likely throw up their hands in frustration and walk away from the problem. The instinct we are born with is that we can get the solution with enough time, effort, and resources.
Alfred Binet who was the inventor of the first practical IQ test believed that intelligence was changeable. In his book Modern Ideas about Children we can find this quote: “A few modern philosopher’s assert that an individual’s intelligence is a fixed quantity, a quantity which cannot be increased. We must protest and react against this brutal pessimism… With practice, training, and above all, method, we manage to increase our attention, our memory, our judgment and literally to become more intelligent than we were before.”
You might be working on a piece of code or coming to terms with an idea you haven’t fully grasped yet. You might think to yourself “I’m not smart enough to do this.” I’ve thought that many times to myself. I still think it when I get stuck. I’m comforted to know that my inability to solve the problem is likely not permanent. That’s something that can change with time, effort, and resources.
Memorizing is mostly wasteful
People have asked me repeatedly what I would suggest are the most important things to memorize when learning to program. My answer: practically nothing. Anything that might be important enough to memorize will happen naturally through repetition as stated before. If you’re not using a particular thing in your programs often enough to learn it through repetition, then it’s also not worth putting in the effort to memorize it.
To go back to my mathematics example, you probably did at some point memorize 2 + 3. My guess, though, is that you didn’t memorize 29,083,983 + 12. And why is that? It’s because you understand the idea behind addition. You know how addition works as a concept so you can use it on any numbers given to you. This is an example of memorization being wasteful.
Programmers, in general, do not rely on memorizing every construct, every parameter, every object, method, and class. Instead, we use our resources combined with the concepts we’ve learned to produce the result. This is why documentation is so incredibly valuable, and you’ll hear programmers talk about it a lot. I’m betting very few people memorize every recipe in a cookbook. If we want to cook something different, we read the cookbook. This is the same idea. If a programmer had to memorize everything about even one language, we’d have no programmers.
Don’t stop learning. Even if you’ve been stuck on a problem or project for weeks, don’t quit learning. You might need to go back and review some of your basic building blocks. You might need a different source as a change of pace. Try reading an explanation on Medium or look up something on YouTube. Maybe even just do some generic Googling. You could even try learning something else about the language/platform/IDE and come back to where you got stuck. Keep pushing against that wall. Eventually, you will have a breakthrough, and it will probably be something you won’t easily forget. It is worth the time and effort even if you do not see immediate results.
Programming can be tough to learn, but also incredibly fun and more creative than non-programmers likely understand. If you’re interested and dedicated enough, you will see progress. The next step you take could be the one that is your breakthrough point, but you’ll never know if you don’t take that step.