Czy LeetCode to teraz standard?

4

Uprawianie rekrutacji w stylu Cracking the Coding Interview przez małe firmy to jest po prostu kult cargo. Zastanówmy się najpierw jakie cele ma taka rekrutacja:

  • zminimalizowanie false positives - zwalnianie pracowników z FAANG jest kosztowne,
  • chcemy przyciągnąć największe talenty (najwyższe IQ), które będą pracowały przez wiele lat i budowały bardzo customowy codebase.

Celem rekrutacji w firmach kontraktorskich jest to, żeby znaleźć najlepszego pracownika do danej pracy za najniższe pieniądze. Firmy kontraktorskie nie przejmują się tym, że zatrudnią badziewiaków bo nie piszą dla siebie codebase'u. Dla nich to jest nawet lepiej zatrudnić 10 badziewiaków i opchnąć ich do klienta bo dostają prowizję*10.

O ile FAANGI są w stanie zapłacić takim kandydatom, żeby przyszli i nie odchodzili to w jaki sposób mała firma kontraktorska ma niby konkurować z rynkiem gdzie co chwila pojawia się firma, która podbija stawki i rotacja jest taka, że ludzie zmieniają firmę co 6 miesięcy. Mało firm jest w stanie sobie pozwolić na tworzenie customowego codebase'u tak jak robi to Google. Finalnie, wszędzie jest taki sam stack technologiczny, tj. spring, aws, python, może ruby, js. Więc skacząć z jednej firmy do drugiej moim największym assetem powinna być znajomość stacka. Skacząć do FAANGa nie jestem w stanie znać stacka bo oni mają customowego stacka.

Wyobraź sobie, że zapłaciłeś 10x więcej za rekrutację, bierzesz jakiegoś kozaka IQ 200 i ten kozak nie potrafi delegować, jest indywidualistą i nie dzieli się wiedzą. Po co Ci taki geniusz skoro masz prostą apkę do napisania? Po 6 miesiącach kozak się zwija bo gdzieś płacą 100 zł więcej. Czy naprawdę pracowity średniak z IQ 120 nie potrafi zrobić tej samej pracy? Przepłaciłeś bo zapłaciłeś za skillset, którego nie potrzebowałeś. Tylko, że nie możesz się chwalić na LI, że macie zajebisty proces rekrutacyjny z liczeniem piłeczek w autobusie. Że też ludzie się wciąż na to nabierają.

1

@Shalom:

Shalom napisał(a):

Natomiast nauczenie się czegoś raz i porządnie, co przyda się w całej karierze jest traktowane jako coś bezsensownego i bezcelowego

@CyanApple: tylko że to bzdura. Tak jak ze wszystkim innym, to trzeba ćwiczyć. To że dziś umiesz rozpykać jakieś LC hardy z biegu, wcale nie oznacza że za rok albo dwa, bez ćwiczenia, nadal będziesz. Szczególnie jeśli teraz to wyskillowałeś a nie byłes w tym kierunku naturalnie uzdolniony.

Jasne, że trzeba to ćwiczyć, tak samo jak znajomość frameworków, tyle że jak dojdziesz do poziomu, na którym umiesz rozpykać hard to nie zdegradujesz się w ciągu roku tak, że nie będziesz potrafił rozwiązać easy, a żeby wrócić na poziom hard będziesz potrzebował o wiele mniej czasu niż ktoś kto ma problemy z easy.

Za rok zapomnisz, ale pod warunkiem jeżeli wykułeś to na pamięć bez zrozumienia.
Jeżeli się tego nauczyłeś ze zrozumieniem tj. przeszedłeś przez kilka etapów:

  1. nie wiem jak to zrobić
  2. analizuję czyjeś rozwiązanie + czegoś nie znam doczytuję
  3. już wiem jak to działa
  4. rozwiąże to sam 2-3 razy
  5. zaaplikuję to rozwiązanie do rozwiązania kilku podobnych problemów
    to raczej tego tak łatwo nie zapomnisz.

Oczywiście, że są osoby które sobie z tym radzą lepiej lub gorzej, ale zastanówmy się, czy Ci co sobie z tym nie radzą na pewno powinni być programistami?

