Programátori, choďte na pohovory

Programátori, choďte na pohovory
Obrázok je prevzatý z videa z kanála "Militantné ametysty»

Asi 10 rokov som pracoval ako systémový programátor pre Linux. Ide o moduly jadra (priestor jadra), rôzne démony a prácu s hardvérom z používateľského priestoru (priestor používateľa), rôzne bootloadery (u-boot a pod.), firmvér radiča a mnohé ďalšie. Dokonca sa občas stalo, že seklo webové rozhranie. Ale častejšie sa stávalo, že som musel sedieť pri spájkovačke a komunikovať s dizajnérmi dosiek plošných spojov. Jedným z problémov takejto práce je, že je dosť ťažké posúdiť úroveň vašej kompetencie, keďže jednu úlohu možno poznáte veľmi hlboko, no inú možno nepoznáte vôbec. Jediný adekvátny spôsob, ako pochopiť, kam ísť a aké sú teraz prúdy, je chodiť na pohovory.

V tomto článku by som rád zhrnul svoje skúsenosti s pohovorom na voľné miesto programátora systému Linux, špecifiká pohovoru, prácu a ako posúdiť svoju osobnú úroveň vedomostí pri komunikácii s budúcim zamestnávateľom a čo by ste nemali očakávať od toho.

Súčasťou článku bude malá súťaž o ceny.

Vlastnosti tejto profesie

Systémový programátor v špecifickej oblasti, v ktorej som pracoval, je úplným všeobecným odborníkom: musel som písať kód aj ladiť hardvér. A často bolo potrebné niečo spájkovať sami. Z času na čas sa stalo, že moje úpravy hardvéru sa potom preniesli na vývojárov. Preto na prácu v tejto oblasti potrebujete pomerne dobrú základňu vedomostí, ako v oblasti digitálnych obvodov, tak aj v oblasti programovania. Z tohto dôvodu pohovory na pozíciu systémového programátora často vyzerajú ako hľadanie špecialistu na elektroniku.

Programátori, choďte na pohovory
Typická pracovná stanica pre systémového programátora.

Vyššie uvedená fotografia zobrazuje moje typické pracovisko pri ladení ovládačov. Logický analyzátor ukazuje správnosť prenášaných správ, osciloskop sleduje tvar hrán signálu. Do rámca tiež nebol zahrnutý ladiaci program jtag, ktorý sa používa, keď štandardné nástroje na ladenie už nezvládajú. A so všetkým týmto vybavením musíte vedieť pracovať.

Často sa stáva, že je rýchlejšie a jednoduchšie prespájkovať niektoré prvky a opraviť chyby topológie sami, než dať produkt k inštalatérovi. A potom sa na vašom pracovisku usadí aj spájkovacia stanica.

Ďalšou vlastnosťou vývoja na úrovni ovládačov a hardvéru je, že Google nepomáha. Často musíte hľadať informácie o svojom probléme a existujú tri odkazy, z ktorých dva sú vaše vlastné otázky na niektorom fóre. Alebo ešte horšie, keď narazíte na otázku od toho istého chudáka, ktorý ju položil pred 5 rokmi na mailing listu jadra a nikdy nedostal odpoveď. V tejto práci sa okrem chýb v dizajne hardvéru aj softvéru často vyskytujú chyby v dokumentácii - to sú pravdepodobne najzávažnejšie a najnepríjemnejšie problémy. Niekedy sú registre popísané nesprávne alebo pre ne neexistuje žiadny popis. Takéto problémy je možné vyriešiť iba vedeckým načítaním náhodných čísel do určitých registrov (akýsi spätný chod). Často sa stáva, že procesor obsahuje nejakú funkcionalitu, ale nikto okrem vás túto funkcionalitu neimplementoval (najmä ak je procesor nový). A to znamená chodiť po poli s hrabľami, z ktorých 70 % je pre deti. Ale keď existuje dokumentácia, dokonca aj s chybami, je to už pokrok. Pomerne často sa stáva, že neexistuje žiadna dokumentácia, a to vtedy, keď prechádzka po mínových poliach začína, keď horí železo. A áno, aj takéto problémy som úspešne riešil.

Rozhovory

Môj názor je, že na pohovor by ste mali chodiť aspoň raz za pol roka, aj keď svoju prácu zbožňujete a nechcete ju meniť. Pohovor vám umožní pochopiť vašu úroveň špecialistu. Verím, že najcennejšie rozhovory sú tie, ktoré zlyhajú. Sú to tí, ktorí najpresnejšie ukazujú, ktoré úzke miesta vo vašich vedomostiach je potrebné zlepšiť.

