ThoughtWorks бағдарламасына қалай кірдім немесе сұхбат үлгісі

ThoughtWorks бағдарламасына қалай кірдім немесе сұхбат үлгісі

Сізге жұмысты ауыстырғалы жатқанда және сұхбаттан өту қажеттілігі туындағанда, ең алдымен «сұхбатқа дайындалу керек» деп ойлайтыны таңқаларлық емес пе? HackerRank-те мәселелерді шешіңіз, кодтау сұхбатын оқыңыз, ArrayList қалай жұмыс істейтінін және оның LinkedList-тен айырмашылығын есте сақтаңыз. Иә, олар сұрыптау туралы да сұрауы мүмкін және жылдам сұрыптау ең жақсы таңдау болуы мүмкін деп айту кәсіпқойлыққа жатпайтыны анық.
Бірақ күте тұрыңыз, сіз күніне 8 сағат бағдарламалайсыз, қызықты және тривиальды емес есептерді шешесіз, ал жаңа жұмысыңызда плюс немесе минус бірдей нәрсені жасайсыз. Бірақ соған қарамастан, сұхбаттан өту үшін сізге қосымша дайындалу керек, тіпті күнделікті дағдыларыңызды шыңдамай, қазіргі жұмысыңызда қажет емес және келесі жұмысыңызда қажет болуы екіталай нәрсені үйрену керек. Информатика біздің қанымызда бар, түн ортасында оятсаңыз, жастық қапқа көзімізді жұмып жазуға міндеттіміз, тіпті есін жимай, ағаштың енінде серуендеуге міндеттіміз, мен Егер мен циркке жұмысқа тұрсам, және менің негізгі трюкім дәл осы болар еді деп жауап береді - иә, келісемін. Бұл дағдыны сынау керек.

Неліктен сіздің қазіргі жұмысыңызға қатысы жоқ дағдыларды сынау керек? Бұл сәнге айналғаны үшін бе? Google мұны істегендіктен бе? Немесе сіздің болашақ топ жетекшісі сұхбатқа дейін барлық сұрыптау әдістерін үйренуі керек болғандықтан және енді ол «әрбір жақсы бағдарламашы жолда палиндромды табуды жатқа білуі керек» деп санайды.

Сіз Google емессіз (c). Google нені көтере алады, оны қарапайым компаниялар көтере алмайды. Google өз қызметкерлерінің деректерін талдай келе, олимпиада тәжірибесі бар инженерлер оның нақты тапсырмаларын жақсы шешеді деген қорытындыға келді. Сонымен қатар, олардың таңдау процесін жобалау арқылы олар бірнеше жақсы инженерлерді жалдамауы мүмкін тәуекелге бара алады, өйткені олар математикалық есептерді оңай шеше алмайды. Бірақ бұл олар үшін проблема емес, Google-да жұмыс істегісі келетіндер көп, лауазым жабылады.
Енді терезеге қарап көрейік, егер сіздің кеңсеңіздің алдында сіз үшін жұмыс істегісі келетін инженерлер әлі шатыр лагерін құрмаған болса және сіздің әзірлеушілеріңіз келесі көктемгі аннотацияны орнату керектігі туралы stackoverflow-ты жиі іздейтін болса, рейтингтік алгоритмдердің күрделілігінен гөрі, Google-ды көшіру керек пе деп ойлайтын уақыт келді.

Егер бұл жолы Google сәтсіздікке ұшырап, жауап бермесе, не істеу керек? Әзірлеуші ​​жұмыста не істейтінін тексеріңіз. Сіз әзірлеушілерде нені бағалайсыз?
Кімді жалдағыңыз келетініне критерийлер жасаңыз және дәл осы дағдыларды сынайтын сынақтарды жасаңыз.

ThoughtWorks

