Programmatori, andate alle interviste

Programmatori, andate alle interviste
La foto è tratta da un video del canale “Ametiste militanti»

Ho lavorato come programmatore di sistemi per Linux per circa 10 anni. Si tratta di moduli del kernel (spazio del kernel), vari demoni e funzionamento dell'hardware dallo spazio utente (spazio utente), vari bootloader (u-boot, ecc.), Firmware del controller e molto altro. Addirittura a volte è capitato di tagliare l'interfaccia web. Ma più spesso accadeva che dovevo sedermi con un saldatore e interagire con i progettisti di circuiti stampati. Uno dei problemi con questo lavoro è che è abbastanza difficile valutare il livello della tua competenza, poiché potresti conoscere un compito molto profondamente, ma potresti non conoscerne affatto un altro. L’unico modo adeguato per capire dove andare e quali correnti ci sono adesso è fare interviste.

In questo articolo vorrei riassumere la mia esperienza di colloquio per un posto vacante come programmatore di sistemi Linux, le specifiche del colloquio, il lavoro e come valutare il tuo livello personale di conoscenza comunicando con un futuro datore di lavoro e cosa non dovresti aspettarsi da esso.

L'articolo includerà un piccolo concorso a premi.

Caratteristiche della professione

Un programmatore di sistemi, nel campo specifico in cui ho lavorato, è un generalista completo: dovevo sia scrivere codice che eseguire il debug dell'hardware. E spesso c'era bisogno di saldare qualcosa da soli. Di tanto in tanto accadeva che le mie modifiche all'hardware venissero poi trasferite agli sviluppatori. Pertanto, per lavorare in questo settore è necessaria una base di conoscenze abbastanza buona, sia nel campo della circuiteria digitale che nella programmazione. Per questo motivo, i colloqui per una posizione di programmatore di sistema spesso assomigliano alla ricerca di uno specialista di elettronica.

Programmatori, andate alle interviste
Una tipica workstation per un programmatore di sistemi.

La foto sopra mostra il mio tipico posto di lavoro durante il debug dei driver. L'analizzatore logico mostra la correttezza dei messaggi trasmessi, l'oscilloscopio monitora la forma dei fronti del segnale. Inoltre, nel frame non è stato incluso il debugger jtag, che viene utilizzato quando gli strumenti di debug standard non sono più in grado di farlo. E devi essere in grado di lavorare con tutta questa attrezzatura.

Accade spesso che sia più veloce e più semplice risaldare alcuni elementi e correggere da soli gli errori di topologia piuttosto che portare il prodotto da un installatore. E poi anche una stazione di saldatura si installa sul posto di lavoro.

Un'altra caratteristica dello sviluppo a livello di driver e hardware è che Google non aiuta. Spesso devi cercare informazioni sul tuo problema e ci sono tre collegamenti, due dei quali sono le tue domande su qualche forum. O peggio ancora, quando ti imbatti in una domanda posta dallo stesso povero ragazzo che la pose 5 anni fa sulla mailing list del kernel e non ricevette mai risposta. In questo lavoro, oltre agli errori nella progettazione sia dell'hardware che del software, si riscontrano spesso errori di documentazione: questi sono probabilmente i problemi più gravi e spiacevoli. A volte i registri vengono descritti in modo errato o non esiste alcuna descrizione per essi. Tali problemi possono essere risolti solo inserendo scientificamente numeri casuali in determinati registri (una sorta di rovescio). Accade spesso che il processore contenga alcune funzionalità, ma nessuno tranne te ha implementato questa funzionalità (soprattutto se il processore è nuovo). E questo significa attraversare il campo con un rastrello, il 70% del quale è destinato ai bambini. Ma quando c’è la documentazione, anche con gli errori, questo è già un progresso. Molto spesso accade che non ci sia alcuna documentazione, ed è allora che il cammino nei campi minati inizia quando il ferro brucia. E sì, ho anche risolto con successo questi problemi.

Interviste

La mia opinione è che dovresti presentarti ai colloqui almeno una volta ogni sei mesi, anche se adori il tuo lavoro e non vuoi cambiarlo. Un colloquio ti permette di capire il tuo livello di specialista. Credo che le interviste più preziose siano quelle che falliscono. Sono loro che mostrano con maggiore precisione quali colli di bottiglia nelle tue conoscenze devono essere migliorati.