Ďalšou zaujímavosťou je kvalita rozhovorov. Toto je môj postreh a nie je to pravda, priznám sa, že som mal len šťastie. Ak pohovor prebieha podľa scenára:

  • povedz nám o sebe;
  • Máme také úlohy;
  • páči sa ti?

A ak sa po tomto dialógu máte radi, idete do práce, potom sa spoločnosť a úlohy spravidla ukážu ako veľmi príjemné a primerané. Ak pohovor pripomína prechod 12 kruhmi pekla: prvý pohovor s HR, potom pohovor so skupinou programátorov, potom riaditeľ, ďalšie domáce úlohy atď., tak to boli spravidla neúspešné organizácie, v ktorých som nepracoval veľmi dlho. Opäť ide o osobný postreh, ale spravidla príliš veľa byrokracie a zdĺhavý proces prijímania zamestnancov ukazujú, že v rámci spoločnosti prebiehajú presne tie isté procesy. Rozhodnutia sa robia pomaly a neefektívne. Boli aj opačné situácie, keď boli kruhy pohovorového pekla a spoločnosť dopadla na výbornú, a keď sa po plácnutí cez zápästie z firmy stala bažina, ale tie sú zriedkavé.

Ak si myslíte, že scenár: stretol, povedal si o sebe a zamestnal sa, existuje len v malých firmách, tak nie. Videl som to vo veľmi veľkých firmách, ktoré zamestnávajú viac ako stovky ľudí a sú zastúpené na svetových trhoch. Ide o normálny mechanizmus, najmä ak máte bohaté skúsenosti a máte možnosť zavolať svojim predchádzajúcim zamestnávateľom a opýtať sa na vás.

Pre mňa je to veľmi dobrý ukazovateľ spoločnosti, keď žiada, aby ukázala príklady svojich projektov a kódu. Úroveň výcviku žiadateľa sa okamžite zobrazí. A čo sa mňa týka, z pohľadu výberu kandidátov je to najefektívnejší spôsob výberu ako ukážkové pohovory. V skutočnosti môžete na pohovore zlyhať od vzrušenia, alebo naopak vyraziť na adrenalín. Ale v skutočnej práci sa nemôžete vyrovnať so skutočnými úlohami. A tiež som sa s tým stretol, keď som sám robil rozhovory s ľuďmi. Príde špecialista, ukáže sa ako výborný, ja som ho mal rád, on nás. A s tým najjednoduchším problémom som bojoval mesiac a v dôsledku toho ho za pár dní vyriešil iný programátor. Musel som sa rozlúčiť s tým programátorom.

Na pohovoroch si cením najmä programátorské úlohy. A tie, ktoré treba riešiť priamo počas porady, v strese a domácich úlohách. Prvý ukazuje, ako ste pripravení rýchlo a presne riešiť problémy v stresovej situácii a núdzi. Druhý ukazuje úroveň vašej kompetencie a schopnosti vyhľadávať informácie a riešiť aktuálne problémy.

Najzaujímavejšie práce som mal v obrannom komplexe našej krajiny. V procese práce som musel vyriešiť jednoducho fantastické problémy, o ktorých sa komerčným programátorom ani nesnívalo. Superpočítače, navrhovanie smerovačov, rôzne bojové systémy uzlov – to je neuveriteľne vzrušujúce. Keď počas prehliadky uvidíte komplex, ktorý ukladá váš kód, je to naozaj pekné. Napodiv, rozhovory s takýmito spoločnosťami sú zvyčajne veľmi jednoduché, doslova nech sa páči, akceptujú sa (pravdepodobne špecifiká armády, ktorá príliš neradi hovorí), sú prekryté. Výzvy, ktorým som tam čelil, boli skutočne zaujímavé a náročné. Skúsenosťami sa ukázalo, že sú dobré na to, aby sa naučili byť kvalitným systémovým programátorom. Sú tu aj nevýhody, a to nie sú ani nízke mzdy. V súčasnosti je plat v obrannom komplexe celkom slušný, s bonusmi a benefitmi. Spravidla je tu veľa byrokracie, dlhá pracovná doba, nekonečné uponáhľané práce a práca pod veľkým stresom. V určitých prípadoch nemožno vylúčiť utajenie, čo pri cestovaní do zahraničia pridáva určité problémy. Plus, samozrejme, tyrania šéfov, a to sa bohužiaľ tiež stáva. Aj keď moja skúsenosť so spoluprácou so zástupcom zákazníka je mimoriadne príjemná. Ide o súhrnný dojem troch rôznych výskumných ústavov a spoločností súvisiacich s obrannými zákazkami štátu.

Úlohy na pohovor

Aby nedošlo k nedorozumeniam a aby som neprezradil spoločnosti, s ktorými som robil rozhovory, nebudem pokúšať osud a uvediem ich detaily. Ale som vďačná za každý rozhovor, za čas, ktorý mi ľudia venovali, za možnosť pozrieť sa na seba zvonku. Môžem len povedať, že úlohy boli pre veľké medzinárodné spoločnosti zastúpené v rôznych krajinách.

