Праграмісты, хадзіце на сумоўі

Праграмісты, хадзіце на сумоўі
Малюнак узята з відэароліка з канала «Ваяўнічыя Аметысты»

Каля 10 гадоў я працаваў сістэмным праграмістам пад Linux. Гэта модулі ядра (kernel space), розныя дэманы і праца з жалезам з прасторы карыстача (user space), розныя загрузнікі (u-boot і інш.), прашыўкі кантролераў і шматлікае іншае. Нават іншы раз здаралася пілаваць web-інтэрфейс. Але часцей бывала, што даводзілася і з паяльнікам пасядзець, ды з праекціроўшчыкамі друкаваных поплаткаў узаемадзейнічаць. Адна з праблем такой працы гэта тое, што дастаткова складана ацаніць узровень сваёй кампетэнцыі, паколькі адну задачу ты можаш ведаць вельмі глыбока, а побач можаш не ведаць зусім. Адзіны адэкватны спосаб зразумець куды ісці, і якія плыні цяпер ёсць - гэта хадзіць на сумоўі.

У дадзеным артыкуле жадаю абагульніць мой досвед паходу па гутарках на вакансію сістэмнага праграміста linux, асаблівасці інтэрв'ю, працы і як па зносінах з будучыняй працадаўцам ацаніць асабісты ўзровень ведаў і чаго ад гэтага чакаць не варта.

У артыкуле будзе невялікі конкурс з прызамі.

асаблівасці прафесіі

Сістэмны праграміст, у той спецыфіцы, у якой працаваў я - гэта поўны ўніверсал: мне даводзілася як пісаць код, так і адладжваць жалеза. І часта ўзнікала неабходнасць нешта літаваць самастойна. Перыядычна, здаралася што мае карэкціроўкі па жалезе перадаваліся потым распрацоўшчыкам. Таму, для працы ў гэтай сферы патрабуецца дастаткова добры багаж ведаў, як у галіне лічбавай схематэхнікі, так і ў галіне праграмавання. З-за гэтага, часта сумоўі на вакансію сістэмнага праграміста выглядаюць як пошук спецыяліста па электроніцы.

Праграмісты, хадзіце на сумоўі
Тыповае працоўнае месца сістэмнага праграміста.

На фота вышэй - маё тыповае працоўнае месца ў момант адладкі драйвераў. Лагічны аналізатар паказвае карэктнасць перадаюцца пасылак, асцылограф кантралюе форму франтоў сігналу. Гэтак жа ў кадр не патрапіў jtag-адладчык, які ўжываецца тады, калі стандартныя сродкі адладкі ўжо не спраўляюцца. І з усім гэтым паркам абсталявання неабходна ўмець працаваць.

Часта бывае, што пералітаваць нейкія элементы, выправіць памылкі тапалогіі хутчэй і прасцей самому, чым насіць выраб монтажнику. І тады на тваім працоўным месцы пасяляецца яшчэ і паяльная станцыя.

Яшчэ асаблівасць распрацоўкі на ўзроўні драйвераў і жалеза заключаецца ў тым, што Google не дапамагае. Часта даводзіцца шукаць інфармацыю па сваёй праблеме, а там тры спасылкі, з якіх дзве - гэта твае ж пытанні на нейкім форуме. Або яшчэ горш, калі сустракаеш пытанне такога ж небаракі, які задаваў яго 5 гадоў таму ў спісе рассылання ядра, ды так і не атрымаў на яго адказу. У гэтай працы, акрамя памылак у праектаванні як апаратнай часткі, так і праграмнай, запар і побач сустракаюцца памылкі дакументацыі - гэта напэўна самыя лютыя і непрыемныя праблемы. Бывае некарэктна апісаны рэгістры, альбо наогул адсутнічае апісанне на такія. Такія праблемы вырашаюцца толькі метадам навуковага тыку выпадковых лікаў у пэўныя рэгістры (гэтакі рэверс). Часта бывае яшчэ такое, што ў працэсары закладзены нейкі функцыянал, а акрамя цябе гэты функцыянал ніхто не рэалізоўваў (асабліва калі працэсар новы). І гэта хаджэнне па полі з граблямі, з якіх 70% дзіцячыя. Але калі ёсць дакументацыя, нават з памылкамі - гэта ўжо прагрэс. Досыць часта бывае, што дакументацыі ўвогуле няма, і вось там пачынаецца хаджэнне ўжо па мінных палях, калі гарыць жалеза. І так, такія задачы таксама з поспехам рашаў.