Nie wiem skąd te wnioski. Problemy algorytmiczne w stylu LC kończą się zwykle może z 50 linijkami spaghetti, byleby zadziałało. Nijak się ma to do projektowania oprogramowania które da się utrzymywać albo do jakiegoś Clean Code.

Jeżeli w ramach rozwiązywania problemu wytworzyłeś 50 linijek spaghetti to czy Twój kod produkcyjny nie będzie taki sam?
Kod spaghetti powstaje, jeżeli próbujesz rozwiązać jakieś z tego typu zadań bez wcześniejszego zastanowienia się nad problemem np. nie zastanowisz się na początku nad przypadkami jakie mogą wystąpić tylko od razu przystępujesz do programowania.

Jeżeli do leetcode podchodzisz na zasadzie, żeby jakoś zadziałało to pewnie tak samo do kodu produkcyjnego :)

można przyjąć, że w tej pierwszej grupie jest więcej osób dobrych albo bardzo dobrych niż w tej drugiej.

Google jakiś czas temu opublikowało artykuł z którego wynikało że nie ma u nich żadnej korelacji pomiędzy tym jak kandydat skillował leetcoda na rekrutacji a tym jaki jest jego późniejszy performance w pracy.

Poproszę tutaj o linka, bo tak można napisać wszystko :)

7
CyanApple napisał(a):

Nieznajomość algorytmów objawia się też na wiele innych sposobów:

  • złe projektowanie klas
  • wynajdywanie koła na nowo
  • nieczytanie kodu
  • nieznajomość bibliotek
  • niepotrzebne komplikowanie kodu
  • nieznajomość wielu technik programowania

Absolutnie nic z tej listy nie ma związku z algorytmami. Rzekłbym nawet, że w wielu przypadkach to będą objawy właśnie znajomości algorytmów.
Można też w drugą stronę - dobrze projektować nieskomplikowany kod, znać biblioteki i techniki, i nie znać algorytmów.

0

@twoj_stary_pijany:

twoj_stary_pijany napisał(a):

Skacząć do FAANGa nie jestem w stanie znać stacka bo oni mają customowego stacka.

Jesteś pewien, że tylko FAANG ma customowego stacka? :> Nie wydaje mi się, robisz tutaj duże uproszczenie.

Wyobraź sobie, że zapłaciłeś 10x więcej za rekrutację, bierzesz jakiegoś kozaka IQ 200 i ten kozak nie potrafi delegować, jest indywidualistą i nie dzieli się wiedzą. Po co Ci taki geniusz skoro masz prostą apkę do napisania? Po 6 miesiącach kozak się zwija bo gdzieś płacą 100 zł więcej. Czy naprawdę pracowity średniak z IQ 120 nie potrafi zrobić tej samej pracy? Przepłaciłeś bo zapłaciłeś za skillset, którego nie potrzebowałeś. Tylko, że nie możesz się chwalić na LI, że macie zajebisty proces rekrutacyjny z liczeniem piłeczek w autobusie. Że też ludzie się wciąż na to nabierają.

Patrzysz bardzo stereotypowo.
Dlaczego zakładasz, że ktoś o IQ 200 jest indywidualistą?
Czy jak to nazwałeś średniak o IQ 120 też nie może być indywidualistą?
Czy to, że ktoś jest średniakiem od razu oznacza, że dzieli się wiedzą? :)
Skąd wiesz, czy przełaciłem za skillset, którego nie potrzebowałem?
Może mój programista zrobił w tydzień to co średniak robiłby przez pół roku i pomimo tego, że zapłaciłem mu za miesiąc więcej to jednak zaoszczędziłem 5 miesięcy pracy średniaka?

3
WhiteLightning napisał(a):

@japanlofi: @karsa: a w sumie jak powinna wygladac rerkutacja na Devops/SRE ? Bo u mnie zawsze jakos to bylo tak ze wpadalem w QE/perf testy -> tam trzeba bylo ogarniac zestawianie systemu itp. I z czasem okazywalo sie, ze potrzeby spore, a robotnikow malo i w sumie szkoda zebym robil QE jak potrafie inne rzeczy ogarniac.