Poviem vám to najzaujímavejšie: aké úlohy sa dávajú počas pohovorov. Vo všeobecnosti sú najčastejšími otázkami na voľné miesto systémového programátora a programátora mikrokontrolérov bitové operácie, a to vo všetkých možných variáciách. Preto sa v tejto oblasti pripravte najlepšie.

Druhou najviac polarizujúcou témou sú smerovky, toto by vám malo naozaj vyskočiť zo zubov. Aby vás zobudili uprostred noci a vy ste mohli všetko povedať a ukázať.

V hlave som si ukradol otázky z niekoľkých rozhovorov a uvediem ich tu, keďže sa mi zdajú celkom zaujímavé. Zámerne nedávam odpovede na tieto otázky, aby si čitatelia sami odpovedali na tieto otázky v komentároch a trochu sa prepudrovali pri absolvovaní skutočného rozhovoru.

Otázky č.1

I. Znalosť SI. Čo znamenajú nasledujúce položky:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Sú všetky záznamy správne?

II. Prečo tento program spôsobí chybu segmentácie?

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

III. Byť múdry.

Je tam palica dlhá jeden meter. Náhodne na ňu padne desať mravcov, ktorí sa plazia rôznymi smermi. Rýchlosť pohybu jedného mravca je 1 m/s. Ak sa mravec stretne s iným mravcom, otočí sa a plazí sa opačným smerom. Aký je maximálny čas, počas ktorého musíte počkať, kým všetky mravce spadnú z palice?

Nasledujúci rozhovor bol pre mňa neúspešný a považujem ho za najužitočnejší v mojej programátorskej praxi. Ukázalo to hĺbku mojej neschopnosti. Pred týmto rozhovorom som každú z týchto otázok poznal a neustále sa v mojej praxi objavovali, ale nejako som im neprikladal veľký význam, a preto som im dobre nerozumel. Preto som túto skúšku s hanbou neuspel. A som veľmi vďačný, že k takémuto neúspechu došlo, zapôsobilo to na mňa najtriezvejšie. Myslíte si, že ste skvelý špecialista, poznáte návrh obvodov, rozhrania a prácu s jadrom. A potom máte skutočné otázky a vznášate sa. Tak sa pozrime.

Otázky na pohovor #2

Problémy s hardvérom.

  • Ako sú linuxové systémové volania usporiadané v assembleri na procesore ARM na x86. V čom je rozdiel?
  • Aké synchronizačné nástroje existujú? Ktoré synchronizačné nástroje možno použiť v kontexte prerušenia, ktoré nie a prečo?
  • Aký je rozdiel medzi zbernicou i2c a zbernicou spi?
  • Prečo sú na zbernici i2c terminátory a aká je ich hodnota?
  • Môže rozhranie RS-232 fungovať LEN na dvoch vodičoch: RX a TX? Tu dám odpoveď: Ukazuje sa, že je to zlé, pri 9600, ale môže!!!
  • A teraz druhá otázka: prečo?
  • Aký je najlepší spôsob usporiadania signálových vedení a napájania vo viacvrstvových doskách a prečo? Výkon vo vrstvách alebo signálne vedenia vo vrstvách? (Otázka je vo všeobecnosti čisto o návrhu obvodu).
  • Prečo majú diferenciálne vedenia dráhy, ktoré sa všade spájajú?
  • zbernica RS-485. Zvyčajne sú na takejto linke terminátory. Máme však hviezdicový obvod s premenlivým počtom zásuvných modulov. Aké prostriedky na predchádzanie kolíziám a rušeniu by sa mali použiť?
  • Čo sú červené a binárne stromy?
  • Ako pracovať s cmake?
  • Otázky týkajúce sa zostavovania yocto Linuxu.

Ciele tohto rozhovoru:

1. Napíšte funkciu, ktorá sa invertuje na uint32_t všetky kúsky. (práca s bitmi je na pohovoroch veľmi obľúbená, odporúčam)
2.

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

Čo táto funkcia vráti? (riešenie na papieri, bez počítača)

3. Funkcia na výpočet aritmetického priemeru dvoch čísel int32_t.

4. Aké sú spôsoby výstupu v programoch, vr. do prúdu chýb.

Tretí výber bol pomerne čerstvý a nečudoval by som sa, keby tam ešte taký dotazník bol, preto neprezradím firmu, aby som ich neprezradil... Ale všeobecne uvediem príklad možných otázok a ak poznáte svoje otázky, tak pozdravujem :).