ThoughtWorks-тің бұған қандай қатысы бар? Міне, мен өзім үшін үлгі сұхбат үлгісін таптым. ThoughtWorks деген кім? Бір сөзбен айтқанда, бұл Қытайдан, Сингапурдан бастап Америка континенттеріне дейін бүкіл әлемде кеңселері бар жоғары деңгейлі консалтингтік компания, ол шамамен 25 жыл бойы даму саласында кеңес беріп келеді, Мартин басқаратын өзінің ғылым бөлімі бар. Фаулер. Бағдарламалық жасақтама инженері үшін міндетті түрде оқылатын 10 кітаптың тізімін іздесеңіз, олардың 2-3-ін ThoughtWorks жігіттері жазады, мысалы, Мартин Фаулердің рефакторингі және Микросервистерді құру: Сэмнің ұсақ түйіршікті жүйелерін жобалау. Ньюман немесе эволюциялық архитектураларды құру
Патрик Куа, Ребекка Парсонс, Нил Форд.

Компанияның бизнесі айтарлықтай қымбат қызметтерді ұсынуға негізделген, бірақ тұтынушы тәжірибеден, ішкі стандарттардан және, әрине, адамдардан тұратын керемет сапа үшін төлейді. Сондықтан мұнда дұрыс адамдарды жұмысқа алу өте маңызды.
Қандай адамдар дұрыс? Әрине, әркім үшін әртүрлі. ThoughtWorks әзірлеуші ​​​​бизнес үлгісінің ең маңызды критерийлері мыналар екенін анықтады:

  • Жұптық жұмыстарды дамыту қабілеті. Бұл тәжірибе немесе шеберлік емес, қабілет. Жұптық бағдарламалаумен 5 жыл айналысқан адамдар келеді деп ешкім күтпейді, бірақ басқалардың пікірін қабылдап, тыңдай білу – бұл қажетті дағды.
  • Тесттерді жазу мүмкіндігі және ең дұрысы TDD тәжірибесі
  • SOLID және OOP түсініп, оларды қолдана білу.
  • Өз пікіріңізді білдіріңіз. Кеңесші ретінде сіз клиенттің әзірлеушілерімен, басқа кеңесшілермен жұмыс істеуіңіз керек, егер адам бірдеңені қалай жақсы істеу керектігін білсе, бірақ оны басқа командаға жеткізе алмаса, көп пайда жоқ.

Енді үміткердің осы нақты дағдыларын бағалау маңызды. Міне, мен ThoughtWorks-те сұхбат алу тәжірибесі туралы айтқым келеді. Мен Сингапурға барып, тапсырғанымды бірден айтамын, бірақ рекрутинг процесі біртұтас және әр елде айтарлықтай ерекшеленбейді.

0-кезең. HR

Әдеттегідей, HR-мен 20 минуттық сұхбат. Мен оған тоқталмай-ақ қояйын, мен компаниядағы даму мәдениеті, TDD не үшін пайдаланатыны, жұптық бағдарламалау туралы 15 минут сөйлесе алатын HR қызметкерін ешқашан кездестірмегенімді айтайын. Әдетте, HR бұл сұраққа жауап береді және олардың процесі қалыпты екенін айтады: әзірлеушілер әзірлейді, тестерлер сыналады, менеджерлер жүргізеді.

1-кезең. Сіз OOP, TDD бойынша қаншалықты жақсысыз?

Сұхбат басталардан 1.5 сағат бұрын маған Mars Rover тренажерын жасау тапсырмасы жіберілді.