edit: Link z komentarza od @karsa, moze sie komus przyda: https://github.com/mxssl/sre-interview-prep-guide

Niestety ten link moze sie przydac tylko na jakas bazowa wersje DevOps/SRE/Platform Engineer etc. Fakt, ze na to pierwsze stanowisko mozna nie miec za bardzo doswiadczenia, natomiast kolejne dwa wymagaja zazwyczaj tego pierwszego ;-)

Gdyby mi ktos kazal rekrutowac na to stanowisko to generalnie dopytalbym co robil do tej pory, a wiedzac co sie robi prosto zadac sensowne pytania. Niestety te prezentowane w linku wyzej i podobnych sa bardzo ogolne.

Wracajac do Twojego pytania @WhiteLightning, firmy nie umieja w rekrutacje na to stanowisko, bo z perpsektywicznego HR'owego mozdzka wynika, ze szukaja jednego czlowieka na 5 stanowisk. Jesli masz farta i pozniej przyjdzie ktos tech, kto wie czego szuka to - masz farta. Jesli masz pecha to pozniej przyjdzie beton, ktory nie ma pojecia kogo szuka, ktos mu powiedzial, ze istnieje ktos taki co sie zwie DevOps i on robi generalnie wszystko.

  • Pozniej oczekiwalbym, ze ogarnia wirtualizacje.
  • Ma solidna wiedze z Linuxa.
  • Konteneryzacje, chcialbym zobaczyc jak buduje nawet Dockerowy image z testowa apka, przygotowana wczesniej przeze mnie i udokumentowana w taki sposob aby umozliwic mu odpalenie jej w kontenerze. Do tego punktu oczywiscie pogadalibysmy troche glebiej o konteneryzacji. Zaletach, wadach, security, a nastepnie przechodzimy do...
  • Zarzadzania konteneryzacja. Wiadomo, ze mam tu na mysli samego juz Kubernetesa. Ilosc potencjalnych pytan jakie mozna tutaj zadac (UWAGA! Nalezy faktycznie umiec dobrze sformulowac pytanie tak zeby nie bylo niescislosci) jest ogromna. Np.
- Chcialbym wiedziec jakie kroki wykonalby po postawieniu prostego klastra.
- Czy robienie 2 Master Node to dobry czy zly pomysl? Uzasadnij.
- Jak ogarnalby zarzadzanie klastrami w roznych lokacjach / strefach czasowych?
- Jak przeprowadzi update Kubernetesa do nowszej wersji
- Ustawianie limitow - jak ustalac je poprawnie. Dlaczego limit na CPU moze byc zlym pomyslem/lub dobrym - podchwytliwe.
- Jak dziala skalowanie wewnatrz Kubernetesa?
- A̶u̶t̶e̶n̶t̶y̶k̶a̶c̶j̶a̶ Uwierzytelnianie za pomoca Kubernetes identity dla mikroserwisow.
- Wyjasnic graceful shutdown.
- Custom resources - biore od kazdej druzyny po 200zl i slucham panstwa.

Przede wszystkim chcialbym wiedziec z jakimi odmianami k8s pracowal do tej pory

  • Wiedza chociaz w teorii odnosnie tego mitycznego SDLC.
  • Programowanie: w czym ogarnie jakis task, ktory wymaga napisania kawalka kodu - tutaj poprosilbym o rozwiazanie jakiegos zadania z zycia wzietego - nawet jakiejs uproszczonej wersji.
  • Automatyzacja: Terraform i Ansible - lub alternatywy np. Puppet, Chef, Pulumi.
  • Gdybym mial dac jakis task to najchetniej wlasnie cos co wymagaloby polaczenia wielu obszarow. Np.
    Zbuduj kontener w ktorym bedziesz miec swoje srodowisko programistyczne np. Python, Go, JS. Nastepnie napisz kod, ktory zbiera z dwoch maszyn dane np. ilosc plikow w wybranych katalogach oraz konkretne dane o maszynie i generuje z tego JSON albo wrzuca to do CSV. Caly proces uruchamiania, zbierania informacji wykonaj za pomoca Ansible. Ewentualnie dorzucilbym zeby kompilacje kodu wykonywal na maszynie z ktorej ma pobierac te dane, a nie w swoim srodowisku.

