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.