In many areas of life there is a curse. We don't know what we don't know! There is so much to every non-trivial subject that nobody can know everything. The problems is, once we know enough to get our needs met, we stop learning more.
Take cooking. There are thousands of techniques that could be learnt. Yet, to impress friends at a dinner party or even to run a restaurant, one only requires a few of these. Without a challenge to expand our skillset, we all learn to the level we need. Once we reach this level, we either stop or continue at a snail's pace.
Challenges which lead to growth can be internal or external. Take on a new job and new learning is almost guaranteed. Bring a pet into the family and there will be plenty to learn. But either way, very soon you will reach that plateau. The place where you know enough to get the job done. You are competent at performing the task. You are not lacking enough in skills to seek further knowledge. It is an often heard cry: "I can do it. I don't need to be better/quicker/etc".
This learning trap is alive and well in programming. Indeed, Perl, my language of choice, has a term for it. TIMTOWTDI - pronounced "Tim Toady". There Is More Than One Way To Do It. Yet, not all ways are equal.
I am sure anyone working in a coding department gets regular opportunities for growth. Not only new projects. Colleagues will question why things get done the way they do. More senior staff will have experience. More junior ones, fresher ideas. All this exposure to different views is bound to increase the level of skills. But working alone is a very different matter. Seeking the input, the questions, the alternative ideas is something that has to be proactive. It doesn't happen because of the environment. We have to make it happen.
The way I work is to find just enough information to get the job done. I suspect most people are the same. Google the subject, find some example, write a few tests. Then the task is complete. The code does the thing it is supposed to. But is it "the best" way? Could the code run faster, or with greater security? Could it be rearranged so it is easier to maintain?
Recently, I have tried to improve my coding. This is very deliberate. Six months ago, in November 2020 at the height of the pandemic, I joined Perl Monks. This community is full of knowledge and sometimes differing views. In the past I had often used Google to find information on the site. As well as plenty of other sites. Of course this was useful and helped solve many coding problems.
During the last six months I've found that looking up information is one thing. It's quite different to discussing information. Since joining and being active in the community, I have been able to ask better questions. Not only "how" to do something but "why" do it that way. I've been able to show how I do things and others have pointed out the problems, and the solutions. Problems I didn't even know existed because the code did what it was supposed to do. At least it did until something unexpected happened that I hadn't considered.
As with most areas of life, better results start with challenges and better questions. There is no growth without challenges. It is always beneficial to find challenging environments and circumstances. Then to ask good questions of ourselves and others. It is the quality of the questions that determine the quality of the thinking. And it is quality of the thinking that allows us to solve the problems that bring about a great, fulfilling life.