Un'altra caratteristica interessante è la qualità delle interviste. Questa è la mia osservazione, e non è la verità, ammetto che sono stato solo fortunato. Se il colloquio si svolge secondo lo scenario:

  • Parlaci di te;
  • Abbiamo tali compiti;
  • ti piace?

E se dopo questo dialogo vi piacete, andate a lavorare, allora, di regola, la compagnia e i compiti risultano molto piacevoli e adeguati. Se un colloquio assomiglia a 12 gironi dell'inferno: il primo colloquio con le risorse umane, poi un colloquio con un gruppo di programmatori, poi il direttore, altri compiti, ecc., allora di regola si trattava di organizzazioni fallite in cui non lavoravo per molto tempo. Anche in questo caso si tratta di un'osservazione personale, ma di norma troppa burocrazia e un processo di assunzione troppo lungo dimostrano che all'interno dell'azienda si svolgono esattamente gli stessi processi. Le decisioni vengono prese lentamente e in modo inefficace. Ci sono state anche situazioni opposte, quando c'erano i circoli dell'inferno dei colloqui, e l'azienda si è rivelata ottima, e quando, dopo una tiratina d'orecchi, l'azienda si è rivelata una palude, ma queste sono rare.

Se pensi che lo scenario: incontrarsi, raccontarsi e farsi assumere, esista solo nelle piccole aziende, allora no. L'ho visto in aziende molto grandi che impiegano più di centinaia di persone e sono rappresentate sui mercati mondiali. Questo è un meccanismo normale, soprattutto se hai un ricco track record e hai l'opportunità di chiamare i tuoi precedenti datori di lavoro e chiedere di te.

Per me, è un ottimo indicatore di un’azienda quando chiede di mostrare esempi dei suoi progetti e del suo codice. Viene immediatamente mostrato il livello di formazione del richiedente. E, per quanto mi riguarda, dal punto di vista della selezione dei candidati, questo è il metodo di selezione più efficace rispetto alle interviste mostrate. In effetti, puoi fallire in un colloquio per l'eccitazione o, al contrario, uscire con l'adrenalina. Ma nel lavoro reale non puoi far fronte a compiti reali. E l'ho riscontrato anche quando ho intervistato io stesso le persone. Viene uno specialista, si mostra bravissimo, mi è piaciuto, gli siamo piaciuti. E ho lottato per un mese con il problema più semplice e, di conseguenza, un altro programmatore l'ha risolto in un paio di giorni. Ho dovuto separarmi da quel programmatore.

Apprezzo particolarmente i compiti di programmazione nelle interviste. E quelle da risolvere proprio durante la riunione, sotto stress, e i compiti. Il primo mostra quanto sei pronto a risolvere i problemi in modo rapido e accurato in una situazione stressante ed emergenza. Il secondo mostra il tuo livello di competenza e capacità di cercare informazioni e risolvere problemi attuali.

I lavori più interessanti che ho svolto sono stati nel complesso della difesa del nostro Paese. Nel processo di lavoro, ho dovuto risolvere problemi semplicemente fantastici che i programmatori commerciali non si sarebbero mai nemmeno sognati. Supercomputer, progettazione di router, vari sistemi di combattimento dei nodi: questo è incredibilmente eccitante. Quando durante la sfilata vedi un complesso che memorizza il tuo codice, è davvero bello. Stranamente, le interviste con tali aziende sono di solito molto semplici, vengono letteralmente accettate (probabilmente le specificità dei militari, a cui non piace parlare troppo), sono sovrapposte. Le sfide che ho affrontato lì sono state davvero interessanti e stimolanti. Con l'esperienza, si è scoperto che sono ottimi per imparare a diventare programmatori di sistemi di alta qualità. Ci sono anche degli svantaggi e questo non è nemmeno un salario basso. Al momento lo stipendio nel complesso della difesa è abbastanza dignitoso, con bonus e benefici. Di norma, c'è molta burocrazia, orari di lavoro lunghi, lavori urgenti senza fine e lavoro sotto forte stress. In alcuni casi non si può escludere la segretezza, il che aggiunge alcuni problemi per i viaggi all'estero. Inoltre, ovviamente, la tirannia dei padroni, e anche questo, ahimè, accade. Sebbene la mia esperienza di lavoro con un rappresentante del cliente sia estremamente piacevole. Questa è l'impressione collettiva di tre diversi istituti di ricerca e aziende legate agli ordini di difesa dello Stato.

Compiti di intervista

