Passa al contenuto principale

Colloqui di ingegneria: una guida per i responsabili delle assunzioni per distinguersi

Engineering job interview best practices

Pubblicato: 22 gennaio 2020

Cultura9 min di lettura

Chiedi a qualsiasi leader dell'ingegneria in un'azienda in crescita qual è la sua priorità principale e probabilmente dirà le assunzioni. Quando pensiamo a quanto sia importante la decisione di accettare un lavoro sia per l'azienda che per il candidato, le poche ore di colloquio sembrano davvero poche. Vogliamo assicurarci che il nostro processo di colloquio sfrutti al meglio quel tempo per aiutare sia i candidati che Databricks a capire se il ruolo è adatto. Vogliamo conoscere te e assicurarci che tu ottenga le informazioni di cui hai bisogno per prendere la decisione migliore. Uno dei modi migliori per farlo è progettare colloqui che enfatizzino la conversazione e la collaborazione. I problemi del mondo reale sono disordinati e complessi. Vogliamo capire come i candidati risolvono sfide astratte più di quanto vogliamo vedere una soluzione specifica.

Cosa vuoi che i candidati capiscano del team di dati di Databricks prima di iniziare il processo di colloquio?

Nonostante la scala dell'infrastruttura che Databricks gestisce, abbiamo un'organizzazione di ingegneria relativamente piccola. Gestiamo milioni di macchine virtuali, generando terabyte di log ed elaborando exabyte di dati al giorno. Alla nostra scala, osserviamo regolarmente guasti hardware, di rete e del sistema operativo del cloud, e il nostro software deve proteggere in modo impeccabile i nostri clienti da qualsiasi problema sopra menzionato. Facciamo tutto questo con meno di 200 ingegneri.

La nostra dimensione significa che abbiamo la flessibilità di adottare o creare la tecnologia che riteniamo sia la migliore soluzione per ogni sfida ingegneristica. Il rovescio della medaglia è che ci sono molte parti della nostra infrastruttura ancora in fase di maturazione, quindi l'insieme delle preoccupazioni per molte iniziative va oltre l'ambito di un singolo servizio. È ancora una startup, quindi i confini di proprietà e responsabilità non sono sempre chiari. Ciò significa che è facile apportare modifiche e avere un impatto al di fuori delle tue aree di interesse principali, e che sarai responsabile di molto più di un progetto rispetto a quanto faresti altrove.

Di cosa diventerai un esperto dopo aver lavorato in Databricks? Sarai in grado di creare sistemi scalabili nel campo dei Big Data e del Machine Learning. La maggior parte degli ingegneri non fa ML applicato nel loro lavoro quotidiano, ma comprendiamo profondamente come viene utilizzato in una vasta gamma di settori per i nostri clienti.

Come puoi prepararti per le domande tecniche del colloquio?

I nostri colloqui di ingegneria consistono in un mix di valutazioni di competenze tecniche e trasversali della durata compresa tra 45 e 90 minuti. Mentre alcuni dei nostri colloqui tecnici sono più tradizionali domande di algoritmi incentrate su strutture dati e fondamenti di informatica, ci siamo spostati verso soluzioni di problemi pratici e valutazioni di codifica più pratiche. Anche sulle domande di algoritmi, i candidati sono invitati a risolvere il problema su un laptop piuttosto che su una lavagna bianca, se lo preferiscono. Questo ci aiuta a farci un'idea di come scrivono codice in un ambiente più realistico. Per le nostre domande di codifica, ci concentriamo meno sulla conoscenza degli algoritmi e più sulla progettazione, sulla struttura del codice, sul debug e sull'apprendimento di nuovi domini. Ad esempio, alcune delle nostre domande tecniche utilizzeranno probabilmente un linguaggio/framework con cui non hai familiarità, quindi dovrai dimostrare la capacità di leggere la documentazione e risolvere un problema in una nuova area. Altre domande comportano la costruzione progressiva di un programma complesso in fasi seguendo una specifica di funzionalità.

Adattiamo anche i nostri colloqui in base al background del candidato, all'esperienza lavorativa e al ruolo. Per ruoli più fullstack, dedichiamo più tempo ai fondamenti della comunicazione web (http, websockets, autenticazione), ai fondamenti del browser (caching, gestione eventi js) e ai modelli di dati e API. Per l'ingegneria di sistemi di basso livello, enfatizzeremo il multithreading e le primitive del sistema operativo.

