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 sulla buona idea del programma, andare a OOP e AOP è una buona scelta IMO. Ma non solo capire il meccanismo, lavorare davvero sulla filosofia alla base del meccanismo.
Non trascurare l'informatica generale, come le strutture dati e gli algoritmi, perché sono una conoscenza cross-tecnologia che è sempre utile.
Fai anche delle buone pratiche. Spesso hai dozzine di modi per fare qualcosa, ma la maggior parte di loro sono schifo: bug incline, difficile da mantenere, difficile da capire in seguito o da un altro programmatore, ecc. . . Di solito, il codice è più difficile da leggere rispetto a scrivere. Quindi impara a dedicare un po 'più di impegno alla scrittura per rendere la lettura più semplice (perché leggi più codice di quello che scrivi).
Scopri tecniche efficaci per il debug (uso intelligente di log e debugger) e test (come scrivere codice che può essere facilmente testato su unità e come automatizzare questi test).
Quindi, avrai bisogno di uno sfondo di tecnologia generale. Sto parlando di una conoscenza molto ampia, come il funzionamento di un processore (la cache miss o branch prediction è un buon inizio), sui sistemi UNIX, su protocolli di rete come IP, TCP ed Ethernet, ecc. . .
Alla fine, impara come imparare. Se sai come imparare, allora puoi adattarti.
Avrai bisogno di alcune conoscenze approfondite in tecnologie specifiche per essere in grado di trovare un lavoro, ma quelli sono obsoleti molto velocemente (pensa a COBOL per esempio, o alla programmazione web al momento della guerra IE / Netscape). Quindi non fare affidamento su di loro per essere a prova di futuro. Saranno la chiave per essere assunti, ma in definitiva non è ciò che rende un grande programmatore e ciò che renderà le tue abilità durature nel tempo.
EDIT: Se stai appena iniziando, dovresti fare qualcosa in modo definitivo. Qualsiasi cosa, davvero. Un gioco come Tetris o serpente è un buon inizio e divertente. Se non ottieni risultati, passerai molto tempo a imparare e davvero non acquisirai l'esperienza necessaria per comprendere appieno ciò che impari.
Diamo un esempio con i modelli di design. I modelli di design sono fantastici e dovresti usarli definitivamente. Ma se abusato renderà il tuo codice complicato e difficile da capire. Dovrai affrontare il problema che un modello di progettazione risolve e perdere un po 'di tempo cercando di risolverlo o i suoi effetti collaterali per comprendere appieno il motivo del progetto. I modelli di progettazione devono essere utilizzati come piccoli refactoring nel tempo in cui il codice cresce. E saprai quando è necessario un modello di progettazione quando il vantaggio di esso è maggiore della complessità del codice indotta dal suo utilizzo. Ciò richiede esperienza.
Quindi, in modo definitivo, fai le cose, imparano dai tuoi errori. Non posso insistere di più: OTTENERE COSE !