Марс роверінің миссиясыРобот-роверлердің тобын NASA Марстағы үстіртке қондыруы керек. Бір қызық төртбұрышты бұл үстіртті роверлер шарлауы керек, сонда олардың борттық камералары Жерге қайтару үшін айналадағы жердің толық көрінісін ала алады. Ровердің орны мен орны x және y координаттарының тіркесімімен және төрт негізгі компас нүктесінің бірін көрсететін әріппен көрсетіледі. Навигацияны жеңілдету үшін үстірт торға бөлінген. Мысал позициясы 0, 0, N болуы мүмкін, бұл ровер төменгі сол жақ бұрышта және солтүстікке қарап тұрғанын білдіреді. Роверді басқару үшін NASA қарапайым әріптер тізбегін жібереді. Мүмкін әріптер: 'L', 'R' және 'M'. «L» және «R» роверді ағымдағы орнынан қозғалмай, сәйкесінше 90 градусқа солға немесе оңға айналдырады. «M» бір тор нүктесін алға жылжытуды және сол тақырыпты сақтауды білдіреді.
(x, y) нүктесінен солтүстікке қарай орналасқан квадрат (x, y+1) деп есептейік.
Кіріс:
Кірістің бірінші жолы - үстірттің жоғарғы оң жақ координаталары, төменгі сол жақ координаталар 0,0 деп қабылданады.
Кірістің қалған бөлігі - орналастырылған роверлерге қатысты ақпарат. Әрбір ровердің екі кіріс жолы бар. Бірінші жол ровердің орнын береді, ал екінші жол - роверге үстіртті қалай зерттеу керектігін айтатын нұсқаулар тізбегі. Орын х және у координаталарына және ровердің бағдарына сәйкес келетін бос орындармен бөлінген екі бүтін сан мен әріптен тұрады.
Әрбір ровер дәйекті түрде аяқталады, яғни бірінші ровер қозғалмайынша екінші ровер қозғала алмайды.
ШЫҒЫРУ:
Әрбір ровердің шығысы оның соңғы координаттары мен тақырыбы болуы керек.
ЕСКЕРТПЕЛЕР:
Жоғарыдағы талаптарды орындаңыз және шаңсорғыштың жұмыс істейтінін оған бірлік сынақтарын жазу арқылы дәлелдеңіз.
Пайдаланушы интерфейсінің кез келген пішінін жасау мүмкін емес.
TDD (Test Driven Development) әдісін қолдану арқылы мәселені шешу артықшылық береді.
Қол жетімді қысқа уақыт ішінде біз толықтықтан гөрі сапаға көбірек көңіл бөлеміз.
*Маған жіберілген тапсырманы орналастыра алмаймын, бұл бірнеше жыл бұрын берілген ескі тапсырма. Бірақ маған сеніңіз, негізінен бәрі бұрынғысынша қалады.

Бағалау критерийлеріне ерекше назар аударғым келеді. Канша рет аудит кезінде кандидат үшін маңызды нәрселер мүлдем маңызды емес және керісінше жағдайға тап болдыңыз. Барлығы сіз сияқты ойламайды, бірақ көп адамдар сіздің құндылықтарыңызды нақты айтылған болса, қабылдап, ұстана алады. Сонымен, бағалау критерийлерінен бұл кезеңдегі ең маңызды дағдылар бірден көрінеді

  • TDD;
  • OOP пайдалану және өңделетін кодты жазу мүмкіндігі;
  • жұптық бағдарламалау қабілеттері

Сонымен, маған 1.5 сағатты код жазуға емес, тапсырманы қалай орындайтынымды ойлауға жұмсау керектігі ескертілді. Біз кодты бірге жазамыз.

Біз телефонмен сөйлескен кезде жігіттер кім екенін, немен айналысатынын қысқаша айтып, дамуды бастауды ұсынды.

Бүкіл сұхбат барысында мен ешқашан сұхбат алып жатқандай сезінген емеспін. Командада кодты әзірлеп жатырсыз деген сезім бар. Егер сіз бір жерде тұрып қалсаңыз, олар көмектеседі, кеңес береді, талқылайды, тіпті оны қалай жақсы істеу керектігі туралы бір-бірімен дауласады. Сұхбатта мен JUnit 5-те әдіс Ерекше жағдайды жіберетінін қалай тексеру керектігін ұмытып қалдым - олар тестті жазуды жалғастыруды ұсынды, ал олардың бірі мұны қалай жасау керектігін іздеді.

Сұхбаттан кейін бірнеше сағат өткен соң мен конструктивті пікірлер алдым - маған не ұнады, не ұнамады. Менің жағдайда, мен нөлдік нысанға балама ретінде Sealed сыныптарын қолданғаным үшін мақталды; кодты жазбас бұрын, мен роверді қалай басқарғым келетінін псевдокодпен жаздым және осылайша, кем дегенде роботтың API-ге қатысатын сыныптардың эскизін алдым.

2-қадам: бізге айтыңыз

