If you’re in software, you know that coding can quite difficult at times. Almost every week brings a new topic you’re unfamiliar with, that tests you’re ability to understand abstract concepts. For me at the moment, it’s machine learning. Understanding the maths, as well as the algorithms themselves can be quite painful. I have to sit down with a pen and paper, and work it out for a while before the concepts truly begin to sink in. However, before that point, machine learning concepts seemed like a black box to me. There is a battle between my brain resisting new knowledge, and the comfort you feel by simply not making the effort to learn (i.e. being lazy). So, why does this happen and will it ever end?
Your brain has two systems at work. One, is the subconscious that is exceptionally well at dealing with repetition. This is the part of your brain that handles seemingly mundane tasks such as vision with effortless ease, despite being quite computationally intensive. The other system is that which consciously processes thought, such as trying to multiple 13×12 in your head. Your subconscious hasn’t dealt with this pattern enough times to do it automatically, so it delegates it to your conscious system. Interesting enough, the system at work which is reading the words off this page is your subconscious. Words are actually read before they’re even processed, which happens because your brain has done this so many times that the pattern itself becomes ‘muscle memory’ – that is to say, your subconscious understands the task so well, that your active thoughts can be utilized elsewhere (it has nothing to do with muscles).
When it comes to programming, almost every new concept requires your conscious brain to do quite a lot of work to untangle and understand new information. Programming is the language of logic, and this type of logic requires calculations that the subconscious brain is unfamiliar with for the most part. For example, understanding why matrix multiplication is used in an artificial neural network isn’t intuitive. Your subconscious needs to delegate that task of figuring out ‘why’ to your conscious brain, which is what actually does the heavy lifting. As it turns out, this heavy lifting is hard.
There have been studies that show tasks which involve a heavy use of your conscious thought to solve problems are accompanied with increased heart rates, pupil dilation, and sometimes even sweating. Such tasks take effort, and we as humans avoid doing work as much as possible. However, when a task becomes ‘muscle memory’, it’s easy for us. We complete it without so much as a second thought. We treat the use of our conscious brain just like how we treat the act of getting up and going to the gym. It’s tiresome and takes actual dedication to follow through with.
That is why coding is hard. There are so many concepts that require you to actively put effort into and think about the problems you’re working on. Every new concept that emerges requires thought and effort to unravel, such that it begins to connect with previous knowledge. Those connections of new knowledge with old knowledge is what drives human learning. We do exceptionally well at connecting the dots. What we don’t do well at is making sense of something when it is an outlier, and we must actively think in order to make sense of it.
So, the next time you’re diving into a new codebase, or a new topic, remember that the feeling discomfort that may sometimes arise is perfectly normal. Part of it is due to the unknown itself, while the other part is due to your brain resisting the effort required in understanding and working out the task or problem.
I suspect this system applies to many other areas. However, I as a software engineer, know it intimately when it comes time for me to learn something new or dive into a new project. For me personally, I feel it is beginning to lessen to an extent. As a new programmer, I felt near anxiety in situations like the aforementioned. However, I found that as I learn more and more, my brain has a lot more opportunities to make connections with new knowledge, which leads to less of an effort when it comes to learning it. More connections are open, therefore less effort is required to find or build new ones. Likewise, the more code I see, the easier it is for my subconscious brain to gaze at a file and understand it much easier than I would have many years ago. Lastly, my comfort with the symptoms mentioned above has grown greatly.
So yes, coding is hard. However, learning, when approached as a pathway to discovery, is fun! Thus, as long as you keep having fun, the difficulty itself becomes not only lessened, but well worth it in the end. Find problems you’d love to solve, write software you’d love to use, and learn because you find inspiration in what you’re learning.
Cheers and happy coding!