Does learning to code make you better at life?
More and more the world is turning toward software. The recent pandemic has only served to show us how powerful it can be in connecting people with service, information and, most of all, each other. And it is probably true that this trend toward the digital is only going to increase. Let’s face it, in our entire recorded history, there has never been anything even close to what software can do for leveraging the use of time and resources. Given the incredible amount of data crossing the networks around the globe, it is quite true that, without software, our modern world would not be possible. Increasingly, software underlies a larger stratum of our daily lives.
Personally, my life as an expat in Japan has by default made me much more reliant on digital technology than I ever was in my youth back home in the US. Ultimately, spending so much time on the internet as a means of staying in touch with family, friends and the (English) news is what has led me to my passion for software development. Because, really, software development is what makes it all happen. No developers; no software. And now, with the rise of the Internet Of Things, this will be all the more true.
But what is really interesting about software, leaving aside the hardware which it runs on, is that humans actually have to communicate with it in some way to elicit the results we want. We have to tell it what to do, in the most literal way possible, before it can be useful. This, this node, is where everything really happens. And this is where I would like to focus on for the rest of this post. Particularly on not what we can do with software but what learning to work with it can do for us. And so,
The Benefits Of Learning To Code
In brief they are:
- enhanced concentration
- increased objectivity
- better problem solving skills
- deeper patience
- heightened creativity
- greater understanding of how to learn new things
- more appreciation for the effort of others
Enhanced Concentration
How it applies to coding:
Software development takes immense concentration. Computers make no allowance for nuance or implication. In order to successfully build any kind of application, you will necessarily cultivate the ability to concentrate very deeply for prolonged amounts of time. This is useful when you are coding because you can focus on the relationship of a part to the whole. Keeping the whole in mind while starting is something I have been told is vital. Some even say that whatever you are building should already be complete by the time you sit down to start building it.
What this really means is that you must have a very clear idea of the separate parts you will need to build and how they will work together in order to create the final result. Starting with or without this understanding can make all the difference in terms of how long the project will take and how difficult, i.e. how much hair you will lose, during the process. Naturally, no normal human being can simply start with this ability any more than a pro athlete can be a pro athlete without having trained to become one. But, if you take the time to learn to code, you will enhance your ability to concentrate.
How it applies to life:
Concentration is the antidote to distraction. So, basically, the more you can concentrate in your life the more productive you can be. The less time you will waste and the more effective you will be in using it. Concentration by being a means of neutralizing distraction also means you can begin to have more control over your emotions, too. This is because you will know more clearly where to concentrate because you have the ability to direct your concentration.
Increased Objectivity
How it applies to coding:
As I mentioned above, computers make no allowance for nuance or implication. What this means is that, if the code is written correctly, it will work every single time. If it is not, it won’t. There is no in between. Computers don’t get angry or forget or daydream about being somewhere else. They just do what you tell them to do. And it takes time to really understand what it is you are telling them to do. The depth of this understanding and one’s ability to apply it as simply and clearly as possible are what makes a good developer.
While the tendency toward frustration can be extremely strong when trying to figure out what is “wrong ” in the code (no, punching the monitor and/or turning red will not help :-)), one learns over time that the more objective (not emotional) one can be, the faster the problem will be resolved. Unfortunately, there is a learning curve to be overcome for most before the emotions of doubt and frustration cease to arise (at least quite so strongly). And, because of this, many give up and abandon learning the craft far too early.
But, for those who can persevere through the initial storm of learning. That is, for those who are disciplined and not full of unrealistic expectations, they will, sooner or later, learn to approach problems in a way that is far more constructive and measured than before: a way that is objective. It comes from analyzing the reality of the situation instead of resisting it while hoping doing so will somehow change it. Sounds crazy, I know, but that is exactly what a lot of us do and not just when coding.
How it applies to life:
Generally speaking, “successful” people are usually objective people. They focus on solving the problem and what they can do in the immediate moment to take steps toward doing so. They don’t dwell on how bad the problem is or how nice it would be if the problem were gone. They don’t blame. They don’t avoid. They don’t procrastinate. They don’t run away. Because none of these options will actually solve the problem. It will still be there when they come back and they will simply have lost time on moving forward. Sure, they may take a break and often should. But when the problem is the object of concentration, focus is on fixing it.
Essentially, a strong sense of objectivity serves to bypass the natural tendency toward becoming emotional. This can have huge benefits in daily life because it saves your energetic and mental reserves from being meaninglessly depleted by stress, fear and anger. And these three elements will not only destroy your mind but also your body if you give them enough time. Imagine a life where you felt less stress, fear and anger simply because you were able to focus on what your five senses are telling you instead of how you feel about it. This is the mark of the outliers. The people who are able to excel at what they do because their energies are focused purely on doing it.
Better Problem Solving Skills
How it applies to coding:
Based on my own experience, I would say that aside from a solid understanding of a given programming language’s syntax, the ability to problem solve is probably all you need. That may seem like an understatement but, the truth is, there is so much involved in problem solving that, if you can consistently do it, the rest is pretty easy. Initially, when I first started learning, I would become immensely frustrated almost immediately when a problem arose. This is a natural reaction as most consider problems to be unpleasant. Problems stop us from doing what we want to do or being where we want to be. And so we tend to feel bad about that. But beyond the immediate frustration there is another, far more fascinating reality: your code is doing exactly what you have written it to do. It’s actually running perfectly but you haven’t written it to generate the desired result. Computers don’t know their behind from a hole in the ground when it comes to figuring out what you want them to do. It’s not like some malignant 3rd party is attempting to ruin your day (although it can definitely feel that way) or you’ve somehow made it through life without realizing you and only you are very likely the dumbest person on the planet (definitely can feel that way too). The truth is the problem is right in front of you. Not to sound too wispy, but the answer is in the question errrr… the solution is in the problem?
What I mean is, if you can carefully and calmly work through your code in real time and read what it is doing you will eventually see where you’re desired functionality is departing from your actual functionality. And that is where the problem is. It’s as simple as that but generally not very easy. The roads to this point are many but the feeling on arrival is generally extremely rewarding and empowering; addicting even. It is also generally an incredible learning experience as well. Something akin to going hard at the gym and then stepping out of the shower feeling embodied, strong and ready for life. The truth is, we actually thrive by solving problems. Whether they are physical or mental, the reward is generally the same.
How it applies to life:
Life is full of problems. As fragile, soft and weak beings vulnerable to the elements and laughable in terms of our physical toughness in comparison to any other animal of equal size, it is our problem solving skills alone that have allowed us to remain the most versatile, adaptive and dangerous beings on the planet for thousands of years. Well, that and our ability to work together in large groups without killing each other. That’s been helpful too.
The truth is that the ability to problem solve is a kind of superpower in terms of improving your situation. While the stakes are much lower these days for those who fail to confront and solve their own problems. Doing such is not without consequence. Where once it was true that failing to find a way to succeed literally meant becoming something’s lunch, these days it usually means something more along the lines of failing to have the lifestyle you want, the income you want, the time you want, the skills you want, the opportunity you want, the happiness you want. Do you see what I mean?
The pursuit of a goal necessarily implies learning how to achieve it while you pursue it. It can be a real Catch-22 unless you can manifest the confidence and resolve to trust in the ability to confront problems and cultivate skills the nature of which you know nothing about until you have to. You must face things you do not understand and work with them long enough and deeply enough until you do. These “things” can be seen as points where deeper focus is required to continue or as “problems”. However they are seen, the process of successfully overcoming them is essentially the same. And the ability to do that is immensely empowering.
Deeper Patience
How it applies to coding:
To many, the notion of patience can seem somewhat old fashioned. As if it were something for people who don’t know any better. This type of thinking is deceptively common. The element of time is generally invisible to us and therefore difficult to work with in a concrete sense. We also tend to overlook the sheer amount of effort that has gone into creating the things around us. Even if we undergo the effort ourselves we have a tendency to almost immediately forget it afterward. So what is the point of patience? Perhaps a key thing to understand is that patience does not imply simply waiting for something to happen. Patience relates to the pace at which you expend your energies when working on a given task. That is how quickly or slowly you burn through such resources as concentration, wakefulness and (in the case of coding) the ability to sit without moving. Patience also implies an understanding of the greater task and how your current actions relate to it.
As an example, we naturally run slower over a greater distance and faster over a shorter one. This is because we implicitly understand that doing otherwise is inefficient at best and dangerous at worst. The same applies to coding. We need to have a strong awareness of exactly where we are in building the application and how best to designate our cognitive resources to maximize the effort to reward ratio. A lack of patience (sustained and metered application of your resources toward attaining a specific goal) can transform this effort to reward ratio into something more like a “random attempt to frustration” ratio. This is a classic pitfall to be avoided in most things in life but can be particularly frustrating when working on coding an application because it can literally mean the harder you try the more frustrated you get.
The trick is in knowing where your are “on the course”, so to speak. You shouldn’t just start blindly building variables and functions any more so than you should just start running as fast as you can in any direction as soon as you hear the word “go”. It’s somewhat paradoxical but taking your time in figuring out where you are and where you want to go can actually save you time in the end because you will be spending far less time cleaning up your mess and more time actually moving forward. This is usually an expensive and painful point to learn but there is a marked difference in bearing and general composure between an individual who has realized it and one who hasn’t.
How it applies to life:
Life can essentially be viewed as many, many smaller tasks contained in the larger task of existing between birth and death for however long we have. Patience in life can make navigating the journey far easier and more enjoyable. It reminds me of the ancient maxim to “change what you can and accept what you can’t”. By focusing on what we can do instead of what we’d like to be able to do we unburden ourselves from an immense and stressful weight. And we are left able to devote our resources to apply them in a way that is actually constructive. Like the runner in the middle of a long race, we know where we are and we can focus on each step as we pace ourselves in getting to the goal whatever it may be.
A sense of patience regulates the mind and allows it to run smoothly like a jet in the stratosphere. We don’t need to strain or heave ourselves along hoping that the added friction and pressure will make things come sooner. We can use our position, pace and momentum to navigate with a greater sense of ease and contribution. If you’ve ever seen a true master of something perform their craft, you will likely notice a marked kind of understatement to their movement. Or perhaps elegance is a better term. Their movement is perfect and they do not hurry. Yet somehow their results seem to come more quickly. This is patience at its finest; in harmony with the elements to allow the results to manifest unhindered and unhurried without stress or coercion.
A patient person with correct focus will always be more productive than an impatient person simply trying to force results. They will also generally be healthier, too.
Heightened creativity
How it applies to coding:
Initially, most regard coding as a highly logical and somewhat mysterious endeavor. “Hacking into the main frame” and so on. And while it does have this aspect, we are dealing with machines after all, there is another level to it that occurs in the human facing realm of the given software language. As a software language is essentially a means of making machine code more readable for human beings, there is necessarily an element of communication to them which inevitably means there is also a creative component as well. This is because, as with any form of communication there are multiple ways to say something.
In the beginning, this generally takes the form of first trying one thing to see if it works and then another completely different thing if it doesn’t. This process of iteration creates the necessary mental flexibility to eventually change into entirely different approaches to solving the problem. You get used to trying different things before you succeed. Before long, you will notice yourself with two or three potential solutions to a problem in mind before you have tried any of them. You will find yourself with less of a sense of bewilderment and more of a sense of creativity and engagement when faced with something you don’t fully understand. In knowing there is a way to solve it, you cease focusing on “if” and start focusing more on “how”. Here in the “how” is where a deeper sense of creativity is cultivated.
How it applies to life:
Creativity can be an extremely powerful asset. It signifies a more awakened mind and one that is willing to try new things to improve and better the status quo. Unleashed on a problem or a new idea, creativity will flow and penetrate exploring every facet and configuration looking for associations and uses. This is where innovation comes from. It is true to say that, if it weren’t for the creative minds of the world, we would be living in prehistoric conditions. There is literally nothing in our daily lives, save for the air we breath and the water we drink, which hasn’t somehow been acted on, leveraged and improved by the efforts of creative minds. So it goes without saying that being creative creates tremendous opportunity for a rewarding and more comfortable life regardless of what the specific details may be.
An un-creative mind, on the other hand, has something of a dormant quality, a reluctance to question or investigate. It sits like a barnacle half-asleep on it’s rock waiting for the waves to come in and feed it. It is too passive and unfocused to ever change anything. It lacks stimulation and so simply persists in the same cycle like the dim hand to mouth survival of our most distant ancestors who took thousands of years to better their own lifestyle.
The difference between these to types of minds, abstracting out over the years, can be quite staggering. A creative mind, by its very nature, will always seek to iterate and innovate. To understand, improve and challenge itself to be better. The un-creative mind will tend to remain, often unknowingly, in something of a complacent stupor.
When it comes to you and your life, which type of mind would you rather have? How about for the people in your life? Your family members, friends and co-workers? Consider it also from the perspective an employer or manager. Would you prefer the creative type that engages and is always willing to learn or the “human slug” that simply shows up for a pay check?
Greater understanding of how to learn new things
How it applies to coding:
Software development can be extremely challenging cognitively speaking. And so it is necessary to face what is for most a rather steep learning curve before attaining a comfortable level of understanding let alone a level people will pay you for having. It becomes quite obvious soon after starting, however, that this process of learning new things (and constantly reviewing and learning from old things as well) is an inherent part of the work. This is true of most things with any level of difficulty. Simplicity has never meant “easy” and it is often the case that, with experience, we return to the fundamental tenets of a given craft to see them in an entirely new way. But, in software development, this notion of continuously learning is explicitly true. And this is because it is constantly changing. Languages are always being updated and new libraries are always coming out. Sometimes the changes are limited to minor alterations in the background sometimes they can revolutionize the syntax and functionality of the given language or library.
Or you may find yourself working on a legacy system that requires you to go back and learn how it was built the way it was. Or you may come across a project in a language you understand but written in a style you don’t. Whatever the case may be, your knowledge base is constantly challenged and therefore constantly expanding as well.
So, it is no understatement to say that, if you are serious about learning software development you should also be serious about learning how to learn. This ability to intuitively focus on the most important points of a new language or library, its guiding principles, and to get a “feel” for how it works is something that can be cultivated. And it is a universal skill that applies not only to coding but, really, to anything at all.
How it applies to life:
Human intelligence is, and will likely remain for some time, a truly mysterious thing. But that does not mean we cannot extract certain empowering principles and practices to maximize its ability to consistently absorb and implement new and valuable skills. Mastering these principles and practices, or at least becoming more familiar with them, can give you an edge in life. Being familiar with the learning process (no matter what you are trying to learn) will give you more confidence and generally make the journey easier for you because it will not seem like such a monumental task.
If you reflect on your own experience learning something difficult, whatever it is, the process will usually look something like this:
- a general presumption of what it is ==>
- initial confidence boosted as your general understanding of the most basic details is confirmed ==>
- becomes more difficult as you realize there is far more to learn ==>
- bewilderment, fatigue and lessening of confidence ==>
- frustration, doubt and temptation to quite ==>
- suddenly what was hard in the beginning is now much easier ==>
- you are becoming more familiar, you have a general sense that is more holistic and adaptive ==>
- you can now do more with less thought and emotion while doing it ==>
- the skill begins to integrate, you focus less on the method and more on the intent ==>
- you plateau into a sense of normalcy
Amazingly, once we finally graduate to step 10, we tend to forget steps 1 thru 9. Especially, 4 thru 5 where we are most likely to give up and step 6 where we realize it was all well worth it. And so, when we are faced with the task of learning something new whether of our own volition or that of our employer, we start again at step 1 and essentially rediscover the entire process again.
However, being familiar with this process means you can have more confidence and understanding in regard to your own position in it. And you can therefore regulate your emotions and cognitive resources more effectively. Essentially, this means you can gain more skills and make yourself more valuable and, because of your broader knowledge and experience, potentially more creative as well. The momentum of efficient, well-balanced learning can create an incredibly powerful positive feedback loop.
A beginner will likely spend far too much time and energy bemoaning the reality of their own frustration. They will also tend to feel that this sense of frustration is somehow insurmountable. As if that were all there is all the way to the horizon. A more experienced learner, however, will realize there is a natural limit to their current capacity and understanding of what they are trying to learn and will, instead, focus on incrementally expanding that without exhausting themselves. Somewhat ironically, this second method of steady, incremental expansion in knowledge and ability without over-taxing ones cognitive and emotional resources is often the fastest, most efficient way to make true progress.
More appreciation for the effort of others
How it applies to coding:
Software development is an incredibly collaborative field. And every aspect of it, from the hardware that makes computers work to the many software languages and libraries that help them communicate, is completely grounded in the effort of other developers, designers and engineers. This becomes especially noticeable when you begin to realize A) how difficult building a reliable application is and B) how many tools and resources there are out there that help streamline your workflow. From Git Hub to VS Code to CodePen, W3 Schools and Stack Overflow there is a vast amount of information and support for you out there just waiting; all of it the painstaking and incredibly skillful effort of others.
What is also very interesting is that the majority of these resources, save for printed books, are made available via the very technology they are helping you to understand. So there is a kind of compound effect in that the more you use the resources made available via the technology of the internet, the more you will understand the technology itself. And so the more you will, assuming you are the kind to express gratitude, be able to contribute to these resources yourself.
Personally, I believe this substratum of communal contribution and the resulting appreciation and gratitude for it is largely responsible for the notable sense of generosity and encouragement I have experienced in my interactions with both professional and amateur developers. The field seems to draw a special, creative type that derives joy from not only solving the many problems that are part and parcel of software development but also in empowering others to as well.
How it applies to life:
In many arts the notion of legacy or lineage is extremely important. For one, it is a way of honoring the efforts and sacrifice of those who came before you. Without them, you would be hopelessly lost and incur an inconceivably higher opportunity cost as you bumbled along what would be an exceedingly unclear and frustrating path. This notion of legacy can also serve another purpose. It can serve as a reminder that we have a place at a certain point in history and that all we have available to us is the result of causes, not our own cleverness. Further, our efforts which must necessarily act on the current state of whatever art we are practicing are in fact contributing to the continuation of this legacy (and hopefully for the better).
It is true in all things that the state of the present is undeniably a result of efforts, whether conscious or not, made in the past. In the case of the efforts being un or non-conscious we can simply call it evolution; the natural iteration and interplay of elements and events generating perfectly adapted results with no implication of either teaching or learning. Here it is more about the passage of immense amounts of time and essentially seeing what happens. In the case of conscious effort toward a desired result, we are talking about the special realm of knowledge transmission. This is fundamentally one of the most distinguishing factors between human beings and other living things on the planet.
Humans are unique in that we can preserve and transmit complicated and very useful abstractions to each other over very large spans of time. The most fundamental of these useful and complicated abstractions is probably our verbal language followed very closely by our written one. This allows our inventions and knowledge bases to not only persist but to actually iterate and improve over spans of time that are far longer than any one human’s lifetime. While it may feel that we are massively productive and inventive, the truth is a vast amount of our lifetime and energy is spent actually recapitulating the efforts and achievements of those who have come before us. From the moment we are born we enter onto a long path of absorbing, integrating and otherwise imbuing ourselves with the knowledge and customs of our culture most of which extends to prehistoric times. It is only when we have “come up to speed”, so to speak, in regard to the society in which we live that we can then truly serve as creative contributors. Until then, we are simply students in the truest terms.
This is not to say that we shouldn’t think highly of ourselves or that our achievements are basically nothing when compared to the scale of history. Moreso, it is to say that we exist and act in a framework of human achievement that is completely beyond the capacity of any one of us to fully control. But yet we play a place in it and we are essential to its continuance.
True breakthroughs, when they do come, are most often not a sudden emergence of a completely new and unprecedented phenomenon. They are instead a very insightful and clever synthesis of elements and ideas that were already available but never before seen or used in the particular way the new breakthrough arranges them. They are an emergent property that is completely dependent on the exact conditions that give rise to them. So, while they may seem completely revolutionary it is important to remember that the final incredible result could never have happened without a vast, vast number of previously existing conditions coming together in exactly the right way.
We can see this happen in scientific investigation all the time in the kind of feedback loop between the slow advance in knowledge which then leads to further advances in technology which then lead back to further advances in knowledge and so on and so forth. This is really the story of humanity. At first slow and extremely gradual innovation giving way over the centuries to greater understanding, leisure and capacity. And now here we are today in the early years of the 21st century. A century many believe will see more innovation and development than all of the known previous centuries combined.
It is truly an amazing time to be alive.
That’s all for this post, beast that it is. I hope you’ve enjoyed reading it if you did, indeed, make it this far.