Гутаркі

Маё меркаванне, што на сумоўі варта хадзіць дзесьці не радзей, чым раз у паў года, нават калі вы любіце сваю працу, і не хочаце яе мяняць. Гутарка дазваляе зразумець свой узровень як спецыяліста. Я лічу, што самыя каштоўныя сумоўі – правальныя. Менавіта яны найболей сапраўды паказваюць якія вузкія месцы сваіх ведаў варта падцягнуць.

Яшчэ адна цікавая асаблівасць - гэта якасць сумоўяў. Гэта маё назіранне, і яно не з'яўляецца ісцінай, дапускаю, што мне проста так шанцавала. Калі сумоўе праходзіць па сцэнары:

  • Раскажыце пра сябе;
  • у нас такія задачы;
  • вам падабаецца?

І калі пасля гэтага дыялогу вы адзін аднаму спадабаліся, ты выходзіш на працу, то як правіла кампанія і задачы аказваюцца вельмі прыемнымі і адэкватнымі. Калі сумоўе нагадвае праходжанне 12 колаў пекла: першая гутарка з HR, потым сумоўе з групай праграмістаў, потым дырэктар, яшчэ хатнія заданні і г.д., то як правіла гэта былі правальныя арганізацыі ў якіх я працаваў не вельмі доўга. Ізноў жа – гэта асабістае назіранне, але як правіла занадта вялікая бюракратыя і зацягнуты працэс прыняцця на працу паказвае што такія ж сапраўды працэсы працякаюць усярэдзіне кампаній. Рашэнні прымаюцца павольна і неэфектыўна. Былі і адваротныя сітуацыі, калі былі колы пекла гутарак, а кампанія аказвалася шыкоўнай, і калі пасля бавоўны па руках кампанія аказалася балотам, але гэта рэдкасці.

Калі вы думаеце, што сцэнар: сустрэліся, расказалі пра сябе і прынялі на працу, існуе толькі ў маленькіх кампаніях, то не. Я такое бачыў у вельмі буйных кампаніях, у якіх працуюць больш за сотню чалавек і прадстаўленых на сусветных рынках. Гэта нармальны механізм, тым больш калі ў цябе ёсць багаты паслужны спіс і ёсць магчымасць абтэлефанаваць тваіх папярэдніх працадаўцаў і распытаць пра цябе.

Для мяне вельмі добры паказчык кампаніі, калі просяць паказаць прыклады сваіх праектаў і кода. Адразу паказваецца ўзровень падрыхтоўкі суіскальніка. І, як па мне, з пункту гледжання адбору кандыдатаў - гэта самы эфектыўны спосаб адбору, чым паказныя сумоўі. Па сутнасці на сумоўі можна праваліцца ад хвалявання, ці наадварот вылезці на адрэналіне. Але ў рэальнай рабоце з рэальным задачамі не спраўляцца. І з такім я таксама сутыкаўся, калі сам гутарыў людзей. Прыходзіць спецыяліст, паказвае сябе выдатна, мне спадабаўся, мы яму спадабаліся. І з найпростай задачай мучыўся месяц, у выніку іншы праграміст яе вырашыў за пару дзён. З тым праграмістам прыйшлося растацца.

У гутарках асабліва моцна шаную праграмісцкія задачы. І тыя, якія даводзіцца вырашаць прама падчас сустрэчы, у стрэсе, так і хатнія заданні. Першае паказвае наколькі ты гатовы хутка і дакладна вырашаць задачы ў стрэсавай сітуацыі і аўрале. Другая, паказвае ўзровень тваёй кампетэнцыі і ўменне шукаць інфармацыю і рашаць бягучыя задачы.

