Week 5/6 - Data Structures/Python
Ciao a tutti!
Eccomi qui per parlarvi delle due ultime settimane e si, le scrivo insieme perché sono in ritardo haha.
WEEK 5 - Data Structures
Questa settimana è stata incentrata sulle strutture dati, ovvero, i metodi con cui questi possono essere organizzati a prescindere dal loro contenuto. Fino ad adesso abbiamo utilizzato gli array, una struttura dati statica, dove quindi la sua dimensione è prestabilita e questo comporta il fatto che bisogna sapere a priori il numero massimo che immetterà l'utente (o di cui abbiamo bisogno) e quindi per forza di cose dovremmo o sperare che l'utente non immetta un numero che vada oltre la grandezza che abbiamo scelto - rischiando di far andare in crash il programma - o creare un array talmente grande che si, ci permetterebbe di non eccedere, ma anche di sprecare una grande quantità di memoria. Ecco che qui entrano in gioco le linked lists: queste ci permettono, attraverso i puntatori, di utilizzare la giusta quantità di memoria non dovendo stabilire la grandezza della struttura in precedenza: nelle linked lists, ogni blocco di memoria è un puntatore al successivo; in questo caso i blocchi di dati non sono contigui in memoria - come negli array - ma ogni blocco si trova in un posto indefinito, raggiungibile solo attraverso un puntatore ed è quindi di cruciale importanza, gestire al meglio l'inserimento di nuovi dati che andrebbero anziché dispersi nei meandri della memoria. Le linked lists sono si più complesse degli array ma portano con loro molti vantaggi e sta nell'abilità del programmatore equilibrare il loro uso per rendere più efficienti i processi.
Per la maggior parte del tempo, Prof. Malan si è concentrato sull'implementazione di queste strutture e sulla fusione di queste in altre ancora più complesse: ecco che nascono i trees, letteralmente alberi, formati da un nodo padre che punta a più nodi figli (e cosi via...), e le hash tables, che non sono altro che array di linked lists.
Anche in questo caso lo staff di CS50 ha cercato di assegnare dei problemi originali, per niente scontati ed altamente stimolanti quali: Inheritance e Speller; il primo consisteva nello stabilire l'ereditarietà di uno o più gruppi sanguigni in un albero genealogico ed il secondo richiedeva di completare alcune funzioni di un programma dato che avrebbero dovuto controllare la presenza delle parole di un testo in un determinato dizionario.
Devo dire che è stato un po' triste dover caricare l'ultima soluzione e questo perché è stata l'ultima settimana in cui abbiamo utilizzato il linguaggio C; ritrovarlo dopo averlo studiato quasi 10 anni prima ha mosso in me sentimenti di nostalgia e gioia, ricordandomi momenti dell'adolescenza fermi in punti remoti della mia memoria ma mai cancellati, è stato il linguaggio con cui ho mossi i primi passi nella programmazione e sarà sempre, per questo, il linguaggio del cuore.
WEEK 6 - Python
Quando ho iniziato a riscrivere i programmi scritti in C, in Python, mi sono sentito quasi in colpa per la facilità con cui il secondo linguaggio risolve problemi che in C richiedono un tempo ed un impegno di scrittura più lungo 😅; questo è quello che si chiama un linguaggio di alto livello, ovvero un linguaggio più "umanizzato", più vicino al nostro modo di parlare e pensare e quindi più semplice sintatticamente:
Commenti
Posta un commento