Per evitare malintesi e per non smascherare le aziende che ho intervistato, non sfiderò la sorte e ne indicherò i dettagli. Ma sono grato per ogni intervista, per il tempo che le persone hanno dedicato a me, per l'opportunità di guardarmi dall'esterno. Posso solo dire che i compiti spettavano a grandi aziende internazionali rappresentate in diversi paesi.

Ti dirò la cosa più interessante: quali compiti vengono assegnati durante le interviste. In generale, le domande più comuni per il posto vacante di programmatore di sistema e programmatore di microcontrollori riguardano le operazioni di bit, in tutte le possibili varianti. Pertanto, preparati al meglio in quest'area.

Il secondo argomento più polarizzante sono i segnali stradali, questo dovrebbe davvero farti saltare i denti. Perché ti sveglino nel cuore della notte e tu possa raccontare e mostrare tutto.

Ho rubato nella mia testa le domande di diverse interviste e le presento qui perché le trovo piuttosto interessanti. Non do deliberatamente risposte a queste domande in modo che i lettori possano rispondere da soli a queste domande nei commenti e avere un po' di polvere durante una vera intervista.

Domande n. 1

I. Conoscenza dell'SI. Cosa significano le seguenti voci:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Tutte le voci sono corrette?

II. Perché questo programma genererà un errore di segmentazione?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Essere intelligente.

C'è un bastone lungo un metro. Dieci formiche le cadono addosso in modo casuale, strisciando in direzioni diverse. La velocità di movimento di una formica è 1 m/s. Se una formica incontra un'altra formica, si gira e striscia nella direzione opposta. Qual è il tempo massimo che devi aspettare affinché tutte le formiche cadano dal bastone?

Il colloquio successivo è stato un fallimento per me e lo considero il più utile nella mia pratica di programmazione. Dimostrava la profondità della mia incompetenza. Prima di questa intervista, avevo familiarità con ciascuna di queste domande e si presentavano costantemente nella mia pratica, ma in qualche modo non attribuivo loro molta importanza e, di conseguenza, non le capivo bene. Pertanto, ho fallito questo esame in disgrazia. E sono molto grato che si sia verificato un simile fallimento; ha avuto l’effetto più deludente su di me. Pensi di essere uno specialista interessante, conosci la progettazione di circuiti, le interfacce e lavori con il kernel. E poi hai domande vere e galleggi. Quindi vediamo.

Domande dell'intervista n. 2

Problemi hardware.

  • Come sono organizzate le chiamate di sistema Linux in linguaggio assembly su un processore ARM, su x86. Qual è la differenza?
  • Quali strumenti di sincronizzazione ci sono? Quali strumenti di sincronizzazione possono essere utilizzati in un contesto di interruzione, quali no e perché?
  • Qual è la differenza tra bus i2c e bus spi?
  • Perché sono presenti dei terminatori sul bus i2c e qual è il loro valore?
  • L'interfaccia RS-232 può funzionare SOLO su due fili: RX e TX? Qui darò la risposta: si scopre che va male, a 9600, ma può!!!
  • E ora la seconda domanda: perché?
  • Qual è il modo migliore per disporre le linee di segnale e di alimentazione nelle schede multistrato e perché? Potenza all'interno degli strati o linee di segnale all'interno degli strati? (La domanda riguarda generalmente esclusivamente la progettazione del circuito).
  • Perché le linee differenziali hanno binari che vanno insieme ovunque?
  • Autobus RS-485. Di solito ci sono dei terminatori su tale linea. Abbiamo comunque un circuito a stella, con un numero variabile di moduli plug-in. Quali mezzi dovrebbero essere utilizzati per evitare collisioni e interferenze?
  • Cosa sono gli alberi rossi e binari?
  • Come lavorare con cmake?
  • Domande sulla creazione di yocto Linux.

Obiettivi di questa intervista:

1. Scrivi una funzione che inverte a uint32_t tutti i pezzi. (lavorare con i bit è molto popolare durante le interviste, lo consiglio)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Cosa restituirà questa funzione? (soluzione cartacea, senza computer)

3. Funzione per calcolare la media aritmetica di due numeri int32_t.

4. Quali sono i metodi di output nei programmi, incl. in un flusso di errori.

La terza selezione è stata relativamente recente, e non mi stupirei se esistesse ancora un questionario del genere, quindi non rivelerò l'azienda per non esporli... Ma in termini generali farò un esempio di possibili domande, e se riconosci le tue domande, allora ti saluto :).