Самыя цікавыя месцы працы ў мяне былі ў абаронным комплексе нашай краіны. У працэсе працы даводзілася вырашаць проста фантастычныя задачы, якія камерцыйным праграмістам нават і не сніліся. Суперкампутары, праектаванне маршрутызатараў, розных вузлавых баявых комплексаў - гэта вар'яцка займальна. Калі падчас парада бачыш комплекс, які захоўвае ў сабе твой код, гэта праўда прыемна. Як ні дзіўна, сумоўі ў такія кампаніі, як правіла вельмі простыя, літаральна прыйшоў, спадабаўся - прыняты (напэўна накладваецца спецыфіка вайскоўцаў, якія не любяць размусолваць). Задачы, з якімі мне даводзілася там сутыкацца, сапраўды цікавыя і складаныя. З досведам прыйшло, што на іх добра вучыцца быць якасным сістэмным праграмістам. Недахопы таксама ёсць і гэта нават не нізкая аплата працы. На дадзены момант заробак у абаронным комплексе цалкам годны, з бонусамі і плюшкамі. Як правіла - гэта вялікая бюракратыя, ненармаваны працоўны дзень, бясконцыя аўралы, праца ў вялікім стрэсе. У пэўных выпадках нельга выключыць сакрэтнасць, якая дадае пэўныя праблемы для выезду за мяжу. Плюс, вядома, самадурства начальнікаў-ботаў, і такое, нажаль, таксама бывае. Хоць досвед працы менавіта з прадстаўніком замоўца, у мяне, выключна прыемны. Гэта зборнае ўражанне аб трох розных НДІ і кампаній звязаных з дзяржабаронзаказам.

Задачы на ​​сумоўях

Каб не было непаразуменняў і для таго, каб не падстаўляць кампаніі, у якіх гутарыў, не буду спакушаць лёс і ўказваць іх дадзеныя. Але я ўдзячны за кожную гутарку, за той час якую надалі мне людзі, за магчымасць паглядзець на сябе збоку. Магу толькі сказаць, што задачы былі ў буйныя міжнародныя кампаніі, прадстаўленыя ў розных краінах.

Раскажу самае цікавае: якія задачы даюць на сумоўях. Наогул, самыя частыя пытанні на вакансію сістэмнага праграміста і праграміста мікракантролераў – гэта бітавыя аперацыі, у разнастайных варыяцыях. Таму рыхтуйцеся найболей добра менавіта па дадзеным кірунку.

Другая па палярнасці тэма - гэта паказальнікі, вось гэта прамы павінна ад зубоў адскокваць. Так, каб вас сярод ночы разбудзілі і вы маглі ўсё расказаць і паказаць.

З некалькіх гутарак я ў сваёй галаве пацягнуў пытанні, і прывяду іх тут, бо знаходжу іх дастаткова цікавымі. Наўмысна не даю адказы на гэтыя пытанні, каб чытачы маглі самастойна адказаць на гэтыя пытанні ў каментарах і быў невялікі порах пры праходжанні рэальнай гутаркі.

Пытанні №1

I. На веданне СІ. Што азначаюць наступныя запісы:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Ці ўсе запісы карэктныя?

II. Чаму гэтая праграма выдасць памылку сегментацыі?

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

III. На кемлівасць.

Маецца палка даўжынёй у адзін метр. На яе выпадковым чынам падаюць дзесяць мурашак, якія паўзуць у розныя бакі. Хуткасць руху адной мурашкі 1 м/с. Калі мурашка сустракаецца з іншай мурашкай, то ён разгортваецца і паўзе ў процілеглы бок. Які максімальны час трэба чакаць, каб усе мурашкі ўпалі з палкі.

