Czy LeetCode to teraz standard?

0

@1a2b3c4d5e:

1a2b3c4d5e napisał(a):

@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ść.

Co to znaczy znajomość A&DS to trudne pytanie i nie ma na nie jednoznacznej odpowiedzi.
Można tematu nie znać wcale, znać średnio, bardzo dobrze albo lepiej niż bardzo dobrze.

Moim zdaniem znajomość na poziomie średnim to wiedza, że istnieją struktury danych takie jak: tablica, lista, zbiór, stos, kolejka, drzewo, graf, słownik oraz umiejętność zaimplementowania ich od podstaw oraz umiejętność rozwiązywania problemów o średnim poziomie trudności z leetcode przy ich użyciu.

Sama znajomość drzewa nie będzie dla mnie oznaczała, że ktoś zna super A&DS.

Zresztą sam poniekąd swoją odpowiedzią mi przyznałeś w mniejszym lub większym stopniu rację, bo jak ktoś kto nie zna drzewa napisze edytor kodu czy kompilator?

1

@CyanApple:

no tylko żeby znać drzewo nie trzeba robić LC czy regularnie ćwiczyć A&DS

0

@1a2b3c4d5e:

1a2b3c4d5e napisał(a):

@CyanApple:

no tylko żeby znać drzewo nie trzeba robić LC czy regularnie ćwiczyć A&DS

Tak, racja nie trzeba regularnie ćwiczyć, ale LC może pomóc w poznaniu drzewa.
Nie trzeba do tego od razu LC wystarczy notepad i np. javac albo jakieś IDE.

Załóżmy, że prowadzę firmę, która chce stworzyć super nowoczesny język programowania i szukam osób do pracy.
Czy w takiej sytuacji uważasz, że zadanie komuś kilku zadań z leetcode związanych z drzewami będzie złym pomysłem?
Dodam jeszcze, że osoba którą zatrudnie będzie rozwijać core tego języka programowania.

1

@CyanApple:

Załóżmy, że prowadzę firmę, która chce stworzyć super nowoczesny język programowania i szukam osób do pracy.
Czy w takiej sytuacji uważasz, że zadanie komuś kilku zadań z leetcode związanych z drzewami będzie złym pomysłem?

Od osoby projektującej język pewnie oczekiwałbym (imo) że jest zaznajomiona z różnymi językami/podejściami, ma opinie nt. różnych featuresów danych języków, ma jakąś swoją wizje OOP/obsługi błędów/FP, etc.

No ok, ale są jeszcze osoby implementujące ten język, więc w ich przypadku faktycznie pytanie o drzewa ma sens, bo jest to w większości przypadków nieodłączny element ich dnia pracy.

1

@1a2b3c4d5e:

1a2b3c4d5e napisał(a):

@CyanApple:

Załóżmy, że prowadzę firmę, która chce stworzyć super nowoczesny język programowania i szukam osób do pracy.
Czy w takiej sytuacji uważasz, że zadanie komuś kilku zadań z leetcode związanych z drzewami będzie złym pomysłem?

Od osoby projektującej język pewnie oczekiwałbym (imo) że jest zaznajomiona z różnymi językami/podejściami, ma opinie nt. różnych featuresów danych języków, ma jakąś swoją wizje OOP/obsługi błędów/FP, etc.

No ok, ale są jeszcze osoby implementujące ten język, więc w ich przypadku faktycznie pytanie o drzewa ma sens, bo jest to w większości przypadków nieodłączny element ich dnia pracy.

Oczywiście nie pytałbym tylko z A&DS, ale też tego wszystkiego co napisałeś wcześniej.
Takie zadanie na LC czy innej platformie pozwoliłoby mi jedynie odesłać szybciej do domu kandydatów, którzy aplikują a nie mają pojęcia na ten temat.

