Ao contrário de algumas das respostas, a experiência não é o único requisito para se tornar um "especialista". Eu acho que a maioria das pessoas em todos os setores (não apenas na programação) não se torna especialista em seu campo. Eles se tornam competentes e eficientes, mas não se tornam nem de longe tão bons quanto poderiam ser.
A razão é que a experiência não é suficiente. Você precisa de consultoria especializada. Você precisa aprender como fazer as coisas de alguém que é especialista.
Felizmente para nós, existem muitos recursos para os programadores se tornarem especialistas. Provavelmente o melhor são os livros. Outro recurso excelente é programmers.StackExchange.
Gaste a maior parte do tempo escrevendo código, mas também gaste parte dele lendo e integrando o conhecimento de livros como o Clean Code http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 . Você pode encontrar os melhores livros analisando as resenhas na Amazon, verificando este site e Stack Overflow.
Se você investir tempo suficiente para aprender e usar as informações em 2 ou 3 livros por ano, isso aumentará bastante sua habilidade. Além disso, descubra uma maneira de gravar e se lembrar de tudo o que aprender. Caso contrário, será difícil realmente conhecer e usar as informações.
Preste atenção nos tópicos em que os programadores especializados estão interessados: padrões de projeto, testes de unidade, escolha de carreira etc. Veja o mundo (ou pelo menos o seu trabalho) da perspectiva de um programador especialista.
Quando você receber uma tarefa para codificar, pare e pense um pouco. Faça a si mesmo algumas perguntas. O que aprendi que pode me ajudar? Quais são os riscos? Qual é a melhor abordagem? Quais são alguns algoritmos diferentes que posso usar? Quanto tempo levará para a execução do programa? Qual é o provável gargalo da CPU? Que funcionalidade pode mudar ou ser adicionada?
Espero que isto ajude.