Para ser experto la clave es programar y programar.
Quizá yo no sea quien te pueda dar el mejor consejo, porque lo aprendí en la Ingeniería, pero te dejo como he aprendido yo; lo que son mis bases.
He aprendido con un lenguaje poco utilizado, pero con un tipado muy fuerte y muy recomendado para aprender que es Pascal. Es un lenguaje que genera errores en tiempo de compilación, pero cuando compila, genera pocos en tiempo de ejecución (como C, que son más difíciles de depurar al comienzo).
Una vez que he controlado todos los puntos del lenguaje he pasado a ver distintos paradigmas de programación:
- En funcional he visto Ocaml.
- En orientado a objetos he visto Java
- En imperativo C (Algoritmos, sistemas operativos, concurrencia o paralelismo, etc ).
- Lenguaje máquina para Estructuras de computadores.
Ahora sigo aprendiendo otros lenguajes con otros fines concretos. Para concurrencia y paralelismo Erlang, para inteligencia artificial prolog, y así un largo etc.
Qué te quiero decir con todo este royo. Si no te quieres dedicar profesionalmente a esto, no te compensa empezar a formarte en todo esto que te comento, porque serías mejor programador sin duda, pero el esfuerzo no te compensaría para dedicarte sólo a hacer webs.
Entonces lo primero que debes decidir es qué quieres programar y en base a eso decidir cómo formarte. Para webs con HTML, CSS y PHP sería un buen comienzo. Para software pues podrías comenzar con Java.
Por lo tanto mi consejo es que digas en qué te quieres centrar para que alguien te pueda ayudar más concretamente. Es como si yo que estoy ahora con inteligencia artificial me recomiendan empezar con Java. No tendría el más mínimo sentido.
Siento el royo y espero que te haya servido de algo.