Le materie più facili da imparare al di fuori della scuola sono quelle che possono essere direttamente applicate alla soluzione di qualche problema esistente nella tua vita. Vuoi fare un sito web? Vai a imparare JavaScript. Vuoi scrivere un'app per iOS? Vai a imparare l'Objective C. Quando hai un chiaro caso d'uso in mente, l'auto-motivazione diventa molto più facile.
Al contrario, la conoscenza acquisita, per esempio, leggendo un libro su qualche argomento teorico astratto viene rapidamente dimenticata (o mai veramente imparata) quando non puoi trovare un modo per metterla in pratica. Questo è ciò che è prezioso in un ambiente accademico. Compiti a casa, test, progetti a termine: queste cose ti costringono a confrontarti con concetti importanti che potrebbero, a prima vista, sembrare insignificanti.
Strutture di dati e algoritmi è un perfetto esempio di un tale argomento. Dopo aver letto un libro su algoritmi famosi si è tentati di lamentarsi del fatto che tutti questi algoritmi sono stati implementati come chiamate API standard. Perché perdere tempo a capire il pivoting casuale in quicksort quando non avrete mai bisogno di scrivere un algoritmo di ordinamento nella vostra vita? E' solo dopo qualche anno, quando ti trovi di fronte ad un problema che assomiglia sospettosamente a qualcosa che hai visto all'esame finale di algoritmi, che finalmente impari il valore di quella conoscenza.
Il suddetto corso è il più importante. Se non prendi nient'altro, dovresti prendere Strutture di Dati e Algoritmi perché:
- Non sarai motivato ad imparare veramente il materiale al di fuori di un ambiente accademico
- Ogni grande azienda tecnologica che fa colloqui fa domande che richiedono la conoscenza di questo corso in particolare
- Tutti gli argomenti di CS veramente interessanti di livello superiore richiedono una solida conoscenza del materiale di questo corso
Da lì, è tutta una questione di cosa ti interessa. Se vuoi ottenere un lavoro come ingegnere del software, ti suggerisco un corso di algoritmi di livello superiore e un corso sulla progettazione orientata agli oggetti. Se siete come me e amate l'IA, c'è il data mining e il machine learning. Le persone che amano vivere più vicino al metallo potrebbero amare i sistemi operativi o le architetture dei computer.
Se sei effettivamente in un programma di CS e vuoi essere un informatico a tutto tondo, allora ovviamente dovresti imparare tutte queste cose in una certa misura, più la teoria degli automi e i principi dei linguaggi di programmazione, poi diramati da lì.