Inny przykład.
Prowadzę firmę która rozwija jakieś narzędzie do gry na giełdzie, przez cały dzień do pliku tekstowego spływają wartości kursu jakichś akcji.
Plik z całego dnia zajmuje niech będzie 100GB :D
Podczas dnia, kiedy napływają nowe wartości kursu potrzebuję w dowolnym momencie znać 20 największych wartości.
Rozwiązanie jakie się samo nasuwa to coś takiego:

  1. Wczytaj dane z pliku do jakiejś listy
  2. Posortuj listę rosnąco/malejąco
  3. Weź 20 wartości z końca/początku listy

Bez odpowiedzi pozostawiam pytanie, czy jest to mądre rozwiązanie i czy będzie działać :)

Mogę tak bez końca np. prowadzę firmę która rozwija jakiegoś CRUDa i nagle ktoś chce mieć autouzupełnianie imienia i nazwiska na podstawie słownika. W sumie proste wystarczy po wpisaniu np. 3ciego i kolejnego znaku przeszukać całą tablicę stringów i zwrócić do inputu tylko te, które zaczynają się od tego co wpisał użytkownik :)

2

Ja nie twierdzę że A&DS jest bezużyteczne czy coś,

Ja twierdzę że LC nie jest dobrym sposobem na naukę inżynierii oprogramowania, pisania dobrych produktów lub generalnie bycie dobrym inżynierem.

Ja nie wierzę że LC jest czymś, czego brakuje 60k devowi aby stał się 500k devem.

1

W ciągu ostatnich trzech lat byłem chyba na ponad 10 rozmowach rekrutacyjnych. Praktycznie zawsze jest jakiś coding test. Tylko raz miałem dopisać jakieś testy. Za każdym razem kiedy pisałem jakiś kawałek kodu i zwracałem uwagę, że przydałoby się zacząć pisać od testów to słyszałem coś w stylu: "ok, nie potrzebujemy testów, chodzi nam o rozwiązanie". Wytłumaczcie mi, czy oni wszyscy piszą kod bez testów na co dzień?

Przecież samo myślenie o testach wpływa na to jak projektujesz interfejsy bo przecież chcąc coś zamockować to bardziej idziesz w stronę kompozycji. A później taki agent mi wystawia ocenę, że bliżej mi do mida/seniora niż eksperta.

0

@1a2b3c4d5e:

1a2b3c4d5e napisał(a):

Ja nie twierdzę że A&DS jest bezużyteczne czy coś,

Ja twierdzę że LC nie jest dobrym sposobem na naukę inżynierii oprogramowania, pisania dobrych produktów lub generalnie bycie dobrym inżynierem.

Ja nie wierzę że LC jest czymś, czego brakuje 60k devowi aby stał się 500k devem.

  1. Ok, rozumiem :) Tu 100% zgoda.
  2. Tak tu też się zgadzam w 100%, ale wydaje mi się że źle rozumiesz funkcję LC. To raczej jedna ze składowych, coś co może pomóc w ogarnięciu A&DS przez praktykę i gotowe zestawy zadań.
  3. Tutaj nie do końca się zgodzę

Nie wiem dlaczego piszę tutaj o LeetCode jest wiele innych platform tego typu.
Te strony mają (przynajmniej z tego co wiem) 3 przypadki użycia:

  1. Rekrutacja
  2. Tutoriale
  3. Zadania

Korzystając z tutoriali i zadań tam przedstawionych można się dużo nauczyć.
Jeżeli np. ten Dev znał tylko A&DS na jakimś tam poziomie, ale nigdy nie rozwiązywał tego typu zadań to spędzenie tam jakiejś ilości czasu pozwoliło mu zauważyć jak takie zadania rozwiązywać a jeżeli nie znał to podnieść swój poziom znajomości A&DS.

Programowanie to umiejętność jak np. jazda na nartach.
Można jeździć całe życie pługiem, a można też nauczyć się bardziej zaawansowanych technik i ewentualnie startować w zawodach.
Pytanie czy całe życie jeżdżenie pługiem jest satysfakcjonujące?
Pewnie dla części osób tak, ale jak ktoś chce zjeżdżać szybciej to nie powinien poprzestać tylko na tym :)

1

Ja tu widze troche jakas gloryfikacje wszystkich FAANG i duzych firm i customowych rozwiazan.

