Mock Interview #1: Kacper, czyli „nie wiem” jest lepsze niż pięć minut pierdolenia
Po co te rozmowy?
Siema. Bo zapytałem samego siebie
“co lubie w życiu robić?”A potem zacząłem to robić. (heh)
Rekrutuję technicznie już 5 lat, zrekrutowałem 4 zespoły frontend/fullstack naprawdę zajebistych ludzi. I oczywiście dużo “osobnych osób”.
A teraz najlepsze - baaaardzo to lubie i uważam, że zawsze potrafię znaleźć value w kandydacie. (no dobra, z małymi wyjątkami na tych gagatków co oszukują - to akurat jest lipa)
I wymyśliłem sobie taki format, że będę szukał tej wartości w kandydatach robiąc Mock Interview, na swój autorski™ sposób, ukierunkowane na frontend/fullstack, z którego kandydat wynosi szczery feedback:
- Na temat przebiegu - komentarz do każdego, jednego pytania, które zadałem
- Co poszło dobrze
- Co nie poszło
- Co dalej robić, bo jest zajebiste
- Co przestać robić i
- Moją rekomendację pt. “co dalej”.
I taki feedback trochę się różni w porównaniu z:
Tym razem zdecydowaliśmy się pójść naprzód z innym kandydatem
Nie?
No, także zapraszam poniżej, zobaczycie, jak to wygląda w praktyce.
Zaczęliśmy od “Poznajmy się”
I dowiedziałem się, że Kacper jest samoukiem, juniorem.
Pierwsza myśl - dlaczego sam to sobie zrobił, że akurat frontend. Jest tyle pięknych zajęć, w których nikt nie woła na Ciebie “frontaś” i nie myśli, że Twoja praca jest bezwartościowa. No ale ok…
A tak poważnie to szacun - gość ciśnie też swoje poboczne projekty, które nie są TODO listami. A to już dużo.
I też fajnie, bo jednym z bloków Mock Interview jest Code Review.
Kolega z zespołu krzyczy - co robisz?
Niestety, ale robimy też z kandydatami część miękką. (bo okazuje się, że nie samą piwnicą człowiek żyje)
Ale nie taką, “gdzie się widzisz za 5 lat”, bo o to pyta każdy.
Ja pytam:
gdzie się widzisz za 7 lat.
I odpowiedź nie jest taka prosta, bo to tak, jakbyście musieli sobie zwizualizować, gdzie się widzicie za 5 lat, a potem jeszcze za 2.
A tak serio - tutaj Kacper mega rozsądnie odpowiedział na pytanie:
Kolega z zespołu uważa, że jego rozwiązanie jest lepsze niż Twoje - co robisz?
I poszedł w:
- wymianę argumentów
- plusy i minusy obu rozwiązań
- rozwiązanie pośrednie
Klasa.
Po co Ci ten husky?
Kacper ma go w swoich projektach - więc pozwoliłem sobie spersonalizować jedno pytanie z bloku sytuacyjnego i zapytać, jakie Kacper ma argumenty za wdrożeniem takiego Husky’ego (np. testy + linter na hooku pre-push)
No i mamy pierwsze schodki:
Bo to zaoszczędzi czas
Tak, aczkolwiek nie.
Nie, bo na każdym pushu będziemy odpalać testy i lintera - a to kosztuje czas.
Tak, bo dzięki temu szybciej dowiemy się, że coś nie jest no yes. A to zaoszczędzi czas. Ten potencjalnie zmarnowany potem.
Ale po naprowadzeniu okazało się, że Kacper doskonale wiedział, ale nie powiedział. I dlatego warto drążyć temat.
Blok techniczny (biały, A4, 10 kartek)
Przechodzimy do mięska.
Mówię:
Szybko - różnica między interferjsem, typem, klasą, any, kurwa, unknown, never. Nie wiesz? napraaaawdę?
Nie no, nie zrobiłbym tego.
Tak serio - zapytałem:
Po co TypeScript, skoro jest JavaScript?
I Kacper mnie lekko zaskoczył, bo mówi mniej więcej tak:
… i np. blokuje użytkownikowi żeby wysłał number, bo tam będzie string
No i ja blokuje tę odpowiedź i naprowadzam, że chodzi o compile time kontra runtime i że TypeScript załatwia to pierwsze, a na to drugie nie ma wpływu (sam w sobie).
Potem Kacper dostał w feedbacku trochę grubsze wyjaśnienie i jak spełnić ten case, o którym on mówił. Zod zodstał polecony w tym celu. (przestawiłem szyk zdania na nieczytelny tylko dla tej gry słownej, warto było)
Testy
Kacper wylistował, że zna dużo bibliotek do testowania.
- RTL
- Jest
- Nie ma (przepraszam, musiałem)
No i postanowiłem zaatakować z zaskoczenia:
A co testujesz? Jak testujesz?
Od kogo z tego Mokotowa skąd z tego Mokotowa
A Kacper na to:
A np. to, że jak wpiszę coś do inputa to czy to się wyświetli w tym inpucie
Czyli to dokładnie ten scenariusz, który input ma przede wszystkim pokrywać. I chyba nie musimy się upewniać o tym w naszej aplikacji.
Pogadaliśmy trochę i po naprowadzeniu - Kacper bardzo szybko ogarnął co warto testować, a czego nie.
Biblioteka or not to biblioteka
Krótka piłka:
Kacper, kiedy warto wciągnąć do akcji gotową libkę, a kiedy lepiej napisać coś od podstaw samemu
I dostaję 2 argumenty (spoiler alert: trafne)
przyspiesza kod, nie trzeba tworzyć miliona plików
gdyby to było cos prostego to raczej nie
A coś jeszcze?
Nie. To chyba tyle.
Zapamiętajmy ten moment - bo pomimo niepełnej odpowiedzi - mamy do czynienia z czymś zajebistym.
Kontynuując - brakowało mi trochę aspektu security i wsparcia (w sensie - ze mną wszystko OK, chodzi o wsparcie biblioteki, kiedy ktoś ostatnio w ogole coś tam pushował. Dobra, nieważne)
Mega wartość kandydata
Wjeżdżam bez pytania z pytaniem pt.:
A zwracasz uwagę na bundle size?
A Kacper mówi:
Nie. I nie będę się wypowiadał w temacie bo nie ma sensu zmyślać.
Oszalałem. Mówie:
Ja pierdolę, jakie to jest piękne
Gość nie przedłużał, nie wymyślał, że spóźnił mu się autobus i tam był taki Paweł i pojechali jeszcze do Biedronki.
NIE.
Po prostu: “nie wiem mordo, lećmy dalej”.
I to ma naprawdę ogromną wartość.
Jeśli mogę subtelnie zachęcić: nie pierdol. Bo to słychać i oboje udajemy, że nie udajemy, że udajemy. Bez sensu.
Aa, no i Kacper oczywiście dostał wskazówki gdzie i po co zacząć z tymi bundle’ami - także znając go - pewnie w trakcie pisania tego posta - teraz już wie.
User się spłakał - aplikacja nie działa
Tak zaczęliśmy blok produktowy.
Tak, od usera, który płacze, bo user zawsze płacze. Nawet jak jest dobrze. (ze szczęścia)
User płacze, że “lista userów jest wolna”. Jak myślisz dlaczego?
Pytanie otwarte. Jak biznes na refactoring.
Kacper mówi:
… może być tam jakieś duże zapytanie do bazy danych
Odpowiedź - dobra, ale kolejność - zajebista. Zacznijmy rozmowę od obwinienia backendu - da się piękniej?
Mówię dobra, ciekawe, a co by z tym zrobił?:
A co byś z tym zrobił?
K:
Sprawdziłbym najpierw u siebie czy problem występuje
Bingo. Bo jak nie backend jest winny to user. DUMA.
Ale ja to troche jak w maczku - “ma pan apke? a to flurry to z kit-katem czy lionem, a polewa truskawkowa, karmelowa czy czekoladowa, a cola zero czy zwykła”
Oczywiście, że cola zero, a obok 3000 kcal, ale cola zero.
No i czepiam się dalej:
A gdyby rzeczywiście tych rekordów było sporo, to co byś zrobił?
K:
lazy-loading
O - i tu niestety nie.
I tak sobie myślę - może wezmę go na stronę…
a kojarzysz paginację?
I klasycznie - Kacpered:
Nie, nie będę zmyślał.
Bug objawił się tylko userowi
Słuchaj:
user płacze, że błąd, a u Ciebie nie ma błędu. Jak to?
K:
…kwestia przeglądarki może być
No dobra, jest to jakaś możliwość. Statystycznie pewnie zdarza się to częściej niż 3r4 (sorry, kot przebiegł mi po klawiaturze, poważnie).
Nieważne. Ważne, co było dalej:
sprawdziłbym jaki błąd sie wyświetla
No tak, tylko… jak? Przecież u Ciebie się nie wyświetla.
Spróbowałbym wymusić taką samą sytuację u siebie
I w sumie spoko, tylko, że problem był wszędzie indziej niż na localhost. Ale było dobrze. Tylko brakowało tego rozróżnienia środowisk local kontra nie-local. (sorry za tę kontrę, ale zainstalowałem jakiś plugin i jak próbuje wpisać “vs” to on mnie roastuje, że to zbędne zangielszczanie dobrych polskich słów, np. kontra. I ja to robie, żeby mnie nie roastował)
Code Review
Jestem z Łodzi i tak sobie myślę, że zawsze jak jadę na Bałuty - to są tam jakieś typy…
No i wchodze w projekt Kacpra a tam:
src/types.ts
I pytam
(flashbacki z Limanowskiego)dlaczego jest tak dużo typów w jednym miejscu?!
A Kacper, że podzieliłby to, gdyby było ich więcej.
A jak?
K:
No gdyby było więcej niż 10 to bym się zastanowił
Me:
Dobra, to gdyby było 30, jakbyś to podzielił
K:
No podzieliłbym na funkcjonalność jaką miałyby pełnić
No - i dlatego warto drązyć (kolejny raz). Gdybym nie dopytał, to nie wydobyłbym value i błędnie uznał, że kandydat nic nie wie. A jednak wie dużo.
Nie wiem, skąd on wie, że jak jest dużo typów, to można ich podzielić, bo tak to dokładnie działa w Łodzi. Nvm.
Podsumowując
Ta rozmowa była grubsza, ale oczywiście nie wybrałem fragmentów, które są… wartościowe?
Ciekawe?
Nie. Wybrałem fragmenty, do których miałem żarty. Przepraszam.Przydatne innym?
Kacper dostał obszerny feedback, wskazówki, kierunek i w ogóle to dziękówa.
Co tu jeszcze napisać?
Nie wiem. Nie ma sensu zmyślać.