How Programming Has Improved My Thinking

Taylor Galloway
Red Squirrel
Published in
5 min readJul 26, 2022

After coding most days over the past year and a half, I have improved at many of the things I expected to improve at. I have a better understanding of how computers, the internet, and web applications work. I know the fundamentals of writing front-end and back-end code. I can use the various other tools programmers use to get work done day-to-day.

However, to my excitement, I have noticed a steady improvement in an assortment of other mental abilities which are useful in areas outside of coding. Some proficiency in these skills was needed in my previous career, but I have found that software development’s quick feedback loops and collaborative nature have fostered a deeper enhancement of these abilities. Here’s how I think programming strengthens each of those skills.

General logical thinking

The most intuitive benefit of coding is an increase in the ability to think logically. When coding, you are creating a series of steps for a computer to follow. Obviously, you have to think logically about whether those steps in that particular order end in the desired result. You will know immediately whether your logic was sound as the program will work as expected or not. This skill is especially strengthened when debugging. In this scenario, you no longer have the luxury of functioning code. Instead, you have to work your way through all the relevant code step by step and identify exactly which part is not producing the intended result. Some degree of logical thinking is useful in all jobs, but the majority of those jobs don’t provide you with the instant, perfect feedback that coding does.

Focused work in the face of complexity

Coding also builds your ability to work efficiently despite complexity. Given that the average application comprises millions of lines of code with many more contained in all of an application’s dependencies, it makes sense that it takes many teams of people to effectively manage an entire application. No one person can hope to fully understand it all. Despite these foreboding facts, as a developer, you have to push past these feelings of confusion and overwhelm in order to steadily achieve clarity in the areas of code you are responsible for. You have to focus on the slice of code that’s relevant and ignore the majority that isn’t. After enough practice, you develop resilience towards these understandable feelings, and improve your ability to focus on one small piece of a larger whole. You trust that your understanding will improve over time even if it is limited in the moment. This same determination can easily be applied to studying many other subjects. No longer will complexity prevent you from attempting to acquire knowledge.

Analyzing tradeoffs, making challenging decisions, and justifying those decisions to others

As you accrue responsibility in your software development career, you will spend less time copying others’ tested solutions and more time creating and evaluating new solutions. In day-to-day life, it can make sense to save time and energy by imitating others. However, in software, you will inevitably be responsible for thinking through the tradeoffs of different approaches to a new problem, making a decision, and persuading others of your rationale. Other people will then have an opportunity to challenge your decision making and you’ll be forced to confront your logic. This provides ample incentive for you to ensure your reasoning is solid. In contrast, other aspects of life are not as clear-cut and so it’s easier to get away with less careful thinking. In software, either it works or it doesn’t; either it runs faster or it runs slower. Even when there’s no perfect answer to a software problem because you’re balancing competing interests, it is still possible to lay out the options and clearly evaluate which choices preference which interests. Maintaining discipline around your decision-making process can help you think more carefully about the consequences of your actions and ensure you make the best choices in other parts of your life.

Creating precise mental models

When you’re learning abstract concepts in coding, understanding the code that someone else has written, isolating a bug, or formulating a solution to a problem, it is useful to build a mental model inside your head of that code. For me, it helps me to think of these models as mental animations or visualizations. When I was first introduced to basic algorithms, for instance, I needed to create an accurate animation in my head that ran through the algorithm’s steps. At first, this animation was fuzzy and I needed to reference outside sources to sharpen each step of the process. Once the visualization sunk in, I retained easy access to each phase of the algorithm. Instead of struggling to remember every step, I now had a more intuitive feel for the idea and could implement it and talk with colleagues about it. Mental models like this allow you to simulate concepts and processes in your mind clearly. If you can do this reliably, you will have a better understanding of the nature of abstract ideas and systems and can better predict their behavior.

To read more about mental models and software, consider reading this blog post on the subject by Tolu, another Red Squirrel developer: https://medium.com/redsquirrel-tech/building-the-right-mental-model-for-your-applications-90667266b7b7

Having a productive mindset when learning new things

As software is always changing, you will undoubtedly have the experience of being a beginner over and over again. Although you will improve generally at skills that transfer across languages and tools, you will have to start from the beginning with new syntax frequently. This can be a humbling experience. You might have to ask for help from someone with less total expertise than you but with more experience in a new tool. You will have to endure confusion, the struggle to understand something, and feelings of insecurity about your abilities and knowledge. You will receive constant feedback about how something you’ve done can be better. Hopefully, with enough exposure to being a beginner, it will become normal for you. Ideally, this translates to an openness to being wrong and a desire to learn more throughout your life. Learning shouldn’t end when school does and the vast richness of possible experiences in life should not be avoided only for fear of being a beginner again.

Conclusion

There are numerous skills I am omitting that programming surely enhances, but the ones I described have been the most significant to me so far. These general mental abilities are applicable in many other parts of one’s life, so I am grateful that my time spent working also develops my brain to better handle life’s other obstacles. Of course, it takes conscious effort to translate these skills to other contexts and once you do, there will be differences in their application and effectiveness. Our attempts to shape reality will rarely present us with the immediate feedback that a computer does. Either a program is working or it’s not. Reality is messier and is better understood through probabilities rather than certainties. Despite this, I believe a programmer’s time in the perfectly logical world of programming helps them deal with the challenges of reality more rationally. If you’re not already a programmer, consider changing careers as I did not only for the love of the craft but also for the improvements to your thinking!

--

--