Learning tips
Not long ago, I had an exciting conversation that led to a deeper understanding of how we learn and get frustrated with the lack of progress. It got me thinking later about my approach to gaining new knowledge and my current, ongoing projects.
Firstly, a significant obstacle is the difficulty in acknowledging a lack of knowledge. We know we came here to learn something new, but it is not easy to be comfortable. Instead of listening to what the teacher is sharing with us, we often demonstrate our prior knowledge and understanding of the topic. It might be helpful to place the new findings in the context of our current understanding, but at the same time, it is essential to realise why we came there in the first place. If we already had the experience and knowledge, we wouldn’t have to learn it. For example, while learning Haskell, I often relate my functional programming knowledge to my experience with other languages that do not encourage pure functional approaches. The more I dive into the fantastic world of Haskell, the more I realise I need to leave the baggage behind and look at writing the software from a fresh perspective. Later, I used it in my day-to-day coding, rather than letting old habits pollute my new functional way of thinking. I firmly believe that examining the problem without dragging too much context is very helpful and fosters openness to new perspectives that might be revolutionary and turn our thinking upside-down.
It is not always easy to admit that, despite a few years of experience, we still struggle with some basic concepts and need to train on things that seem obvious. However, with my years of experience, I have learned that simple things appear apparent only from a naive perspective, and there can be hidden complexity in something that seems simple. An example could be getters and setters. When I started coding, I never even considered that things could be immutable. I thought there was an object with parameters that you could modify as needed. So if somebody told me at this point that it is helpful to put constraints and never change the value, I wouldn’t believe that it could be beneficial. Now I see lenses in Haskell that abstract it even further. This example teaches me that something as elementary (from an imperative programming perspective) as assigning a value can be surprisingly complex.
Another significant obstacle in the learning process is the impression that we are not making any progress despite extensive work. Often, we see others as gifted, believing we lack the talent. I don’t want to argue that some things come more naturally to us and some are harder, but it is often more about training and persistence than talent. Of course, we need to have realistic goals and dreams, but focusing on our progress rather than comparing to people around us makes it much easier to grow and not give up along the way. I will not compete with Kelly Slater in the WSL tour, but I firmly believe that I can do a proper bottom turn and use the wave’s energy efficiently in a few years with enough training.
So to summarise, I believe that a few things are essential to learning new things. First, we admit ignorance and lack of current knowledge. We then accept our current situation, recognising that we want to improve it. Finally, we need to get that good things do not come easily or quickly.