You’re Only a Beginner Once

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.

  1. 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.
  2. 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.

About the author

John Sonmez

John Sonmez is the founder of Simple Programmer and a life coach for software developers. He is the best selling author of the book "Soft Skills: The Software Developer's Life Manual."

  • Great observation, and one that I’ve noticed myself. =)

    Another observation I’ve made is that the deeper entrenched into a technology one becomes, the more difficult it becomes to branch away from it.

    Myself for example: I’ve been working with C# for almost a decade, and within the past year or so I’ve working on my Javascript proficiency, both web and server development. I’ve made decent progress on the web side, but not so much server-side – and I think that in this case my experience has been more of an impediment and a benefit.

  • learn how to learn -> link to learn how to learn :)

    • I’ve got the link there for the “scoping” part.

  • Alex Turok

    Nice post!
    A bit unrelated: I’ve come across the research concerning willpower while reading a book “The Willpower Instinct” by Kelly McGonigal. It’s quite an interesting and useful book. Maybe you’ll find it worth reading:

  • Do you ever get frustrated by seeing similarities like this over and over? I started recognizing the structure you talk about here a couple years ago but now it’s like an annoying song stuck in my head. If it’s the same for you, how have you overcome it?

  • Anthony Fadero

    Hi there, I liked this your post and found it quite interesting. I’ve been teaching myself C# and some python as well. Along the way, I’ve been asked to do some work in PHP. The challenge I find is that I’m forever trying to get to bits with all of these languages and not really mastering any particular one. I sometimes fear that this will be the case. So I was encouraged by your post saying that we should always be ready and willing to learn

    • jsonmez

      Thanks, glad you found it helpful.