Domande dell'intervista n. 3

  1. Viene fornito un esempio di codice di attraversamento dell'albero; è necessario spiegare cosa viene fatto in questo codice e segnalare gli errori.
  2. Scrivi un esempio dell'utilità ls. Con l'opzione più semplice “-l”.
  3. Fornisci un esempio di come eseguire il collegamento statico e dinamico. Qual è la differenza?
  4. Come funziona RS-232? Qual è la differenza tra RS-485 e RS-232? Qual è la differenza tra RS-232 e RS-485 dal punto di vista di un programmatore?
  5. Come funziona l'USB (dal punto di vista del programmatore)?
  6. Traduzione di testi tecnici dal russo all'inglese.

Un colloquio di successo non è garanzia di un lavoro di successo

Questo capitolo probabilmente non è nemmeno per i programmatori (anche se anche per loro), ma più per le risorse umane. Le aziende più adeguate non guardano meticolosamente i risultati delle interviste. È normale commettere errori, il più delle volte guardano come una persona sa come risolvere i problemi e ragionare.

Uno dei problemi chiave è che il candidato risolve con successo i problemi durante i colloqui, si dimostra un eccellente specialista, ma fallisce al primo vero compito. Non mentirò, è successo anche a me. Ho attraversato con successo tutti i gironi dell'inferno, ho risolto tutti i compiti di prova, ma in condizioni reali il lavoro si è rivelato troppo duro a causa della semplice inesperienza. Salire a bordo non è il compito più difficile. La cosa più difficile è restare a bordo di questa azienda.

Pertanto mi fido di più delle aziende che conducono semplici colloqui con il candidato e dicono: dopo il primo mese di lavoro sarà chiaro se sei adatto a noi oppure no. Questo è l'approccio più adeguato, sì, forse un po' costoso, ma è subito chiaro chi è chi.

C'è un'altra opzione per i colloqui: quando lo superi con successo, ma in base ai risultati del colloquio capisci che il datore di lavoro è completamente inadeguato. Rifiuto immediatamente il lavoro se mi viene offerto di lavorare come imprenditore individuale, promettendo grandi redditi. Questa è una forma di evasione fiscale per un'organizzazione operativa, e perché i problemi del datore di lavoro dovrebbero preoccuparmi come programmatore? Un'altra opzione sono varie agenzie governative. Ho fatto un colloquio, a seguito del quale mi è stato offerto un buon stipendio, ma hanno detto che il precedente programmatore si è licenziato, si è ammalato, è morto, si è abbuffato a causa del carico di lavoro e la tua giornata lavorativa inizia alle 8 del mattino . Da un posto simile corse anche in modo che i suoi talloni scintillassero. Sì, risorse umane, tieni presente che i programmatori sono pronti a rifiutare anche il lavoro più delizioso se la giornata lavorativa deve iniziare la mattina presto.

Alla fine fornirò un eccellente video sulla selezione del programmatore, il cui screenshot è riportato all'inizio di questo articolo. Ho anche avuto un'intervista del genere più di una volta. Se vedi la tirannia nella fase delle domande, rispetta te stesso, alzati, prendi le tue cose e vattene: questo è normale. Se le risorse umane e il manager si fanno valere a tue spese durante il colloquio, ciò indica che l'azienda è tossica e non dovresti lavorare lì a meno che non ti piacciano i capi inadeguati.

risultati

Programmatori, andate alle interviste! E cerca sempre di essere promosso. Diciamo che se ottieni N soldi, vai a fare un colloquio per almeno N*1,2, o meglio N*1,5. Anche se non occupi subito questo posto vacante, capirai cosa è necessario per questo livello di retribuzione.
Le mie osservazioni hanno dimostrato che a decidere sono una buona conoscenza della lingua inglese, un'esperienza sufficientemente ricca nel settore e la fiducia in se stessi. Quest'ultima è la qualità principale, come ovunque nella vita. Di norma, un candidato più fiducioso può ottenere risultati migliori in un colloquio, anche con più errori, rispetto a un candidato eccellente, ma più timido e proattivo. Buona fortuna con le tue interviste!

Concorso P/S

Se hai esempi interessanti di problemi che le risorse umane ti hanno caricato, benvenuto nei commenti. Abbiamo preparato un piccolo concorso: le condizioni sono semplici: scrivi il compito più insolito che hai svolto durante un'intervista, i lettori lo valutano (più) e dopo una settimana riassumiamo i risultati e premiamo il vincitore con gadget divertenti.

Programmatori, andate alle interviste

Programmatori, andate alle interviste

Fonte: habr.com

Aggiungi un commento