O caminho para se tornar bom em programação é o mesmo que para cantar ou tocar música: praticar, praticar, praticar. Se você gastar tempo suficiente desenvolvendo regularmente o software por vários anos, é provável que se torne bom nisso - seja dentro ou fora do horário de trabalho.
Agora, além de gastar mais tempo praticando, há outra razão pela qual os profissionais geralmente se tornam melhores que os amadores em certo sentido (tanto na música quanto na programação). Se você é um profissional, precisa executar tarefas que não necessariamente gosta, mas que pertencem ao trabalho mais amplo de desenvolver software (por exemplo, testes, discussões com clientes, escrever documentação, configurar ambiente de desenvolvimento / desenvolvimento, escrever scripts de compilação etc.) ) E de vez em quando você também é pressionado a entrar em áreas desconhecidas, a aprender novos idiomas ou plataformas. Como amador, você não é forçado a fazer o que não quer, o que faz com que você fique na sua zona de conforto a maior parte da sua vida. Em outras palavras, você pode se limitar facilmente a uma ou algumas áreas específicas das quais gosta mais,
OTOH muitos desenvolvedores profissionais também se enquadram nisso, permanecer na mesma empresa fazendo o mesmo trabalho de rotina dificilmente aprendendo algo novo por décadas ... Portanto, a chave para se tornar melhor é a sua atitude. Se você continuar aprendendo e conscientemente procurar oportunidades de sair da sua zona de conforto para um território desconhecido, acabará superando os enxames de "profissionais" lentamente fossilizados. Uma boa maneira de fazer isso pode estar contribuindo para alguns projetos de código aberto.
Uma leitura recomendada é The Pragmatic Programmer: From Journeyman to Master , com muitos conselhos ótimos e muito práticos sobre como continuar melhorando.