Repository ufficiale DLI
Entrare nel mondo del lavoro significa superare un processo di selezione, che ragionevolmente è tanto più difficile e competitivo quanto la posizione è interessante. Che si tratti di un lavoro come sviluppatore, data scientist, machine learning engineer.. è molto probabile che il candidato venga sottoposto ad una famigerata CODING INTERVIEW. One-to-one con l’interviewer per un’ora, di fronte ad un quesito e ad una lavagna bianca. Nessun IDE, nessuna tab con Google: per fare una buona impressione in una coding interview non ci sono aiuti esterni. È necessario saper programmare bene, aver studiato algoritmi e strutture dati? Assolutamente sì! È sufficiente per riuscire a fare una buona impressione? Verosimilmente no! Ed allora cos’altro serve? Pratica. Esperienza. Allenamento. Ecco l'obiettivo di questo corso. Iniziamo ponendoci l’obiettivo di usare il problem solving per proporre soluzioni algoritmiche corrette, complete ed efficienti ai quesiti dell’intervistatore. Introduciamo il concetto di complessità computazionale, un linguaggio fondamentale per valutare la scalabilità di un algoritmo. Passiamo poi in rassegna le principali strutture dati astratte (ADTs), vediamo come si gestiscono in Python, e quali sono tipicamente le proprietà da sfruttare, o le problematiche da tenere alla larga, nelle coding interviews. Infine, ci tuffiamo nell’acqua alta ed affrontiamo una serie di coding interview questions reali, cercando di capire come affrontarle da zero, come impostare una soluzione, come valutare eventuali trade-off di opzioni alternative. Ogni esercizio è affrontato in due fasi: prima, una fase di sketch a mano libera che simula l’intervista e l’utilizzo di una lavagna bianca e porta all’individuazione di una soluzione algoritmica e della sua complessità computazionale; poi, un’implementazione funzionante in Python che viene discussa sul piano sintattico ed eseguita su diversi input. Il risultato del corso è una maggiore padronanza di costrutti fondamentali della programmazione e di Python, un bagaglio di conoscenza di tipici tipologie di coding interviews, e la capacità di leggere nei testi dei quesiti degli indizi che possano guidare la scelta della struttura dati da utilizzare e la soluzione algoritmica da impostare.