28.06.20235 min
Rahul Bharambe

Rahul BharambeSoftware Developer

5 wniosków o kodowaniu po rozwiązaniu 400 zadań na Leetcode

Po rozwiązaniu 400 pytań na Leetcode zyskałem cenne spostrzeżenia i lekcje, które ukształtowały moje podejście do tworzenia oprogramowania. Oto pięć rzeczy, których się nauczyłem.

5 wniosków o kodowaniu po rozwiązaniu 400 zadań na Leetcode

Wielu szukających pracy programistów, kojarzy coś takiego jak Leetcode, stronę internetową, która opracowuje techniczne pytania i odpowiedzi na rozmowy kwalifikacyjne z najlepszych firm, takich jak Google, Facebook i Microsoft. Jednak wykorzystywanie w rozmowach kwalifikacyjnych problemów, które koncentrują się na strukturach danych i algorytmach, staje się coraz bardziej powszechną praktyką wśród mniejszych firm, powodując frustrację niektórych osób, które uważają, że ich biegłość w „leetcoding” nie odzwierciedla dokładnie ich możliwości zawodowych.

Chociaż zgadzam się, że nieznajomość Leetcode nie czyni cię złym programistą i prawdą może być, że podczas swojej pracy nigdy nie będziesz musiał odwracać drzewa binarnego, istnieje wiele rzeczy na Leetcode, których nauczenie się może okazać się korzystną wiedzą w trakcie twojej kariery.

1) Znaczenie struktur danych i algorytmów

Leetcode nie jest kompleksowym kursem w zakresie struktur danych i algorytmów (DSA), a przed rozpoczęciem korzystania z platformy ważne jest, aby mieć podstawową wiedzę na ten temat. Zaleca się wzięcie udziału w kursie specjalnie zaprojektowanym do nauki podstaw. Jednak po zdobyciu podstaw w DSA, Leetcode może być nieocenionym narzędziem do pogłębienia zrozumienia sposobu działania tych koncepcji i ich najlepszych zastosowań.

Ważne jest, aby pamiętać, że posiadanie solidnych podstaw w strukturach danych jest kluczowe dla każdego programisty. Niedawnym przykładem znaczenia DSA jest historia o tym, jak niewielkie ulepszenie algorytmu doprowadziło do 70% skrócenia czasu ładowania GTA V. Efektywna implementacja struktur danych i algorytmów może znacząco wpłynąć na wydajność i stabilność aplikacji, nawet przy dużym obciążeniu.

2) Zawsze znajdzie się ktoś, kto wie więcej od ciebie.

Zazwyczaj jestem dumny z mojego kodu po znalezieniu rozwiązania, ale ta duma często znika, gdy czytam sekcję komentarzy. Natknąłem się na implementacje, które są nawet lepsze niż oficjalne rozwiązanie. Znaczna część tego, czego nauczyłem się podczas korzystania z Leetcode, pochodzi z dokładnego sprawdzenia kodu innych osób i włączenia ich sugestii do mojej własnej pracy.

To przekonanie, że zawsze można nauczyć się więcej, odnosi się również do mojego życia zawodowego. Mam to szczęście, że mam starszych kolegów, którzy hojnie dzielą się ze mną swoją wiedzą i pomagają mi się doskonalić. Dzięki takiemu podejściu do uczenia się od innych mogłem przyswoić sporą ilość ich wiedzy.

3) Pozornie drobny szczegół może mieć duży wpływ na pracę

Jeszcze przed rozpoczęciem kariery, nie było żadnych realnych konsekwencji, jeśli popełniłem jakiś błąd w kodzie. Sytuacyjne bugi raczej się nie pojawiały i były ignorowane. Nie jest tak teraz, gdy współtworzę produkcyjną bazę kodu, gdzie każdy błąd, nawet jeśli dotyczy tylko drobnego przypadku brzegowego, może powodować problemy dla naszych klientów, ponieważ tysiące ludzi wchodzi w interakcję z moją pracą.

Leetcode udostępnia świetne szkolenie dla tego typu scenariuszy, ponieważ każdy problem może mieć setki przypadków testowych, często zawierające przypadki brzegowe, które jeśli nie zostaną odpowiednio rozwiązane, mogą spowodować awarię kodu.

