The world of software is vibrant than ever; innovation is the norm and the quality bar that today’s software has to meet is placed high indeed.

However, for the programmer this poses a tremendous challenge. It’s no more possible to feel comfortable with the language or framework that one uses; because there are numerous quality alternatives out there.

This in my own experience can be the cause of quite some anxiety and even exhaustion from trying to keep up. I believe this is a sentiment that many others would share too.

So, the question is how do one remain calm and assured in such challenging times ? After all it’s the love of programming that keep us in this profession; it’s a vocation that we just can’t afford to lose.

After wrestling with this for quite some time, I finally took this case in prayer (yes, I prayed about it during the Holy Mass). Finally, I was able to make progress in understanding this problem. This post is about what I discovered.

A change in thinking

The fundamental idea is that, programmers should avoid the trap of thinking that a new tool (language, framework, pattern, etc.) will solve all their problems. Instead, what will really solve problems is when someone with the necessary knowledge and skill applies them.

There is no perfect one in anything man-made. Only better ones. In other words, don’t expect improvements just by the use of a new tool. It will start to help in the measure that you understand how to use it.

In other words, skill should be emphasized over a tool. Even the best tools can be rendered useless, if the one using it does not have the skill to use it. By the same token, a good old tool can get more things done in the hands of a skillful hand as compared to a new tool in the hands of a novice.

This this may seem obvious, but it’s an important psychological conditioning to have. This means the following:

Give yourself enough time of study and exploration before expecting new tools start to bear fruits Don’t fool yourself by telling that you “know” the tool unless you are able to articulate what it’s strengths and weaknesses are. In other words, you know when to use it and not just how to use it. Articulation is key in the second point above as that’s a sign evidence of the quality of understanding.

In short, be conscious of your own level of mastery of each tool and be honest to yourself about it. Give yourself the time and study needed to master it. Never abandon any tool; all have their place in the tool-set.

Applying to practical life

So, what does this really mean in practice ?

All of us (hopefully) have some tool that we have spend enough time with. No matter what others may say about it, let that be your go-to tool to begin with. In other words, keep pushing it’s limits. If you have not genuinely found it’s limits try to discover that first. A concrete example is, imagine that you have worked in the Java for some time. Ask yourself: Do I understand the strengths and weakness of Object Oriented Programming ? Where does it shine ? Where does it make life difficult ?

While it’s not easy to stop ourselves and ask these questions, it’s super important that we develop the discipline to do that. Putting pen to paper and making notes definitely help. Try to cultivate a habit of cataloging and note making.

As programmers we are exposed to more than one platform at a time. Hence, we have to be conscious of what we understand well and what we don’t. Also look for common patterns.

Also, above all, understand that skills develop over time and with consistent effort.

Finally, a word about others: A large majority of articles that the search engines bring up usually give impressions; not reports. Prefer, honest reports over impressions.