Zadanie moze wydawac sie kompletnie bez sensu ale ma wiecej sensu niz ganianie kogos zeby pisal algorytmy, ktorych w pracy nie wykorzysta ;-)

  • Pogadalbym o budowaniu calego CICD. Czy ma juz z tym doswiadczenie. Budowal/obslugiwal. Jesli tak to z czego ono sie skladalo? Jesli budowal to dlaczego akurat wybral Jenkinsa i sie tym chwali w momencie w ktorym chce pracowac ze mna w zespole - tutaj rekrutacja by sie zakonczyla :D
  • Czy zna GitOps? Jesli tak to kiedy ma on sens? Moze zawsze ma sens?
  • Rodzaje i strategie Deploymentow?

W zasadzie moglbym tak pisac 5x tyle. Wszystko tez zalezy od tego do czego mialbym zatrudniac tego czlowieka. Jesli mam jakis legacy projekt na starych zabawkach to powyzsza calosc praktycznie nie ma sensu poza moze VM, Linuxem i teoretycznymi koncepcjami.

6

@CyanApple:

Rozwiązując zadania algorytmiczne moim zdaniem można bardzo podnieść swoje umiejętności progrmistyczne.

Z mojego doświadczenia robienie tego typu zadanek nie wiele mi dawało w porównaniu do robienia prawdziwych projektów.

Spróbuj sobie napisać edytor tekstu, OSa, engine bazki, kompilator, gita, przeglądarkę czy inne podobne

to zyskasz na tym pewnie order of magnitude więcej, bo nie tylko masz tutaj projektowanie złożonych systemów - czego nie ma w LC, a jest wszędzie indziej - od crudów, po złożone systemy informatyczne, a w dodatku tonę wiedzy którą będziesz musiał zdobyć aby móc ruszyć

no i jeszcze - co lepiej brzmi napisałem własny OS czy klepnąłem 50 zadanek na LC screenshot-20220214170608.png

Już nawet nie pisze że taki prawdziwy projekt możesz wystawić na świat, nauczyć się releasować/deployować, przygotowywać installery/paczki, projektować sensowne API, męczyć z breaking changes, a takie kodziki na LC to co najwyżej na GH wrzucić i podrzucać studyntom :P

3

Rekrutowali wy sie ta do gugla/projektu googla kiedys? EPAM szukal swego czasu ludzi do projektow dla gugla, oni tam wszystko maja customowe, to co maja pytac ze wiosny/sprężyny, jak u nich wszystko inaczej. A pozniej małpki małpuja i jeszcze teorie do teog dorobia

A taki delikwent co zna algorytmy i jest l33t to bardziej niebezpieczny niz ten co nie zna bo bedzie wszedzie robil optymalizacje na listy z length 15 itemow.

4

Trzeba sobie zdac sprawe z kilku rzeczy, które jednak wyrozniaja FAANG od innych organizacji i nie mowie, że to dobrze albo zle;

  1. Customowy stack technologiczny
  2. Bardzo dużo zależności i duża zmienność

To powoduje, ze na codzień inzynierowie maja do czynienia z duzą zlozonoscia, z ktora musza sobie radzic, aby byc efektywnym. Pomaga wiedza i doświadczenie, ale przede wszystkim niezbedna jest umiejetnosc szybkiej nauki i adaptacji (tzw. umiejętności poznawcze).

Jak to sprawdzic podczas rekrutacji? Pewnie mozna na wiele spodobow, w FAANG robi sie tak, że daje sie kandydatowi nietrywialny problem do rozwiazania (ale nie tzw. brain teaser, bo udowodniono, że to nic nie wnosi). Algorytmy i struktury danych (LeetCode in gereral) to takie klocki Lego, ktore w zalozenie zna kazdy (mozna sie przygotowac przed interview, wiec nie jest o zaskoczeniem) i trzeba wpasc na rozwiazanie zlozonego problemy z ich uzyciem. Trudnosc jest w problemie, nie w algorytmach, aby sprawdzic jak kandydat atakuje zlozonosc i niepewnosc. Niestety z powodu (1) nie ma sensu pytać „Jak zrobil(a)byś to w Springu?” ;) bardziej „Jakbys zaprojektował(a) Springa, zeby dalo sie zrobic X?”.

