Se vuoi essere a prova di futuro, il miglior consiglio che posso darti non è racchiuderti in una tecnologia.
Quindi non imparare le API alla cieca. Scopri come sono concepiti. Quali sono le filosofie dietro la scena? Quali sono i loro vantaggi e difetti? Pensa al software in generale, non a una tecnologia specifica.
Puoi anche lavorare su una buona idea del programma, andare su OOP e AOP è una buona scelta IMO. Ma non solo capire il meccanismo, lavorare veramente sulla filosofia che sta dietro al meccanismo.
Non trascurare l'informatica generale, come le strutture dati e gli algoritmi, perché sono conoscenze incrociate che sono sempre utili.
Scegli anche le buone pratiche. Hai spesso dozzine di modi per fare qualcosa, ma la maggior parte di loro è una schifezza: incline ai bug, difficile da mantenere, difficile da capire in seguito o da un altro programmatore, ecc. . . Di solito, il codice è più difficile da leggere che da scrivere. Quindi impara come dedicare un po 'più di sforzo alla scrittura per rendere la lettura più semplice (perché leggerai il codice più di quanto tu scriva).
Apprendi tecniche efficaci per il debug (uso intelligente di log e debugger) e test (come scrivere codice che può essere facilmente testato dall'unità e come automatizzare questi test).
Quindi, avrai bisogno di un background tecnologico generale. Sto parlando di una conoscenza molto ampia, come come funziona un processore (la cache cache o la previsione del ramo sono un buon inizio), i sistemi UNIX, i protocolli di rete come IP, TCP ed Ethernet, ecc. . .
Alla fine, impara come imparare. Se sai come imparare, allora puoi adattarti.
Avrai bisogno di una forte conoscenza di tecnologie specifiche per poter trovare un lavoro, ma questi sono obsoleti molto rapidamente (pensa ad esempio a COBOL o alla programmazione web al momento della guerra di IE / Netscape). Quindi non fare affidamento su di loro per essere a prova di futuro. Saranno fondamentali per essere assunti, ma sicuramente non ciò che rende un grande programmatore e ciò che renderà le tue abilità durature nel tempo.
EDIT: Se hai appena iniziato, dovresti fare qualcosa in modo definitivo. Qualunque cosa, davvero. Un gioco come Tetris o Snake è un buon inizio e divertente. Se non riesci a fare le cose, passerai molto tempo a imparare e davvero non otterrai l'esperienza necessaria per comprendere appieno ciò che impari.
Diamo un esempio con i modelli di progettazione. I modelli di design sono fantastici e dovresti usarli definitivamente. Ma se abusati renderanno il tuo codice complicato e difficile da capire. Dovrai affrontare il problema che un modello di progettazione risolve e perdere tempo cercando di risolverlo o i suoi effetti collaterali per comprendere appieno di cosa tratta il modello di progettazione. I modelli di progettazione devono essere utilizzati come piccoli refactoring nel tempo quando il codice cresce. E saprai quando è necessario un modello di progettazione quando il vantaggio è maggiore della complessità del codice indotta dal suo utilizzo. Questo richiede esperienza.
Quindi, in modo definitivo, fai le cose, imparano dai tuoi errori. Non posso insistere di più: OTTIENI LE COSE FATTE !