Наступная гутарка была для мяне правальнай, і я лічу яе самай карыснай у маёй праграмісцкай практыцы. Яно паказала ўсю глыбіню маёй некампетэнтнасці. Да гэтай гутаркі я быў знаёмы з кожным з гэтых пытанняў і яны ўвесь час сустракаліся на маёй практыцы, але неяк не надаваў ім вялікага значэння, адпаведна і не разбіраўся ў іх на пяцёрку. Таму дадзены іспыт, я з ганьбай праваліў. І я вельмі ўдзячны, што такі правал адбыўся, гэта падзейнічала на мяне максімальна выцвярэжальна. Ты думаеш, што ты круты спецыяліст, ведаеш схематэхніку, інтэрфейсы, працу з ядром. І тут на табе рэальныя пытанні і ты паплыў. Дык вось, паглядзім.

Пытанні сумоўя №2

Апаратныя пытанні.

  • Як уладкованыя сістэмныя выклікі linux на мове асэмблера на ARM-працэсары, на х86. У чым адрозненне?
  • Якія сродкі сінхранізацыі бываюць? Якія сродкі сінхранізацыі можна выкарыстоўваць унутры кантэксту перапынення, якія няма і чаму?
  • Чым адрозніваецца шына i2c ад spi?
  • Навошта на шыне i2c стаяць тэрмінатары і які іх намінал?
  • Ці можа інтэрфейс RS-232 працуе ТОЛЬКІ па двух правадах: RX і TX? Тут дам адказ: Аказваецца, што дрэнна, на 9600, але можа!!!
  • А зараз другое пытанне: чаму?
  • Як лепш размяшчаць сігнальныя лініі і харчаванне ў шматслойных поплатках і чаму? Сілкаванне ўнутры пластоў, або сігнальныя лініі ўнутры пластоў? (Пытанне наогул асабліва па схематэхніцы).
  • Навошта ў дыферэнцыяльных ліній дарожкі ідуць усюды разам?
  • Шына RS-485. Звычайна на такой лініі ёсць тэрмінатары. Аднак, у нас схема зорка, з пераменнай колькасцю падключаюцца модуляў. Якія сродкі пазбягання калізій і перашкод трэба выкарыстоўваць?
  • Што такое чырвонае і бінарнае дрэва?
  • Як працаваць з cmake?
  • Пытанні аб зборцы yocto linux.

Задачы на ​​гэтай гутарцы:

1. Напісаць функцыю, якая інвертуе ў uint32_t усе біты. (працу з бітамі вельмі любяць на сумоўях, рэкамендую)
2.

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

Што верне дадзеная функцыя? (рашэнне на паперы, без ЭВМ)

3. Функцыя разліку сярэдняга арыфметычнага двух лікаў int32_t.

4. Якія спосабы вываду ў праграмах, у т.л. у паток памылак.

Трэці адбор быў адносна нядаўна, і я не здзіўлюся калі там да гэтага часу ёсць такая анкета, так што не буду раскрываць кампанію, каб не падстаўляць іх… Але ў агульных рысах прывяду прыклад магчымых пытанняў, і калі вы даведаліся вашыя пытанні, то перадаю прывітанне :).

Пытанні сумоўя №3

  1. Прыводзіцца прыклад кода абыходу дрэва, неабходна распавесці што робіцца ў дадзеным кодзе і паказаць на памылкі.
  2. Напісаць прыклад утыліты ls. З найпростай опцыяй "-l".
  3. Прывесці прыклад як зрабіць статычную і дынамічную лінкоўку. У чым розніца?
  4. Як працуе RS-232? Чым адрозніваецца RS-485 ад RS-232? У чым адрозненне RS-232 ад RS-485 з пункту гледжання праграміста?
  5. Як працуе USB (з пункту гледжання праграміста)?
  6. Пераклад тэхнічнага тэксту з рускай на ангельскую мову.

Паспяховае сумоўе - не заклад паспяховай працы

Гэты раздзел хутчэй нават не для праграмістаў(хоць і для іх таксама), а больш для HR. Найбольш адэкватныя кампаніі не глядзяць скурпулёзна вынікі сумоўяў. Памыляцца нармальна, часцей за ўсё глядзяць менавіта на тое, як чалавек умее вырашаць задачы і разважае.