Oczywiscie nie kazdy chce sie bawic w algorytmy i to jest OK. Nie kazdy tez chce pracowac z customowym stackiem albo w wielkiej organizacji na tysiace inzynierow - to jest OK.

Jezeli w organizacji nie zachodzi (1) i (2), to widze ograniczony sens w tego typu rozmowach.

0

@1a2b3c4d5e:

1a2b3c4d5e napisał(a):

Spróbuj sobie napisać edytor tekstu, OSa, engine bazki, kompilator, gita, przeglądarkę czy inne podobne

to zyskasz na tym pewnie order of magnitude więcej, bo nie tylko masz tutaj projektowanie złożonych systemów - czego nie ma w LC, a jest wszędzie indziej - od crudów, po złożone systemy informatyczne, a w dodatku tonę wiedzy którą będziesz musiał zdobyć aby móc ruszyć

no i jeszcze - co lepiej brzmi napisałem własny OS czy klepnąłem 50 zadanek na LC screenshot-20220214170608.png

Już nawet nie pisze że taki prawdziwy projekt możesz wystawić na świat, nauczyć się releasować/deployować, przygotowywać installery/paczki, projektować sensowne API, męczyć z breaking changes, a takie kodziki na LC to co najwyżej na GH wrzucić i podrzucać studyntom :P

Jedno nie wyklucza drugiego.
Nigdzie nie napisałem, że na rozwiązywaniu zadań z leetcode należy poprzestać i że to sprawia, że ktoś jest master programistą.
Moim zdaniem bez znajomości algorytmów i struktur danych nie jesteś w stanie napisać nic z tego co wymieniłeś.

nowy_kret_2 napisał(a):

Rekrutowali wy sie ta do gugla/projektu googla kiedys? EPAM szukal swego czasu ludzi do projektow dla gugla, oni tam wszystko maja customowe, to co maja pytac ze wiosny/sprężyny, jak u nich wszystko inaczej. A pozniej małpki małpuja i jeszcze teorie do teog dorobia

A taki delikwent co zna algorytmy i jest l33t to bardziej niebezpieczny niz ten co nie zna bo bedzie wszedzie robil optymalizacje na listy z length 15 itemow.

Nie trzeba pracować w Google, żeby nie korzystć z Javy i nie pracować w Springu :) To, że Spring jest używany w wielu projektach na prawdę nie znaczy, że we wszystkich i tylko FAANG z niego nie korzysta.

Wszystko z rozsądkiem, a jednak bardziej niebezpieczni są tacy, co nie znają i będą sprawdzać czy element istnieje w bardzo dużej posortowanej tablicy liniowo, albo tacy co będą w pętli uruchamiać setki zapytań do bazy danych.

Znajomość algorytmów jest ważna, a ucząc się rozwiązywać tego typu problemy przy okazji można się nauczyć wielu przydatnych sztuczek programistycznych. Można też nauczyć się dobrych praktyk, nikt nie każe rozwiązywać tego typu zadań pisząc kod spaghetti.

Nie rozumiem tego oporu wiedzy przed poznaniem algorytmów i struktur danych. To są przecież podstawy, które każdy programista powinien znać.

1

@CyanApple

Moim zdaniem bez znajomości algorytmów i struktur danych nie jesteś w stanie napisać nic z tego co wymieniłeś.

to jest zawsze najważniejszy punkt tych wszystkich śmiesznych dyskusji nt. grindowania a&ds, a mianowicie:

Co to znaczy znajomość A&DS

bo śmiem twierdzić że np. przy edytorze kodu, przeglądarce i kompilatorze to głównie drzewka będą ci potrzebne

ale przecież dla kogoś to nie będzie jakaś super znajomość A&DS, a dla kogoś w sumie to tak.

A zatem zdefiniuj co rozumiesz przez znajomość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1