Contrariamente a algunas de las respuestas, la experiencia no es el único requisito para convertirse en un "experto". Creo que la mayoría de las personas en todas las industrias (no solo la programación) no se convierten en expertos en su campo. Se vuelven competentes y eficientes, pero no llegan a ser tan buenos como podrían ser.
La razón es que la experiencia no es suficiente. Necesitas consejos de expertos. Debe aprender a hacer cosas de alguien que sea un experto.
Afortunadamente para nosotros, hay muchos recursos para que los programadores se conviertan en expertos. Probablemente el mejor es libros. Otro recurso destacado son los programadores. StackExchange.
Pase la mayor parte de su tiempo escribiendo código, pero también dedique parte de él leyendo e integrando el conocimiento de libros como Clean Code http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 . Puede encontrar los mejores libros analizando las reseñas en Amazon, revisando este sitio y Stack Overflow.
Si invierte suficiente tiempo para aprender y usar la información en 2 o 3 libros por año, aumentará en gran medida su habilidad. Además, encuentre una manera de grabar y recordar todo lo que aprende. De lo contrario, será difícil saber realmente y utilizar la información.
Presta atención a los temas que interesan a los programadores expertos: patrones de diseño, pruebas unitarias, elección de carrera, etc. Mira el mundo (o al menos tu trabajo) desde la perspectiva de un programador experto.
Cuando se le asigne una tarea para codificar, deténgase y piense en ello por un momento. Hazte algunas preguntas. ¿Qué he aprendido que pueda ayudarme? Cuales son los riesgos? ¿Cuál es el mejor enfoque? ¿Cuáles son algunos algoritmos diferentes que puedo usar? ¿Cuánto tiempo llevará ejecutar el programa? ¿Cuál es probable que sea el cuello de botella de la CPU? ¿Qué funcionalidad podría cambiar o agregarse?
Espero que esto ayude.