Сұхбаттан бір апта бұрын мені қызықтыратын кез келген тақырып бойынша презентация дайындауды тапсырды. Пішімі қарапайым және таныс: 15 минут презентация, 15 минут сұрақтарға жауап беру.
Мен Боб ағайдың «Таза архитектураны» таңдадым. Тағы да бір-екі адамнан сұхбат алдым. Бұл менің ағылшын тілінде таныстырудағы алғашқы тәжірибем болды және, мүмкін, егер мен стресстік жағдайда болсам, мен оны жеңе алмас едім. Бірақ тағы да айтамын, мен бірде-бір рет сұхбатта болғандай сезінген емеспін. Барлығы әдеттегідей - мен оларға айтамын, олар мұқият тыңдайды. Дәстүрлі сұрақ-жауап сессиясы да сұхбат сияқты емес, менің презентациямда сұрақтар «батып кету» үшін емес, оларды шынымен қызықтыратын сұрақтар қойылғаны анық болды.

Сұхбаттан кейін бір-екі сағат өткен соң мен кері байланыс алдым – презентация өте пайдалы болды және олар тыңдағанды ​​шынымен ұнатты.

3-кезең. Өндіріс сапасының коды

Бұл техникалық сұхбаттардың соңғы кезеңі екенін ескертіп, менден кодты үйдегі өндіріске дайын күйге келтіруді, содан кейін кодты қарауға жіберуді және тапсырмаға қойылатын талаптар өзгеретін және код өзгеретін сұхбаттарды жоспарлауды сұрады. өзгертуді талап етеді. Алға қарайтын болсам, кодты тексеру көзсіз жүргізіліп жатыр, рецензенттер үміткердің қандай лауазымға жүгінетінін білмейді, оның түйіндемесін көрмейді, тіпті аты-жөнін де көрмейді.

Телефон шырылдады, тағы да монитордың ар жағында бір-екі жігіт отыр екен. Барлығы бірінші сұхбаттағыдай: ең бастысы - TDD туралы ұмытпау, не істеп жатқаныңызды және неге екенін айтыңыз. Егер сіз бұрын TDD-мен айналыспаған болсаңыз, мен оны компанияларда қажет болғандықтан емес, сіздің өміріңізді айтарлықтай жеңілдететіндіктен, егер қаласаңыз, стресс деңгейін төмендететіндіктен бірден бастауды ұсынамын. Тек шолғыш арқылы шығаруға болатын қатені түзету құралымен қалай ашулы іздеу керек болғанын есіңізде ме, бірақ оны сынақтармен қайта жасай алмайсыз ба? Енді сіз сұхбат кезінде мұндай қатені ұстауыңыз керек деп елестетіп көріңіз - сізге бірнеше сұр шашқа кепілдік беріледі. TDD арқылы не аламыз? Біз кодты өзгерттік және күтпеген жерден қазір сынақтардың қызыл екенін түсіндік, бірақ біз бірінші рет анықтай алмаған қате қандай? Жарайды, сұхбат берушілерге «Оп» дейміз, Ctrl-Z пернелерін басып, алға қарай шағын қадамдар жасай бастаймыз. Иә, сіз өзіңізде TDD қолдана отырып дамыту қабілетін дамытуыңыз керек, сіздің сынақтарыңыз жарты күн бойы қызыл емес, тұрақты жасыл болуы үшін мақсатқа жету мүмкіндігін дамытуыңыз керек, өйткені «сізде рефакторинг көп». Бұл дұрыс кодты жазу немесе өнімді код жазу сияқты дағды.

Сонымен, кодты қаншалықты жақсы өзгертуге болатындығы сіз қандай дизайннан бастау керек екеніне, оның қаншалықты қарапайым екеніне және сынақтарыңыздың қаншалықты жақсы екеніне байланысты.

Сұхбаттан кейін мен бірнеше сағат ішінде кері байланыс алдым. Осы кезеңде мен аяқталуға жақын екенін және «Фаулермен кездесуге» өте аз уақыт қалғанын түсіндім.

4-кезең. Финал. Техникалық сұрақтар жеткілікті. Сіздің кім екеніңізді білгіміз келеді!

