Si vous voulez être à l'épreuve du temps, le meilleur conseil que je puisse vous donner n'est pas de vous enfermer dans une technologie.
Alors, n'apprenez pas les API à l'aveuglette. Apprenez comment ils sont conçus. Quelles sont les philosophies derrière la scène? Quels sont leurs avantages et leurs défauts? Pensez aux logiciels en général, pas à une technologie spécifique.
Vous pouvez également travailler sur une bonne conception de programme, aller à OOP et AOP est un bon choix OMI. Mais ne vous contentez pas de comprendre le mécanisme, travaillez vraiment sur la philosophie derrière le mécanisme.
Ne négligez pas l'informatique générale, comme les structures de données et les algorithmes, car ce sont des connaissances trans-technologiques qui sont toujours utiles.
Optez également pour les bonnes pratiques. Vous avez souvent une douzaine de façons de faire quelque chose, mais la plupart d'entre elles sont de la merde: sujettes aux bogues, difficiles à maintenir, difficiles à comprendre plus tard ou par un autre programmeur, etc. . . Habituellement, le code est plus difficile à lire qu'à écrire. Apprenez donc à consacrer un peu plus d'efforts à l'écriture pour faciliter la lecture (car vous lirez plus de code que vous n'écrivez).
Apprenez des techniques efficaces de débogage (utilisation intelligente du journal et du débogueur) et de test (comment écrire du code qui peut être testé facilement et comment automatiser ces tests).
Ensuite, vous aurez besoin d'une formation technologique générale. Je parle de connaissances très larges, comme le fonctionnement d'un processeur (le cache cache ou la prédiction de branche sont un bon début), sur les systèmes UNIX, sur les protocoles réseau comme IP, TCP et Ethernet, etc. . .
En fin de compte, apprenez à apprendre. Si vous savez apprendre, vous pouvez vous adapter.
Vous aurez besoin de solides connaissances dans des technologies spécifiques pour trouver un emploi, mais celles-ci sont obsolètes très rapidement (pensez à COBOL par exemple, ou à la programmation Web au moment de la guerre IE / Netscape). Ne comptez donc pas sur eux pour être à l'épreuve du temps. Ils seront essentiels pour être embauchés, mais certainement pas ce qui fait un excellent programmeur et ce qui rendra vos compétences durables au fil du temps.
EDIT: Si vous débutez, vous devriez définitivement faire quelque chose. Rien? Vraiment. Un jeu comme Tetris ou serpent est un bon début et amusant. Si vous ne faites pas avancer les choses, vous passerez beaucoup de temps à apprendre et n'obtiendrez vraiment pas l'expérience nécessaire pour bien comprendre ce que vous apprenez.
Prenons un exemple avec des modèles de conception. Les modèles de conception sont excellents et vous devez les utiliser définitivement. Mais s'ils sont surutilisés, ils rendront votre code compliqué et difficile à comprendre. Vous devrez faire face au problème qu'un modèle de conception résout et perdre du temps à essayer de le résoudre ou à ses effets secondaires pour bien comprendre en quoi consiste le modèle de conception. Les modèles de conception doivent être utilisés comme de petits refactorings au fil du temps lorsque le code se développe. Et vous saurez quand un modèle de conception est nécessaire lorsque l'avantage en est supérieur à la complexité du code induite par son utilisation. Cela nécessite de l'expérience.
Alors définitivement, faites avancer les choses, apprenez-les de vos erreurs. Je ne peux pas insister davantage: FAITES LES CHOSES !