Ostatnio musiałem pracować z bazą danych, w której brakowało niezbędnych ograniczeń i w wielu wierszach występowały nieoczekiwane wartości. Byłem wdzięczny za umiejętności rozwinięte w Leetcode, ponieważ byłem w stanie zidentyfikować i rozwiązać te problemy, zanim stały się one problemami w produkcji.

4) Pracowitość przewyższa naturalne zdolności.

Wysiłek jest ważniejszy od wrodzonych umiejętności, gdy nie są one wykorzystywane. Cytat Tima Notke przemawia do mnie na poziomie osobistym, szczególnie jeśli chodzi o Leetcode. Spotkałem wielu utalentowanych programistów, którzy zmagają się z pytaniami nawet na średnim poziomie, ponieważ brakuje im doświadczenia i zrozumienia podejścia do rozwiązywania problemów i wymaganych narzędzi.

Początkowo ja również miałem trudności z rozwiązywaniem nawet najłatwiejszych pytań w Leetcode, jednak po wzięciu udziału w kilku kursach na temat struktur danych i algorytmów oraz regularnych ćwiczeniach, poprawiłem się do tego stopnia, że jestem w stanie rozwiązać większość pytań na średnim poziomie w krótkim czasie, a nawet niektóre trudniejsze.

Moje ostatnie przejście z Pythona na Javę podczas rozwiązywania pytań Leetcode jeszcze bardziej podkreśla znaczenie praktyki. Mimo, że codziennie używałem Javy w mojej pracy, nie wydaje mi się ona czymś naturalnym, jeśli chodzi o rozwiązywanie tego typu problemów. Nie zniechęcam się jednak. Jestem przekonany, że przy odpowiedniej wprawie stanę się tak samo sprawny w Javie, jak w Pythonie.

5) Planowanie strategiczne odgrywa kluczową rolę w tworzeniu oprogramowania.

Planowanie to bardzo ważny aspekt tworzenia oprogramowania i nie warto tego pomijać. W czasie ćwiczeń i uczestnictwa w prawdziwych rozmowach kwalifikacyjnych stało się jasne, że kodowanie to tylko część całego procesu. Tendencja, w której rekrutowani od razu przechodzą do kodowania po przeczytaniu podpowiedzi jest częstym błędem i prowadzi do kiepskich wyników.

Rozwój oprogramowania jest pełen niejasności i nieoczekiwanych zdarzeń, a rozmowy kwalifikacyjne próbują to odwzorować, zadając pytania, które często są niejasne lub niekompletne. Ważne jest, aby komunikować się z osobą prowadzącą rozmowę kwalifikacyjną i próbować zrozumieć wszelkie niejasnośc lub ograniczenia. Przed rozpoczęciem pisania kodu zaleca się przedstawienie rozwiązania, ocenę jego mocnych stron i ograniczeń oraz przystąpienie do kodowania dopiero wtedy, gdy wszyscy zaakceptują proponowany plan.

W przeciwnym razie, jeśli rozwiązanie nie spełni wymagań czasowych i przestrzennych, może być już za późno na wprowadzenie niezbędnych zmian. Odnosi się to również do profesjonalnego środowiska, ponieważ kodowanie bez odpowiedniej analizy wymagań i rozważenia wszystkich opcji może ostatecznie doprowadzić do znacznej refaktoryzacji.

Podsumowanie

Prywatnie mam to szczęście, że bardzo lubię Leetcode i praktykowanie tej platformy jest dla mnie przyjemnością, nawet poza rejonem poszukiwania pracy. Rozumiem jednak, że nie wszyscy podzielają ten sam entuzjazm i mogą postrzegać to jako stratę czasu i brak zastosowania w codziennych scenariuszach.

Ten artykuł ma na celu zakwestionowanie tego poglądu i pokazanie wartości korzystania z Leetcode jako narzędzia do poprawy umiejętności rozwiązywania problemów i znajomości struktur danych, nawet jeśli jest to tylko przygotowanie do rozmowy kwalifikacyjnej.

Ważne, aby pamiętać, że nie wszystkie oferty pracy mogą zawierać pytania w stylu Leetcode, a jeśli nie sprawia ci to przyjemności, to nadal istnieje wiele innych możliwości.

Dziękuję za przeczytanie i jeśli chcesz pozostać ze mną w kontakcie, to zapraszam do kontaktu na LinkedInie.



Oryginał tekstu w języku angielskim przeczytasz tutaj.

<p>Loading...</p>