Шынымды айтсам, сұрақтың бұл тұжырымы мені біраз таң қалдырды. Менің қандай адам екенімді бір сағаттық әңгімеден қалай түсінуге болады? Одан да, мен ана тілім емес, шынын айтсам, өте сұм, тілім байланған тілде сөйлейтінімді қалай түсінесіңдер. Алдыңғы сұхбаттарда жеке маған сұрақтарға жауап беруден гөрі сөйлесу оңай болды, ал акцент кінәлі болды. Интервьюерлердің кем дегенде біреуі азиялық болды - және олардың акценті, айталық, еуропалық құлаққа біршама тән. Сондықтан мен проактивті тәсілді қабылдауды шештім - өзім туралы презентация дайындаңыз және сұхбаттың басында осы презентациямен өзім туралы сөйлесуді ұсынамын. Егер олар келіссе, мен үшін кем дегенде сұрақтар аз болады, егер олар ұсынысты қабылдамаса, менің өмірімнің 3 сағаты презентацияға кеткен соншалықты жоғары баға емес. Бірақ презентацияңызда не жазу керек? Өмірбаяны – Сол жерде туып-өскен, сол кезде мектепте оқыған, университет бітірген – бірақ кімге қарайды?

Google арқылы Thoughtworks мәдениеті туралы аздап пайдалансаңыз, сіз Мартин Фаулердің [https://martinfowler.com/bliki/ThreePillars.html] мақаласын таба аласыз, онда 3 тірек: тұрақты бизнес, бағдарламалық жасақтаманың тамашалығы және әлеуметтік әділеттілік сипатталады.

Бағдарламалық жасақтаманың тамаша деңгейі мен үшін тексерілді делік. Тұрақты бизнес пен әлеуметтік әділеттілікті көрсету керек.

Оның үстіне мен соңғысына тоқталуды жөн көрдім.

Алдымен мен оған ThoughtWorks неліктен екенін айттым - мен Мартин Фаулердің блогын колледжде оқып жүргенімде, сондықтан таза кодты жақсы көретінмін.

Жобаларды әр түрлі қырынан көрсетуге болады. Сондай-ақ ол пациенттердің өмірін жеңілдететін, тіпті, қауесеттерге сәйкес, бір адамның өмірін сақтап қалған медицинаға арналған бағдарламалық жасақтаманы жасады. Мен сондай-ақ банктерге арналған бағдарламалық қамтамасыз етуді әзірледім, ол да азаматтардың өмірін жеңілдетті. Әсіресе, бұл банкті ел халқының 70 пайызы пайдаланса. Бұл Сбербанк туралы емес, тіпті Ресей туралы да емес.

Мен туралы білгіңіз келе ме? ЖАРАЙДЫ МА. Менің хоббиім - фотосурет, 10 жыл бойы қолымда камера ұстадым, көрсетуге ұялмайтын фотосуреттер бар. Сондай-ақ, бір кездері мен мысық баспанасына көмектестім: мен тұрақты баспанаға мұқтаж мысықтарды суретке түсірдім. Жақсы фотосуреттермен мысықты орналастыру әлдеқайда оңай. Мен жүз мысықты суретке түсірген шығармын :)

Соңында менің презентациямның 80% мысықтарға толы болды.

Тұсаукесерден кейін бірден HR маған сұхбаттың нәтижелерін әлі білмейтінін жазды, бірақ бүкіл кеңсе мысықтарға таң қалды.

Сайып келгенде, мен кері байланыс күттім - мен барлығын тұлға ретінде қанағаттандырдым.

Бірақ соңғы әңгіме барысында HR әдептілікпен Әлеуметтік әділеттілік өте жақсы және қажет екенін, бірақ барлық жобалар мұндай емес екенін айтты. Және ол мені қорқытты ма деп сұрады. Жалпы, мен әлеуметтік әділеттілікке сәл асып кеттім, солай болады :)

Нәтиже

Нәтижесінде, мен Сингапурда Thoughtworks-те бірнеше ай бойы жұмыс істеп жатырмын және мен мұнда тым көп компаниялар көктемнен гөрі көбірек білімге қарамастан, кодтау үшін жапырақтар мен тақтаны қолданып, Google-дың «ең жақсы сұхбат тәжірибесін» қолданып жатқанын көріп отырмын. Жұмыста Symfony, RubyOnRails (қажеттің астын сызу) қажет емес. Инженерлер сұхбатқа дейін «дайыну» үшін бір апта демалыс алады.