Chocby w takim Google potrzeba jest masy wyrobnikow by zwyczajnie utrzymywac te rzeczy. Rownie dobrze mozna wyladowac w jakims projekcie w jakims GWT ktorego nikt nie chce dotykac. edit: A zeby sie dostac to LC jest wymagane, niewazne czy to wykorzysta w ciagu pracy czy nie.

W takim duzym korpo tez latwo sie slizgac.

Jak zawsze top 20% jest dobra, reszta to wyrobnicy.

Ale ogolnie to raczej predzej w malej firmie potrzeba jakiegos wielkiego mózga, ktory pomoze by dany produkt sie wyroznial.

I sam tez jestem pewnie takim wyrobnikiem ale w Google pewnie jakbym sie dostal to pewnie do jakiejs rutynowej grzebaniny

1

@CyanApple:

Tutaj nie do końca się zgodzę
Pytanie czy całe życie jeżdżenie pługiem jest satysfakcjonujące?
Pewnie dla części osób tak, ale jak ktoś chce zjeżdżać szybciej to nie powinien poprzestać tylko na tym :)

Rzecz w tym że algo nie są jedyną drogą do progressu.

To może inaczej - mam tam jakąś listę osób które według mnie robią "wow"

i zazwyczaj te wow wynika po prostu z dużej wiedzy technicznej np. SIMD, low lvl quirks, doświadczenie w pisaniu X/Y/Z czy umiejętnym modelowaniu systemów, lat doświadczeń w dużych/znaczących projektach/produktach

0
karsa napisał(a):

Chocby w takim Google potrzeba jest masy wyrobnikow by zwyczajnie utrzymywac te rzeczy. Rownie dobrze mozna wyladowac w jakims projekcie w jakims GWT ktorego nikt nie chce dotykac.

Tyle, że na tych wyrobników LC nadal jest wymagane.
Jeżeli ktoś chce tam pracować nawet jako wyrobnik to nie za bardzo ma wyjście.

6

Kiedyś to miało o wiele większy sens, bo nie było tych wszystkich leetcodów, spojów i książek, więc można było sprawdzić, czy ktoś ma wrodzone predyspozycje do tego, aby umieć rozwiązać takie zadanie szybko i wymyślać na bieżąco własne rozwiązanie. Wówczas wiemy, że jak ktoś potrafił wymyślić własne sensowne rozwiązanie dla zadania algorytmicznego, to ma intelektualne narzędzia do tego, aby rozwiązywać inne problemy, np projektowe, związane z LC i inne.
Natomiast w 2022 wystąpił problem, który występuje obecnie również np w testach IQ z mensy. Ludzie ćwiczą po domach ucząc się na pamięć rozwiązań i później je tylko aplikują w danym obszarze tym samym przedstawiając jedynie umiejętność nauki w domu a nie rozwiązywania nieznanych problemów w określonym czasie jednocześnie zakłamując wynik.

Uprzedzając ten argument:
"No dobra ale przecież większość problemów jest już rozwiązanych w IT i tak na prawdę korzysta się już w większości z gotowych rozwiązań, więc taka umiejętność nauki i wyszukiwania jest najważniejsza. Po co umieć badać koło na nowo."

Dokładnie tak. Dlatego w wielu firmach zadawanie takich algo zadanek sensu nie ma. No chyba, że chcemy przeczesać 1000 kandydatów na staż jakimiś prostymi zadankami, żeby nie tracić czasu (niektórzy nawet nie zdają sobie sprawy jak bardzo jest to skuteczne).

Natomiast są miejsca gdzie ma to jak najbardziej sens, bo skomplikowana algorytmika jest powszechnie używana i czasem przyjdzie coś rozwinąć, zdebuggować, zrefaktorować, zoptymalizować, albo napisać od zera.

Ta dyskusja występuje często, bo na polskim rynku pracy jest bardzo mało pracy wymagającej takich umiejętności. Głównie utrzymaniówka, albo webówka. Natomiast mówiąc z perspektywy np programisty C++ i aplikującego na różne pozycje tego typu to często wymagało się wiedzy domenowej w której zawarte są również umiejętności algorytmiczne/matematyczne.