Raccomando tre cose per prepararsi:

  1. Trova domande di codifica online e esercitati a risolverle completamente. Ciò significa creare codice funzionante completo e test senza guardare la soluzione. Creare test è importante; alcune delle nostre domande tecniche hanno diverse fasi, quindi vorrai essere in grado di impostare rapidamente un ambiente di test per un ciclo rapido di modifica/compilazione/debug durante il colloquio, proprio come faresti per il tuo lavoro quotidiano.
  2. Ripassa i fondamenti dell'informatica. Conosci le strutture dati comuni, l'utilizzo di runtime e memoria di ciascun metodo e la loro interfaccia nella lingua che intendi utilizzare. Questo manuale di interviste tecniche su GitHub è una buona panoramica delle diverse strutture dati, ma dovresti anche studiare concetti di sistema come multithreading, concorrenza, lock e transazioni.
  3. Fai colloqui simulati. La pressione del tempo e il dialogo di un colloquio di lavoro simulato sono un ottimo modo per metterti a tuo agio prima dell'evento reale. Chiedi a un amico di farti domande che non conosci e di darti suggerimenti lungo il percorso, se necessario.

Haoyi del nostro team Dev Tools ha scritto un ottimo post sul blog su come condurre un colloquio di programmazione efficace che offre una buona visione di come strutturiamo i nostri colloqui e di cosa cerchiamo.

Webinar

Databricks 101: una guida pratica

Quali sono gli errori più comuni che vedi durante i colloqui?

Ora che abbiamo coperto cosa cerchiamo e come prepararsi per i colloqui, ci sono alcune cose che dovresti consapevolmente cercare di non fare durante un colloquio di lavoro di ingegneria.

La principale è la mancanza di passione o interesse per il ruolo. Ricorda, stai intervistando anche l'azienda ed è importante che tu dimostri di essere investito nel trovare una corrispondenza. Avere un basso entusiasmo, non avere familiarità con il prodotto Databricks, non fare domande e in generale fare affidamento sull'intervistatore per guidare l'intera conversazione sono tutti segnali che non sei interessato. Proprio come desideri un processo di colloquio che ti metta alla prova e approfondisca le tue competenze e i tuoi interessi, ci piace un candidato che ci pone domande difficili e si prende il tempo per conoscerci.

Per i colloqui tecnici, se un candidato sta perseguendo una soluzione che non funzionerà, cerchiamo di aiutarlo a rendersene conto prima di dedicare molto tempo all'implementazione. Se l'intervistatore pone domande, è probabile che ti stia suggerendo un percorso diverso. Invece di rimanere fissato su una soluzione a binario unico, prenditi un minuto per fare un passo indietro e riconsiderare il tuo approccio con nuovi suggerimenti o domande. Ricorda che il tuo intervistatore ha probabilmente posto la stessa domanda decine di volte e ha visto una serie di approcci. Vogliono anche vedere come risponderesti in un ambiente del mondo reale, dove lavoreresti con un team che offre aiuto in modo simile.

Per i colloqui incentrati sulla storia lavorativa e sulle competenze trasversali, fornisci esempi specifici. Va bene iniziare con una generalizzazione ampia, ma racconta una storia su come esempi specifici della tua storia lavorativa passata rispondono alla domanda. Quando parli della tua esperienza lavorativa, prova a (1) definire chiaramente il problema, (2) la tua soluzione, (3) il risultato e (4) eventuali riflessioni sui miglioramenti. Un buon modo per fornire una risposta ben ponderata è utilizzare la Tecnica di Risposta STAR per i Colloqui.

Quali sono alcune qualità che hai visto in ingegneri di successo e di impatto nei tuoi team (sia presenti che passati)?

In una startup come Databricks, la qualità più importante che ho visto negli ingegneri di successo è la responsabilità (ownership). Stiamo crescendo rapidamente, il che porta molte nuove sfide ogni settimana, ma non è sempre chiaro come le responsabilità si dividano tra i team e come vengano determinate le priorità. I grandi ingegneri gestiscono questa ambiguità individuando i problemi più impattanti su cui lavorare, non solo quelli limitati alle responsabilità del loro team attuale. A volte ciò significa contribuire direttamente alla costruzione della soluzione, ma spesso significa motivare gli altri a dare priorità al lavoro.