Thoughtworks-те үміткерге қойылатын адекватты талаптардан басқа, келесі принциптер бірінші орында:
Сұхбат алу қуанышы. Оның үстіне екі жаққа да. Шынында да, егер сіз ең жақсы кадрларды алғыңыз келсе (және кім жоқ?), онда сұхбат құлдар таңдалатын нарық емес, жұмыс беруші де, үміткер де бір-бірін бағалайтын шоу. Ал егер үміткер компаниямен жағымды эмоцияларды байланыстырса, ол осы компанияны таңдауы мүмкін.

Біржақтылықты азайту үшін бірнеше сұхбат берушілер. Thoughtworks-те жұптық бағдарламалау іс жүзінде стандарт болып табылады. Ал егер бұл тәжірибені басқа салаларда қолдануға болатын болса, TW мұны істеуге тырысады. Әр кезеңде сұхбатты 2 адам жүргізеді. Осылайша, әрбір адамды кем дегенде 8 адам бағалайды, ал TW әртүрлі ортасы, әртүрлі бағыттары (тек техникалық емес) және жынысы бар сұхбаткерлерді таңдауға тырысады.

Сайып келгенде, жұмысқа қабылдау туралы шешім кем дегенде 8 адамның пікірі негізінде қабылданады және ешкімнің шешуші дауысы болмайды.

Атрибутқа негізделген жалдау Үміткердің ұнатуы немесе ұнатпауы негізінде шешім қабылдаудың орнына, бағаланатын атрибуттарды қамтитын әрбір рөл мен әрбір кезең үшін пішін әзірленеді. Сонымен қатар, бағалау кезінде белгілі бір дағдыдағы тәжірибені емес, оны қолдану қабілетін бағалау ұсынылады. Осылайша, егер үміткер TDD сияқты қандай да бір дағдыларды қолдана алмаса, бірақ соған қарамастан ол оларды қолдануға тырысса, оларды қалай дұрыс пайдалану туралы кеңестерді тыңдаса, оның әңгімелесуден өтуге барлық мүмкіндігі бар.

Білім туралы сертификаттар талап етілмейді TW информатика бойынша ешқандай сертификаттауды немесе білімді қажет етпейді. Тек дағдылар бағаланады.

Бұл мен дайындалу қажет болмаған шетелдік компаниялардан алған алғашқы сұхбатым. Әр кезеңнен кейін мен шаршаған жоқпын, керісінше, озық тәжірибелерді қолдана алатыныма, монитордың арғы жағындағы адамдар оны бағалап, күнделікті қолданатынына қуандым.

Бірнеше айдан кейін менің үміттерім толығымен ақталды деп айта аламын. ThoughtWorks кәдімгі компаниядан несімен ерекшеленеді? Тұрақты компанияда сіз жақсы әзірлеушілер мен жақсы адамдарды таба аласыз, бірақ TW-де олардың шоғырлануы диаграммалардан тыс.

ThoughtWorks-ке қосылуға қызығушылық танытсаңыз, біздің ашық позицияларымызды көре аласыз осында
Мен сондай-ақ қызықты бос орындарға назар аударуды ұсынамын:
Жетекші бағдарламалық қамтамасыз ету инженері: Германия, Лондон, Мадрид, Сингапур
Аға бағдарламалық қамтамасыз ету инженері: Сидней, Германия, Манчестер, Бангкок
Бағдарламалық қамтамасыз ету инженері: Сидней, Барселона, Милан
Аға деректер инженері: Милан
Сапа талдаушысы: Германия Қытай
Инфрақұрылым: Германия, Лондон, Чили
(Шынымды айтсам, сілтеме сілтеме сілтемесі, егер сіз TW сайтына кірсеңіз, мен жақсы бонус аламын). Өзіңізге ұнайтын кеңсені таңдаңыз, өзіңізді Еуропамен шектеудің қажеті жоқ, әр 2 жыл сайын TW сізді басқа елге көшіруге қуанышты болады, өйткені... бұл ThoughtWorks саясатының бөлігі, сондықтан мәдениет таралады және біркелкі болады.

Түсініктемелерде сұрақтар қоюдан тартынбаңыз немесе маған ұсыныстар сұраңыз.
Тақырып қызықты болып көрінсе, ThoughtWorks-те жұмыс істеудің қандай екенін және Сингапурдағы өмірдің қандай екенін жазамын.

Ақпарат көзі: www.habr.com

пікір қалдыру