3
Czitels napisał(a):

Natomiast w 2022 wystąpił problem, który występuje obecnie również np w testach IQ z mensy. Ludzie ćwiczą po domach ucząc się na pamięć rozwiązań i później je tylko aplikują w danym obszarze tym samym przedstawiając jedynie umiejętność nauki w domu a nie rozwiązywania nieznanych problemów w określonym czasie jednocześnie zakłamując wynik.

Ja LC nie traktuję jako platformy, gdzie mogę wykuć zadania na pamięć, ale właśnie staram się sam je rozwiązywać.
Wydaje mi się, że tutaj jest podstawowy błąd, bo to ma być pomoc w zrozumieniu jak to wszystko działa a nie po to żeby to wszystko wykuć.

3

Pracuje 2 lata w branzy, pierwszy raz odpaliłem leetcode i nie jestem w stanie większosci easy problemów rozwiązać xD

0

Jakoś wcześniej to przeoczyłem, trochę śmieszne no ale fakt platforma musi na czymś zarabiać :P

https://leetcode.com/problem-list/top-interview-questions/
https://leetcode.com/subscribe/?ref=lp_pl&source=nav-premium

nawet algorytmy/zadania na interview do danej firmy mozna sobie wybrac xD
screenshot-20220415075952.png

3

[dla chętnych]
Jeśli kogoś interesuje alternatywne spojrzenie na temat leet-codów, polecam do przeczytania książkę:
"Limes inferior" - Zajdel
Autor przewidział pojawienie się leetcodów już w 1980 roku. Co więcej, autor mieszkał w Polsce (czyli w kraju bez technologii, jak na tamte czasy.)

PS. O książce dowiedziałem się dzięki 4programmers.Pozdrawiam @Gufio, @AnyKtokolwiek i @Miang

1
dedicated napisał(a):

[dla chętnych]
Jeśli kogoś interesuje alternatywne spojrzenie na temat leet-codów, polecam do przeczytania książkę:
"Limes inferior" - Zajdel
Autor przewidział pojawienie się leetcodów już w 1980 roku. Co więcej, autor mieszkał w Polsce (czyli w kraju bez technologii, jak na tamte czasy.)

hm, to by sugerowało że są lifterzy któzy rozwiązuję leet-codów za innych :P

0

zrobiłem 1 zadanie i stwierdzam, że to g**no straszne. Chaos, polecenie niespójne z oczekiwanymi rezultatami i z oczekiwaną implementacją.
np. nie jest napisane precyzynie w poleceniu co ma funkcja zwracać, jakieś lanie wody, a oczekiwany rezultat to [1,2] ale szasblon funkcji, którą masz napisać ma zwracać inta WTF.
Codility i Codewars wspominam znacznie, znacznie lepiej.

1

Leetcode wersja tl;dr; stos(y), grafy, permutacje, sortowanie, wyszukiwanie wzorca, shunting yard, może AST i jakieś gramatyki się trafią przy hard.
Mniej więcej to co na uniwerku na pierwszym stopniu w ramach: algorytmiki, teorii języków formalnych i automatów, co nieco z matematyki dyskretnej.

Dawanie tego na interview ma jakiś sens jeśli praca to będzie głównie masa parsowania różnie ustrukturyzowanych danych i przetwarzania/optymalizowania/kompresji.

Jeśli dostajesz to do rekrutacji do firmy gdzie się pisze witryny z obrazkami do klikania dla Pana Janusza a większość przetwarzania danych robi za ciebie baza danych, to ktoś odpowiedzialny za rekrutację jest zdrowo odklejony.

0

Bojkotować, bojkotować! <Wolniewicz>

0

zrobilo sie popularne to i u nas juz, coraz wiecej lokalnych firm ma leetcode na rekrutacji.
mysle ze to bedzie standard za jakis czas tak jak to jest w usa

0

już naładowałem kieszenie przez ostatnie 10 lat wiec wyjebongo, to był złoty strzał to kodowanie, no ale żal kolejnych pokoleń

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.