Ai candidati per una posizione di programmatore JavaScript è richiesta una buona conoscenza di aspetti pratici e teorici, appunto, del linguaggio Javascript, da dimostrare durante un colloquio in più fasi. Oltre ai test di coding veri e propri è fondamentale essere pronti per rispondere a domande che mettono alla prova la comprensione di concetti indispensabili per un buon developer. Scopriamo, dunque, come prepararsi ad un colloquio su Javascript con dieci domande che compaiono frequentemente durante la selezione di programmatori JavaScript.
1. Nomina due paradigmi di programmazione importanti per JavaScript.
Durante il colloquio di lavoro tecnico è probabile che alla domanda “javascript cos’è?” ci si aspetti dal candidato una menzione del fatto che JavaScript è un linguaggio multi-paradigma. JavaScript supporta, infatti, la programmazione funzionale, quella imperativa/procedurale, e la programmazione orientata agli oggetti. È bene citare, inoltre, l’eredità prototipale, che approfondiremo in seguito.
2. Cos’è la programmazione funzionale?
Come accennato, la programmazione funzionale è uno dei paradigmi supportati dal linguaggio JavaScript. Si tratta di uno stile di programmazione dichiarativo basato sulla valutazione di funzioni matematiche. Una delle sue caratteristiche sono gli oggetti immutabili: dopo averne definito il valore l’oggetto non si può più modificare, ma si procede invece a creare e modificare copie. Un punto di forza di questo paradigma è la mancanza di effetti collaterali delle funzioni, o side-effects, che semplifica il debug. Il primo linguaggio a utilizzare la programmazione funzionale è stato Lisp, e tra gli altri ci sono Haskell, Erlang, Scala, Clojure e OCaml.
3. Che differenza c’è tra ereditarietà delle classi ed ereditarietà prototipale?
A differenza di altri linguaggi, basati sul concetto di classe, JavaScript si basa sul concetto di prototipo. Questa importante distinzione potrebbe comparire, dunque, tra le domande del colloquio di lavoro.
Nei linguaggi a oggetti basati sulle classi, prima di creare un oggetto deve essere definita una classe che ne stabilisce le caratteristiche. Queste saranno poi ereditate da tutti gli oggetti appartenenti a una sottoclasse, creata a partire dalla classe principale, secondo un’organizzazione di tipo gerarchico.
Nel linguaggio JavaScript, al contrario, è possibile creare direttamente un oggetto senza prima stabilire una classe. In questo caso, un oggetto eredita proprietà da un altro oggetto, o prototipo. A differenza del modello basato sulle classi, che definisce in modo rigido le caratteristiche ereditate, con l’eredità prototipale è possibile aggiungere proprietà ulteriori a runtime.
4. Qual è la maggiore differenza tra var e let?
A partire dalla specifica ES6 è possibile dichiarare le variabili, oltre che con var, con le parole chiave let e const. Le caratteristiche che distinguono var let e const possono comparire tra le domande di un colloquio per diventare programmatore JavaScript. Una fondamentale differenza è lo scope: per le variabili con let è limitato al blocco in cui compaiono, mentre quelle dichiarate con var hanno scope globale o di funzione.
5. Che cosa sono one-way data flow e two-way data binding?
Con one-way data flow si indica un movimento unidirezionale dei dati, spesso dal modello alla view. Modificando la view non si effettua quindi alcun cambiamento al modello dei dati. Il meccanismo two-way data binding, al contrario, implica modifiche bidirezionali: modificando il modello dei dati si cambia anche la view, e viceversa. Nella programmazione JavaScript, il framework React è un esempio di one-way data flow, mentre Angular framework utilizza il two-way data binding.
6. Cosa sono le promise in JavaScript?
Le promise Javascript sono oggetti che permettono la programmazione asincrona e che possono rappresentare in futuro un singolo valore. In caso di successo, daranno un valore di ritorno, mentre in caso di fallimento ne mostrano la ragione. La promise compare in tre possibili stati: pending, fulfilled oppure rejected.
7. Cos’è una closure in JavaScript?
Una closure dà a una delle funzioni in Javascript che sono interne, completo accesso alle variabili definite nella funzione esterna. Nella programmazione JavaScript si crea una closure ogni volta che si definisce una funzione. Una closure ha, quindi, accesso alle variabili nel proprio scope, nello scope di funzione e nello scope globale.
8. Elenca vantaggi e svantaggi delle architetture monolitiche e di microservizi.
Nelle architetture monolitiche l’applicazione è eseguita come un servizio unico: è più semplice gestire problemi trasversali e si hanno, inoltre, vantaggi relativi alle prestazioni. Ha però scalabilità ridotta e richiede l’utilizzo di un unico linguaggio per la realizzazione dell’intera applicazione. Nelle architetture di microservizi l’applicazione è invece composta di parti indipendenti, offrendo maggiore scalabilità e flessibilità. Si possono, inoltre, usare diversi linguaggi: è possibile ad esempio programmare in JavaScript uno dei servizi, e utilizzare un linguaggio di programmazione differente per gli altri. È, però, più complesso effettuare i test, si possono avere costi maggiori per l’implementazione ed è, a volte, difficile trovare programmatori preparati per realizzare questo tipo di applicazione.
9. Elenca alcune novità introdotte con ES6.
Tra le novità di questa versione si possono citare le keyword let e const per variabili, le arrow function, la keyword class per creare classi, l’introduzione degli oggetti promise, le stringhe multilinea, gli assegnamenti destrutturati, e altro ancora.
10. Menziona alcuni metodi degli array.
Durante il ripasso è utile concentrarsi sugli array Javascript, un argomento importante che spesso compare ai colloqui per programmatore JavaScript. Si possono menzionare tra gli altri Javascript push, Javascript length, Javascript forEach, Javascript shift, Javascript unshift, Javascript reverse(), Javascript pop(), tenendosi pronti anche a fare esempi di utilizzo o a rispondere a domande di approfondimento.
Dedicare alcune settimane alla preparazione, rileggendo la documentazione di JavaScript e facendo esercizi pratici, è indispensabile per avere successo a un colloquio per una posizione da programmatore. Essere in grado di rispondere in modo chiaro e articolato a queste domande è un eccellente punto di partenza per fare una buona impressione in fase di assunzione, così come migliorare le proprie skills tecniche con esercizi Javascript.
Queste erano alcune dritte per superare una possibile selezione come programmatore Javascript, ma abbiamo preparato, per te, una pratica guida su come trovare lavoro nel mondo della programmazione informatica dove troverai tantissimi consigli utili su come prepararsi ad un colloquio di lavoro! Corri a leggerla e.. in bocca al lupo!