Otázky na pohovor #3

  1. Je uvedený príklad kódu prechodu cez strom, je potrebné povedať, čo sa v tomto kóde robí a upozorniť na chyby.
  2. Napíšte príklad pomôcky ls. S najjednoduchšou možnosťou „-l“.
  3. Uveďte príklad, ako urobiť statické a dynamické prepojenie. V čom je rozdiel?
  4. Ako funguje RS-232? Aký je rozdiel medzi RS-485 a RS-232? Aký je rozdiel medzi RS-232 a RS-485 z pohľadu programátora?
  5. Ako funguje USB (z pohľadu programátora)?
  6. Preklad technického textu z ruštiny do angličtiny.

Úspešný pohovor nie je zárukou úspešnej práce

Táto kapitola asi ani nie je pre programátorov (aj keď aj pre nich), ale skôr pre HR. Najadekvátnejšie spoločnosti sa na výsledky pohovorov nepozerajú úzkostlivo. Je normálne robiť chyby; najčastejšie sa pozerajú na to, ako človek vie riešiť problémy a uvažovať.

Jedným z kľúčových problémov je, že kandidát úspešne rieši problémy počas pohovorov, prejavuje sa ako vynikajúci špecialista, no zlyhá už pri prvej skutočnej úlohe. Nebudem klamať, stalo sa to aj mne. Úspešne som prešiel všetkými kruhmi pekla, vyriešil všetky testovacie úlohy, ale v reálnych podmienkach sa práca ukázala byť príliš ťažká kvôli jednoduchej neskúsenosti. Dostať sa na palubu nie je najťažšia úloha. Najťažšie je zostať na palube tejto spoločnosti.

Preto verím viac firmám, ktoré vedú s kandidátom jednoduché pohovory a hovoria: po prvom mesiaci práce bude jasné, či sa k nám hodíte alebo nie. Toto je najadekvátnejší prístup, áno, možno trochu drahý, ale hneď je jasné, kto je kto.

Pri pohovoroch je ešte jedna možnosť: keď ním úspešne prejdete, no na základe výsledkov pohovoru pochopíte, že zamestnávateľ je úplne neadekvátny. Okamžite odmietam prácu, ak mi ponúknu prácu ako samostatný podnikateľ a sľubujem veľké príjmy. Pre prevádzkujúcu organizáciu ide o formu daňových únikov a prečo by ma ako programátora mali znepokojovať problémy zamestnávateľa? Ďalšou možnosťou sú rôzne vládne agentúry. Mal som pohovor, v dôsledku ktorého mi ponúkli dobrý plat, ale povedali, že predchádzajúci programátor skončil, ochorel, zomrel, šiel na flám z pracovného vyťaženia a váš pracovný deň začína o 8:XNUMX ráno. . Z takého miesta utekal aj tak, že sa mu v pätách iskrilo. Áno, personalisti, majte na pamäti, že programátori sú pripravení odmietnuť aj tú najchutnejšiu prácu, ak má pracovný deň začať skoro ráno.

Na konci dám vynikajúce video výberu programátora, ktorého screenshot je uvedený na začiatku tohto článku. Aj ja som mal takýto rozhovor nie raz. Ak vidíte tyraniu vo fáze otázok, rešpektujte sa, vstaňte, vezmite si veci a odíďte - to je normálne. Ak sa na pohovore personalista a manažér presadzujú na váš úkor, naznačuje to, že spoločnosť je toxická a nemali by ste tam pracovať, pokiaľ nemáte radi neadekvátnych šéfov.

Závery

Programátori, choďte na pohovory! A vždy sa snažte povýšiť. Povedzme, že ak dostanete N peňazí, choďte na pohovor aspoň za N*1,2 alebo lepšie N*1,5. Aj keď toto voľné miesto hneď nezoberiete, pochopíte, čo je potrebné pre túto úroveň platu.
Moje pozorovania ukázali, že rozhoduje dobrá znalosť anglického jazyka, dostatočne bohaté skúsenosti v odbore a sebavedomie. To posledné je hlavnou kvalitou, ako všade v živote. Spravidla sebavedomejší kandidát dokáže na pohovore podať lepší výkon aj s väčším počtom chýb ako výborný, no hanblivejší a iniciatívnejší uchádzač. Veľa šťastia pri pohovoroch!

P/S súťaž

Ak máte zaujímavé príklady problémov, ktorými vás HR zaťažilo, vitajte v komentároch. Pripravili sme malú súťaž - podmienky sú jednoduché: napíšete najnezvyčajnejšiu úlohu, ktorú ste mali počas rozhovoru, čitatelia ju vyhodnotia (plus) a po týždni zhrnieme výsledky a výhercu odmeníme zábavnými dobrotami.

Programátori, choďte na pohovory

Programátori, choďte na pohovory

Zdroj: hab.com

Pridať komentár