Адной з ключавых праблем бывае тое, што кандыдат з поспехам вырашае задачы на ​​сумоўях, паказвае сябе выдатным спецыялістам, але зліваецца на першай жа рэальнай задачы. Не буду хітраваць, у мяне такое таксама было. З поспехам прайшоў усе колы пекла, вырашыў усе тэставыя заданні, але ў рэальных умовах праца аказалася не па зубах з-за банальнай неспрактыкаванасці. Патрапіць на борт - гэта яшчэ не самая складаная задача. Самае складанае - гэта ўтрымацца на борце дадзенай кампаніі.

Таму я больш давяраю кампаніям, якія праводзяць простыя сумоўі з кандыдатам і кажуць: пасля першага месяца працы і так будзе зразумела падыходзіце вы нам ці не. Гэта самы адэкватны падыход, так, магчыма крыху дарагі, але затое адразу зразумела хто ёсць хто.

Ёсць і яшчэ адзін варыянт сумоўяў: калі ты яго з поспехам праходзіш, але па выніках сумоўя разумееш што працадаўца поўны неадэкват. Я адразу адмаўляюся ад працы, калі мне прапануюць працаваць як ІП, абяцаючы вялікія прыбыткі. Гэта форма ўхілення ад падаткаў дзеючай арганізацыі, і чаму праблемы працадаўцы павінны хваляваць мяне, як праграміста? Іншы варыянт, гэта розныя дзяржструктуры. У мяне было сумоўе, па выніках якога мне прапанавалі добры заробак, але сказалі што папярэдні праграміст звольніўся, захварэў, памёр, сышоў у запой з-за нагрузкі і ваш працоўны дзень пачынаецца ў 8 раніцы. З такога месца таксама бег так, што пяткі зіхацелі. Так, HR звернеце ўвагу, што праграмісты гатовыя адмовіцца нават ад самай смачнай вакансіі, калі працоўны дзень павінен пачынацца рана раніцай.

У канцы прывяду выдатнае відэа адбору праграміста, скрыншот якога прыведзены ў пачатку гэтага артыкула. Такая гутарка ў мяне таксама была і не адзін раз. Калі вы бачыце самадурства на этапе пытанняў, то паважайце сябе, устаньце, вазьміце рэчы і сыйдзіце - гэта нармальна. Калі HR і кіраўнік на сумоўі самасцвярджаюцца за кошт вас - гэта кажа аб таксічнасці кампаніі і вам там працаваць не варта, калі толькі вы не любіце неадэкватных начальнікаў.

Высновы

Праграмісты, хадзіце на сумоўі! Прычым старайцеся ісці заўсёды на павышэнне. Дапушчальны, калі вы атрымліваеце N грошай, то ідзіце на сумоўе мінімум на аплату N*1,2, а лепш N*1,5. Нават калі вы не возьмеце гэтую вакансію адразу, то зразумееце што ж трэба для гэтага ўзроўню аплаты.
Мае назірання, паказалі што вырашае добрае веданне англійскай мовы, дастаткова багаты досвед працы ў галіны і ўпэўненасць у сабе. Апошняя - гэта галоўная якасць, як і ўсюды ў жыцці. Як правіла, больш упэўнены кандыдат можа больш паспяхова прайсці сумоўе, нават пры наяўнасці большай колькасці памылак, чым выдатны, але больш сарамлівы і ініцыятыўны суіскальнік. Удачы на ​​сумоўях!

P/S Конкурс

Калі ў вас ёсць цікавыя прыклады задач, якімі вас загрузіў HR, то welcome у каментары. Мы падрыхтавалі невялікі конкурс — умовы простыя: вы пішаце самае незвычайнае заданне, якое ў вас было на інтэрв'ю, чытачы праводзяць яго ацэнку (плюсам), а мы праз тыдзень падводзім вынікі і ўзнагароджваем пераможцу вясёлымі нішцякамі.

Праграмісты, хадзіце на сумоўі

Праграмісты, хадзіце на сумоўі

Крыніца: habr.com

Дадаць каментар