Many of my colleagues often ask me, "How do you know programming so well?"
It's interesting that even though I have never tried to become a programming expert, many people think so, even other "experts" :)
How have I come this far? Well, I've mostly been aware of the following;
To be an expert on the hottest things not on the hottest tools
Many people are chasing the next shiny object and pursue tools, not fundamental needs.
Technology changes. New technology is introduced over and over but fundamentals remain.
Become an expert at permanent things such as data cleaning, tables merging, dashboarding, data automation, not at very exclusive tools working on isolated platforms, etc.
But don't get it wrong, it's needed to master the best tools of the time. Everything will be grounded on fundamentals and the tools must be used as helpers. In fact, every new tool becomes easier to learn because they are just tools that do the same thing but faster and better.
In the journey to programming mastery, the worst number is ONE.
One technique to solve a problem. One single use of a tool/technique. One tool studied one time.
To become a true programming master, it's fundamental to learn one thing many times and go many times for that one thing.
E.g. know all there is about performance - it matters
Study something when you don't know it and study it again when you know it. The best part comes when you study something you start knowing. The tool becomes increasingly more predictable. Confidence is built to try new conditions and scenarios. One becomes resourceful and confidence is growing
Focus on results, not knowledge
Reading a programming book of 200 pages end's up with plenty of ideas but in the real world, nothing actually happens.
Don't focus on accumulating learning but on accumulating results. To transcend the current situation, it's actually needed to change the reality. And, what changes the reality is results, not knowledge. Knowledge is not kinetic power but potential power. Applied knowledge is power
And never allow resistance to get in the way to implementing the new tools. Always use the easiest of datasets and implement the new technique. Put a formula into practice, see how it works, how it fails. See what happens and tweak it till it works.
You learn what's in your experience.
Keep and refine a library of programming techniques and wisdom
Keep the programming findings properly sorted out. Whether to use notes, a library, samples, etc.
Keep your own insights as well as those of others.
Sooner or later, they are needed when complex or new projects are faced.
Work persistently - it takes time and effort to gain programming knowledge and to gather a comprehensive library.
Collaborate with others in order to get access to programming insider techniques and wisdom never been thought of.
Nothing will ever happen until someone make things happen.
Never try to be an expert
Main goal is not to be an expert, instead, it is to be useful.
Become useful for the organization and others in the office, is in advance of being labeled as an expert.
A practical way to be useful is becoming really good to know how to clean data well, how to find patterns in the data, how to extract information from tables, how to automate the creation of charts, and more.
It's the very skill to get certain things done that makes you the one transcending the 10% of things that bring 90% of the trouble. Such as messy/unstructured data, routine tasks, etc.
And becoming good at things doesn't come from the ego but from a genuine desire to serve.
Being good at things is a consequence of your desire to serve not to be smart.