Wątek przeniesiony 2022-05-05 15:37 z Algorytmy i struktury danych przez somekind.

Zacząłem grindować leetcode żeby zmienić pracę i nie żałuję

1

Chcąc zmienić pracę na bardziej dochodową zacząłem grindować leetcode. Jak zapewne większość z was przestałem mieć styczność z jakąkolwiek algorytmiką z dniem zakończenia szkoły. W szkole byłem nawet dobry, ale 10 lat crudowania jednak robi swoje i w głowie miałem tylko informacje, że jakieś tam O istnieje, ale nie ma co się przejmować, bo i dane zawsze małe i serwery dobre. Jakieś tam drzewa są, ale robisz indeks na bazie i nie ma problemu. W sumie i tak wszystko się do bazy ładuje to ważniejsze dobrego joina zrobić niż przejmować się wrzucaniem elementu zawsze na początek array listy. I tak się żyło na tej wsi.
W samej pracy zdarzyło mi się kilka razy użyć wiedzy algorytmicznej, tzn wiedziałem, że jest graf potrzebny i szukałem odpowiedniej biblioteki do grafów. Albo kiedyś parsować drzewo mi się zdarzyło, ale w praktyce było to całkowicie losowe chodzenie po drzewie, debugowanie i jakoś tam działało.

Teraz robiąc zadania leetcode przypominam sobie zadania, które były co prawda raz na rok, ale były. I widzę, że przez moją ignorancję i leniwe przyzwyczajenia zrobiłem w życiu kilkanaście tasków, które działają głównie dlatego, że nikt tych crudów nie używa (albo używa, ale mało danych i nie ma problemu wydajnościowego).
I, prawdę mówiąc, trochę się wstydzę. Wszyscy moi współpracownicy mało się znają na algorytmice, więc zawsze przechodziło i nikt nie miał pretensji o te pętle w pętli. Niby jeden czy dwa taski na rok zrobione źle to nie tragedia. Reszta była programistycznie poprawna, było i TDD i hexagonal architecture i DDD i rekruterka majtki musiała zmienić jak słuchała tych skrótów.

Ale co z tego, co dalej? Osiągnąłem pewien poziom, że moja architektura jest poprawna, kod czytelny i otestowany. Teraz muszę pracować nad wydajnością nie tylko zapytań sql, ale też moich ifów i forów. Chciałbym z dumą powiedzieć raz do roku - patrzcie, udało się zejść z O(n^2) do O(nlogn).

Finalnie trochę żałuję i trochę mi wstyd, że tak olewałem wiedzę algorytmiczną. Niby poświęciłem czas na inne zagadnienia typu czyste testy i czysta architektura. Ale widzę braki, w jakby nie patrzeć, podstawach i jestem zadowolony, z tego, że rozpocząłem grindowanie leetcode - nawet jeśli nie uda się wynegocjować 15k$.

Patrzę też na strony typu ebilet gdzie przez większość czasu działa poprawnie, ale raz na rok jest duży festiwal i zwyczajnie strona nie wyrabia - myślę sobie, że pewnie tam też jest programista podobny do mnie, programista który olał algorytmikę, uznał, że n kwadrat jest wystarczające. Który poświęcił czas i zasoby na inne zagadnienia typu DDD z event soursingiem. Programista, który zrobił tego jednego w roku taska jako tako, byle działało. I przez 364 dni w roku działa poprawnie.

0

Chcąc zmienić pracę na bardziej dochodową zacząłem grindować leetcode.

Czy firmy, do których chcesz aplikować, faktycznie będą tego wymagać? Grindowanie algorytmów to chyba bardziej USA (ale może tam właśnie chcesz aplikować)?

I widzę, że przez moją ignorancję i leniwe przyzwyczajenia zrobiłem w życiu kilkanaście tasków, które działają głównie dlatego, że nikt tych crudów nie używa (albo używa, ale mało danych i nie ma problemu wydajnościowego).

Ale czy chcesz się nauczyć tego pod rekrutację (jedna bajka), czy po to, żeby samemu więcej wiedzieć i umieć (druga bajka)?

Jak to drugie, to nie lepiej wziąć jakąś książkę albo kurs z Coursera czy nawet z Youtube, gdzie będziesz miał to głębiej wytłumaczone niż tylko zadanko? Uczelnie wrzucają całe wykłady do sieci.

A zamiast abstrakcyjnych zadanek, nie lepiej robić jakichś własnych projektów, które coś robią?

3

Odnośnie e-biletu - zwykle w przypadku takich peeków ruchu dają o sobie znać inne wąskie gardła, np. jakiś „SELECT FOR UPDATE” na bazie danych albo niewyskalowanie pól wątków czy serwerów.

W przypadku jakichś list, które maja <10 elementów (pewnie z 99% przypadków) nie ma znaczenia, czy tam są 2 zagnieżdżone pętle czy jedna. Więcej czasu schodzi na paesowanie JSON-ów ;)

1
LukeJL napisał(a):

Czy firmy, do których chcesz aplikować, faktycznie będą tego wymagać? Grindowanie algorytmów to chyba bardziej USA (ale może tam właśnie chcesz aplikować)?

Tak, wymagają. Zachodnie firmy raczej w standardzie to mają z tego co zauważyłem. Nawet jak przez kontraktowanie chcesz to i tak dają do rozwiązania leetcode (albo coś podobneog)

Ale czy chcesz się nauczyć tego pod rekrutację (jedna bajka), czy po to, żeby samemu więcej wiedzieć i umieć (druga bajka)?

Zacząłem klasyczny grind pod rekrutację, ale skończyło się na tym, że czytam książki i analizuje algorytmy, żeby rozumieć co robię :) Więc chciałem tylko tylko pierwszy etap rekrutacji przechodzić, ale jakoś tak wyszło, że korzystam na tym i zyskuje sporo wiedzy.

2

Drobny off-topic: grind to po polsku "mielić".

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