La seconda qualità su cui ci concentriamo, in particolare per coloro che sono all'inizio della loro carriera, è la capacità di imparare e crescere. La derivata della conoscenza è spesso più importante delle competenze tecniche attuali di un candidato. Molti dei problemi ingegneristici che stiamo risolvendo non hanno modelli esistenti da seguire. Ciò significa rompere continuamente strati di astrazione per considerare il sistema più ampio, dal livello più basso delle istruzioni della CPU, fino a come le visualizzazioni vengono renderizzate nel browser.

Come ho visto queste qualità nei colloqui? Gli ingegneri che mostrano molta responsabilità (ownership) possono spesso parlare in dettaglio dei sistemi adiacenti su cui si sono basati per lavori passati. Ad esempio, conoscono i punti di forza e di debolezza di un particolare livello di archiviazione o sistema di build che hanno utilizzato e il perché. Creano anche spesso modifiche per aiutare il loro team a diventare più efficace, sia attraverso miglioramenti degli strumenti che attraverso modifiche ai processi. La crescita emerge attraverso la riflessione sul lavoro passato. Nessuna soluzione è perfetta e i grandi ingegneri sanno cosa farebbero dopo o farebbero diversamente. Molti candidati dicono che l'opportunità di crescere è il loro criterio principale per scegliere il loro prossimo lavoro, ma dovrebbero essere in grado di parlare di ciò che stanno già facendo per crescere. Forse si tratta di un progetto secondario, una nuova tecnologia che hanno imparato di recente, un miglioramento del loro ambiente di sviluppo o una relazione di mentoring che stanno coltivando nel loro ruolo attuale.

Quali sono alcuni dei problemi su cui sta lavorando il tuo team? Quali competenze stai cercando che renderanno i candidati di successo con questi problemi?

Il team Workspace ha una gamma piuttosto ampia di casi d'uso di prodotto da supportare e la maggior parte del team lavora full stack. Cerchiamo generalisti che abbiano dimostrato la capacità di apprendere rapidamente nuove tecnologie. Siamo anche molto orientati al cliente e abbiamo bisogno di ingegneri che possano approfondire per comprendere i nostri utenti al fine di formulare i requisiti. Diversi membri del team hanno avuto in passato le proprie startup o hanno lavorato come primi dipendenti in startup.

Uno dei modi migliori per capire un ruolo è chiedere: "Di cosa diventerò un maestro?". Per il team Workspace, le competenze principali sono tre.

  1. Apprendere rapidamente nuove tecnologie. Il team Workspace svolge molte attività esplorative e di prototipazione. Il team ha molti generalisti che devono combinare il senso del prodotto e la capacità di adattare la tecnologia esistente a problemi nuovi. Un buon esempio è l'adattamento di Jupyter open source per l'esecuzione nel cloud ospitato da Databricks con Databricks Clusters. Un altro è la creazione di un'infrastruttura pub/sub per lo streaming di aggiornamenti tramite un'API GraphQL a client web in tempo reale.
  2. I flussi di lavoro relativi a data science, machine learning e data analytics. Stiamo costruendo prodotti per queste persone, quindi comprenderai a fondo il flusso di lavoro quotidiano di data scientist e data engineer presso una varietà di clienti in molti settori e dimensioni aziendali. Gli ingegneri di questo team hanno un'esposizione regolare ai nostri clienti e ai campioni interni dei clienti nell'ingegneria sul campo.
  3. Progettazione di servizi web scalabili sulla JVM. Il nostro team lavora sul backend principale per i notebook stateful e Workspace, che spesso affronta sfide di progettazione uniche per un servizio della nostra scala. Tutti nel team sviluppano una profonda comprensione dei primitivi di risorse (cpu/memoria/io/rete) e di come ottimizzarne l'utilizzo in un'architettura distribuita e tollerante ai guasti.

In Databricks, siamo costantemente alla ricerca di ingegneri del software che incarnino le caratteristiche di cui abbiamo parlato. Se sei interessato a risolvere alcune delle sfide che stiamo attualmente affrontando qui, consulta la nostra Pagina Carriere e candidati per un colloquio con noi!

Ted Tomlinson è Director of Engineering in Databricks. Gestisce il team Workspace, responsabile del prodotto di punta di Databricks per i notebook collaborativi e dei servizi utilizzati per abilitare la data science interattiva e il machine learning in tutti gli ambienti.

(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale

Non perdere mai un post di Databricks

Iscriviti al nostro blog e ricevi gli ultimi post direttamente nella tua casella di posta elettronica.