I was reading an interesting study last week about how willpower seems to grow like a muscle. In the study they had found that subjects that had successfully stuck to a diet program performed better in many other areas of their life as well.
This study seemed to indicate that by having success in one area of life requiring willpower that a person would gain benefits in other willpower related areas of life such as working out, controlling temper, studying and/or working.
Basically as people trained their willpower it grew in capacity.
This study got me thinking about how all kinds of seemingly unrelated skills tend to aid us in tasks that don’t directly use them.
Digging a little deeper
So what do I mean by this?
I mean that if you learn C#, you will be able to learn Java faster. Essentially you’ll never have to be a beginner at Java.
Now that might not be any big revelation to you. The languages are pretty close already in syntax, but I have found this principal extends much further than that.
In the years that I have been doing software development I’ve had the opportunity to work with many developers who started out their careers in totally unrelated fields.
I found that many of those developers who had significant experience in another field, but then switched to software development, very quickly acquired the skills required to become successful in software development.
I found that within about 3 years, many of those developers had the skill and knowledge equivalence of a developer that might have been in the field for 10 or more years.
Everything is the same
I’ve always been surprised by this phenomenon, but never really thought about why this was true.
I’ve worked with many different programming languages, technologies and platforms and I’ve made a pretty good study of other fields like real estate investment and options trading. I’m constantly finding skills and knowledge I acquired in one area of interest are boosting my abilities in other areas and I finally think I know why.
There really isn’t that much variation in the very basic principles of reality. Essentially everything fits into a handful of molds at a very fundamental level.
The same kind of basic principles that define the pricing of options contracts on securities like stocks are the same basic principles that define the trade-off between time, scope and quality in software development.
At a deeper even more fundamental level you could say that a person that has learned how to work within and understand the relationships between constraints will find that skill is unconsciously applied to a thousand other areas of life which also have defined and real constraints.
Of course in software development itself we recognize many of these similarities as patterns. What most developers don’t realize though is that patterns are natural emergences of ways to solve problems that organically occur in some form or other. The book on patterns just formalizes these patterns.
If you’ve ever heard the term Polymath before (basically a master of multiple skills or areas of study), this tends to explain why Polymaths like Leonardo da Vinci and Michelangelo were able to accomplish so much in so many areas.
Knowing what you don’t know
Another major reason why you are only a beginner once is because once you’ve been a beginner you have a better idea of what you don’t know.
When you start out as a beginner in something one of the biggest hurdles to success is finding out what you need to learn. (Which is why I often recommend starting off by scoping a subject.)
If you were just starting out in programming and had no prior experience in with any type of related skill, you wouldn’t know to ask what kind of looping structures are available in C#, because you wouldn’t even know to ask that question.
On the other hand, if you have experience in just one programming language, you will have a whole array of questions which you can ask about that language, because you can relate it to concepts you already understand. Often when I teach, I try to do exactly that. I try to find something that I think you are already familiar with and relate the new concept to a well understood domain.
If you’ve learned quite a few different technologies and programming platforms, when you try to learn a new one, you’ll know what you don’t know and that will make the whole learning process much quicker.
What this means to you and me
As software developers this is great news, because the world of technology just keeps getting bigger and bigger.
It is very difficult to keep up with all the different technologies that are constantly coming out every year—it is an almost impossible task.
But fortunately we can apply this principle to our craft and realize that skills we acquire in one area of software development will help us to never have to be a beginner in other technologies and development platforms.
The key to unlocking this potential is twofold.
- Push through the surface to see the similarities. Often starting out with a new technology everything seems new, but I’ve found that if you don’t give up, and you push a little further you end up in familiar territory.
- Constantly make the shift between technologies in order to maximize the benefit. I’ve also found that shifting between technologies and even development languages tends to help us to unlock the ability to see things at a more fundamental level. Think about the inductive reasoning where you might start out with 1 instance of a thing, then 2, then 3, then you generalize to n.
This is why it is so important to learn how to learn. The more you learn, the easier to becomes to learn and the more synergistic the skills you acquire become.
So if you’ve been afraid to dive into a new technology because you are either afraid that you won’t be able to learn it quickly enough or that it will be a waste of time because it is unrelated to technologies you actually use, don’t be. Instead try to remember that even though something new might be intimidating at first, you’ll most likely have a head start, because you are only a beginner once.