adventofcode, spoj, hackerrank - jak się uczyć

0

Hej, mam taki problem.
Lubię rozwiązywać zagadki algorytmiczne na hackerranku, wcześniej spoj, teraz próbuje rozwiązywać adventofcode. Mam jednak z tym problem, bo często jest tak, że nie potrafię czegoś rozwiązać, co wydaje się łatwe. Po prostu nie wiem od czego zacząć, nie przychodzi mi do głowy żadne rozwiązanie.

Pracuje od wielu lat w IT, obecnie jestem tech leadem jeżeli chodzi o devops, pracodawca i klienci są ze mnie zadowoleni, rozwiązuje im skomplikowane problemy z infrastrukturą, skalowaniem, deploymentami itp. Potrafię też programować, moim głównym językiem programowania jest Ruby, znam też Elixira, Pythona, trochę Scali i Javy.
Problem mam właśnie z algorytmami, wydaje mi się, że spowodowane jest to tym, że mimo, że skończyłem studia techniczne, to nie była to infromatyka, tylko kierunek pokrewny, gdzie programowanie było głównie w C i to na mikrokontrolery. W IT pracuje już ponad 10 lat, ale jako stricte programista pracowałem może łącznie przez 10 miesięcy. Pisania skryptów albo serwisów REST w railsach lub sinatrze na potrzeby mojej pracy nie liczę.

Rozwiązania, które pisze i działają są moim zdaniem wolne, próbuje patrzyć na githuby innych userów i podglądać jak rozwiązali dany problem, jednak widzę, że robią to często w inny sposób. Nie wiem czy wynika to z tego, że wykorzystują jakąś tajemną wiedzę z studiów informatycznych.

Macie może jakieś rady dla mnie jak się nauczyć i poznać te wszystkie rzeczy, bo nie ukrywam, że rozwiązywanie takich zagadek sprawia mi mega radość, często jednak się frustruje. bo nie mam pojęcia jak ugryźć dany problem. Może jakaś książka albo kurs online? Może być po angielsku.

2

Nie przejmuj się, gros programistów (tych ze studiami informatycznymi lub bez) w zasadzie nie dotyka algorytmów w pracy, więc mają podobne doświadczenia do Twoich.

Od siebie polecam:

0

Problem mam właśnie z algorytmami, wydaje mi się, że spowodowane jest to tym, że mimo, że skończyłem studia techniczne, to nie była to infromatyka,

bardzo wątpliwe :D jeżeli jesteś w it od tylu lat, to pewnie słyszałeś / kojarzysz większość rzeczy, a przynajmniej podstaw która tam jest.

Rozwiązania, które pisze i działają są moim zdaniem wolne, próbuje patrzyć na githuby innych userów i podglądać jak rozwiązali dany problem, jednak widzę, że robią to często w inny sposób.

Ale czy inny oznacza lepszy? szybszy? przecież w matmie też jeden problem da się rozwiązać na wiele sposobów.

1

Nie sądzę, że to kwestia kierunku. Algorytmy w wydaniu kompetytywnym trzeba przećwiczyć, potem stają się relatywnie łatwe. Jeżeli nie wiesz od czego zacząć, to ewidentnie nie masz wprawy.

Na poziomie spoj czy hackerrank raczej nie ma trudnych rzeczy, powtarza się na różne sposoby te same techniki. Często wystarczy znajomość konkretnego algorytmu czy struktury danych aby rozwiązać zadanie. W innych wypadkach należy znaleźć znany problem, do którego da się sprowadzić zadanie, znaleźć odpowiednie ograniczenia albo zauważyć jakąś nieoczywistą własność.

Są i przypadki na pierwszy rzut oka trudniejsze. Trzeba wykorzystać coś nie ujętego w materiale podstawowego (i pewnie też bardziej zaawansowanego) kursy algorytmiki. Przytaczając rzeczy, których sam nauczyłem się właśnie podczas klepania zadań - automat Aho-Corasika, drzewo Fenwicka, sortowanie sufiksów w czasie n log^2 n czy budowania palindromu od danego ziarna. Tego nie zrobi student po kursie algorytmiki tak z marszu. Na pocieszenie okazuje się, że te techniki są świetnie opisane na blogach, stronach wykładowców, w literaturze czy publikacjach. W końcu osoba, która wymyślała zadania, znała już gotowe rozwiązanie (albo kilka).

Materiałów jest sporo, jak już tu wymienione "Cracking Code Interview", książki R. Sedgewicka czy Cormena i spółki, kursy na Courserze (np. ten). Nie wyczerpują jednak tematu w całości i często będziesz zmuszony zrobić własne poszukiwania albo przejrzeć czyjeś rozwiązanie, by zrozumieć istotę problemu.

Nie zniechęcam, ćwicz, bo samo z siebie nie przyjdzie. Pytanie, czy jest Ci to do czegokolwiek potrzebne?

0

Dzięki wszystkim za odpowiedzi. Te rzeczy nie są mi potrzebne w pracy, ogarniam programowanie na poziomie wystarczającym do mojej pracy. Jak już pisałem nie jestem stricte programista, zajmuje się klastrami obliczeniowymi. Chce po prostu się rozwijać i poćwiczyć trochę mózg.

0

Nie wiem czy wynika to z tego, że wykorzystują jakąś tajemną wiedzę z studiów informatycznych.

Przejrzyj zadania z Olimpiady Informatycznej. To jest konkurs dla uczniów szkół ("jeszcze nie studentów"). Po analizie rozwiązań z omówieniem będziesz wiedział czego się wymaga przy tego typu łamigłówkach.

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