Kierunek rozwoju / pozycja programisty, skupiony na stosowaniu algorytmów i struktur danych

0

Dzień dobry Wszystkim.

Jestem nowym forumowiczem. Dołączyłem do forum, ponieważ pomyślałem, że fajnie by było mieć kontakt, z innymi programistami i wdać się od czasu do czasu w jakąś dyskusję.

Może kilka słów o sobie. Pierwszą linijkę kodu napisałem z 5 lat temu. Pracowałem przy hardware (tu nie miałem do czynienia zbyt wiele z programowaniem) i na front-endzie. Poza tym próbowałem różnych języków i różne rzeczy pisałem dla nauki.

Zauważyłem, że najwięcej satysfakcji daje mi i najwięcej sensu widzę w nauce algorytmów. Lubię się skupiać, lubię rozgryzać je, lubię implementować. Myślę, że to najwięcej mi daje, jeśli chodzi o własny rozwój, rozwój własnego myślenia. Język nie gra tutaj roli, nie jestem ani szczególnym zwolennikiem, ani przeciwnikiem danego języka programowania, ważne żeby to był język wysokiego poziomu (to raczej większość z jakimi pracujemy), aczkolwiek jak najbardziej może służyć on do programowania zadań niskiego poziomu, czyli na przykład tak jak język C.

Moje pytanie jest takie, ponieważ nie wiem za bardzo na czym się skupić: W jakim kierunku kierować swój rozwój jako programista, aby mieć najwięcej do czynienia z algorytmami (i strukturami danych), w szczególności z tymi bardziej zaawansowanymi?

Mam mętlik w głowie, ponieważ z jednej strony ktoś powie, że "algorytmy są wszędzie", z drugiej strony wiemy, że to nie do końca tak. Ja naprawdę bym chciał uderzyć, w takie coś, aby zdobyć doświadczenie w stosowaniu różnych algorytmów (i struktur danych). Tak żeby dobrze je zrozumieć i stać się biegły, w ich stosowaniu. Czy ktoś może mi podpowiedzieć, na czym się skupić, aby tego typu zadań było jak najwięcej w miejscu pracy? Może ktoś też byłby w stanie podsunąć jakieś firmy, gdzie szukają tego typu ludzi, którzy stawiają na taki kierunek rozwoju?

Pozdrawiam

5

Algorytmy są... na rekrutacji.

Ostatnio byłem w Amazonie i mi tym przyj**li: https://www.geeksforgeeks.org/counting-inversions/
Nie udało mi się dojść do rozwiązania O(nlogn) więc mnie uwalili (nie żałuje bo dowiedziałem się - nie od rekruterki oczywiście - że w polsce mają 24h on-call - dla mnie nie akceptowalne). Poza tym moja wina bo nie spędziłem, jedynie 2 tyg. klepiąc zadania po 12h dziennie :D

Poza tym powyżej to 2 lata praktycznie bez potrzeby jakiejkolwiek algo zagwozdki :P

Jak chcesz algorytmy to:

  1. Musisz być naprawdę dobry, uwierz tam są naprawdę dobrzy ludzie po olimpiadach, tu żadne 10 ciężkiej pracy nie pomoże jak brakuje geniuszu
  2. Rekrutuj do FANGów lub startupów które robią innowacyjne rzeczy np. virtual reality, AI - to się teraz rozwija. W algorytmach sortowania są już tylko przyrostowe postępy.
2

No to zacznij robić coś praktycznego np. implementuj rzeczy, które rzeczywiście u podstaw mają ciekawe algorytmy. Pisz systemy operacyjne, kompilatory, edytory, silniki gier, bazy danych.

6

Game Dev

6

W normalnej pracy raczej algorytmów nie uświadczysz specjalnie, bo liczą się krótkoterminowe cele biznesowe, a nie to, żeby zrobić coś bardziej ambitnego. Prędzej cię skrzyczą, że implementujesz samemu algorytm, zamiast użyć biblioteki.

Mam podobny problem i doszedłem do wniosku, że jak chcę robić ambitnego, to lepiej nie oczekiwać cudu tylko zacząć budować własne produkty (i tu będę mógł zahaczyć o gamedev, algorytmy związane z grafiką, machine learning, optymalizację, tworzenie własnego języka programowania wraz z parserem, interpreterem itp. Mógłbym jakoś wykorzystać skille programistyczne, a nie tylko znajomość frameworków)

Druga opcja to nauczanie innych. Wiele osób tak się wybija, wystarczy popatrzeć na popularne kanały na Youtube o nauce algorytmów czy matmy z nimi związanej. A na algorytmy będzie ciągły popyt, dzięki temu, że na studiach są wymagane, więc dopóki studia informatyczne będą modne, to będzie na nie zapotrzebowanie.

Trzecia opcja to robienie czegoś dla siebie albo open source, traktowanie tego jako hobby. Kto powiedział, że trzeba zarabiać na tym, co się lubi. Jakby każdy robił, co lubi, to nie byłoby komu sprzątać kibli. A praca programisty to też trochę takie sprzątanie kibli tylko mniej zdrowe, bo praca siedząca. Więc czemu oczekiwać, że praca będzie dawać spełnienie?

4

OPie, jesteś trochę jak matematyk, który lubi rozwiązywać całki i pyta się, gdzie mógłby na tym zarabiać. Jak raz na ruski rok muszę policzyć całkę, to wpisuję to do Wolfram Alpha albo do stack overflow. Nie wyobrażam sobie, żebym miał za to komuś płacić.
Podobnie jest z algorytmami i strukturami danych. To już właściwie zamknięta dziedzina oprócz mentalnej masturbacji na maszynach Turinga.
Możesz oczywiście zostać na uczelni i robić karierę w informatyce teoretycznej, ale mam wrażenie, że by cię to nie kręciło.

Jeżeli bawią cię klimaty wymyślania skutecznych rozwiązań i eksperymentowania, to sugeruję skręt w stronę sztucznej inteligencji. To akurat bardzo perspektywiczna dziedzina. Niestety z jakiegoś powodu trzeba lubić Pythona, żeby się tym zajmować zawodowo.

0

Hej. Jak dla mnie naprawdę spoko odpowiedzi, dzięki za wszystkie. Każda z nich, to jakiś punkt widzenia, które rozszerzyły mój własny.

Dobrze. W takim razie chciałbym jeszcze pociągnąć temat, bo wydaje mi się, że mogę uzyskać od was sensowne odpowiedzi.

Może trochę wylewności i szczerości. Mój problem jest taki i ciągnie się to za mną już od jakiegoś czasu, że chcę ciężko pracować i nie oszczędzam się w innych sferach życia, aczkolwiek w kwestii IT (zawodowo) brakuje mi motywacji. Nie pozbawia mnie motywacji ciężka praca, pozbawia mnie motywacji, potencjalny końcowy rezultat, które jest mocno zamglony dla mnie, nie widzę go. Nie widzę żadnej konkretnej pozycji zawodowej, do której miałbym dążyć.

Ten pomysł z algorytmami wziął się z tego, że szukam czegoś takiego żeby się wyróżnić, wypełnić nisze i może to być nawet "sprzątanie kibli" tak jak to ujął jeden z kolegów wcześniej (aczkolwiek pisał to akurat w innym kontekście). Może to być coś czego nikt nie chce robić, ja ten ciężar mogę wziąć na siebie, ważne żeby mieć satysfakcję i mieć taką sytuację, że coś się zrobiło konkretnego, że dało to określony rezultat, jakieś konkretne stanowisko/pozycję.

Generalnie, w swoim własnym czasie potrafię dużo rzeczy zrobić i wyegzekwować na sobie odpowiednią samo-dyscyplinę, natomiast jeśli chodzi o rozwój zawodowy, to wygląda to inaczej, póki co nic takiego nie znalazłem, aby mieć odpowiednią motywację do pracy zawodowej. Swoje własne rzeczy, nie związane z pracą zarobkową, a które "czuje" i mnie pociągają potrafię doprowadzić do końca i właściwie cały czas takie rzeczy robię, a zawodowo na nic jeszcze takiego nie trafiłem.

Natomiast, jeśli ścieżka zawodowa wiązałaby się z uzyskaniem jakiejś konkretnej pozycji, to to w tym wypadku, byłoby tą motywacją, dla której nie potrzebowałbym jakichś dodatkowych sposobów na motywowanie się, a na boku robiłbym własne rzeczy, w tym te niezwiązane z IT, które przychodzą mi naturalnie.

Więc pomyślałem o algorytmach itd., tylko, że faktem jest, że jest to coś z czym ma się do czynienia na studiach i wielu ma okazję się tym zainteresować i rozwinąć te umiejętności. Starając się o pracę, konkurencja jest dość duża i wezmą tych najlepszych. Trzeba pomyśleć o czymś innym, trzeba wziąć coś na klatę, co nie jest zbyt popularne wśród kandydatów, a poszukiwane wśród pracodawców. Może ktoś coś podpowie?

Moim zdaniem regularnie jest robiony hype na coś, tylko nie koniecznie znajduje to potwierdzenie w rzeczywistości. Rzeczy zdobywają na popularności wśród większości, o tym się mówi, zostało to napompowane, a inaczej to wygląda na rynku pracy. Ktoś się orientuje, jakie umiejętności są faktycznie poszukiwane przez pracodawców i nie ma tam "100 kandydatów na 1 stanowisko", w tym i te kierunki, w które mało kto zmierza? Ktoś kojarzy coś takiego? Ma jakąś wiedzę o tym?

Pozdrawiam

7

Dobrze rozumiem, ze Ty zwyczajnie chcesz zostac hipsterem?

To moze Haskell. Pracy malo ale kandydatow tez malo :D

0

@rigel33 Twój problem polega na tym, że nie potrafisz wyrażać się jasno i konkretnie. Zaczynasz coś pisać i nagle do Twojego zdania wchodzi kilka innych pobocznych myśli, wątków, które również domagają się pierwszeństwa i stąd zakłócają cały przekaz.

Jeśli jesteś rozkojarzony i nie potrafisz wyrazić tego co co czujesz, myślisz i potrzebujesz to przed sobą masz o wiele większy problem niż rozterki na temat życia, rozwoju czy pracy.

Zacznij pisać krótsze zdania. Zacznij zastanawiać się czy zdanie które piszesz coś wnosi, czy do czegoś prowadzi, w przeciwnym razie odpuść i nie zapisuj.

1
stivens napisał(a):

Dobrze rozumiem, ze Ty zwyczajnie chcesz zostac hipsterem?

To moze Haskell. Pracy malo ale kandydatow tez malo :D

Jest jeszcze Scala. Trochę mniej hipsterska, ale IHMO niesłusznie ma opinie języka trudnego przez co jest mało chętnych, a coraz więcej ofert. Dodatkowy plus jest taki że od funkcyjnej Scali do Haskella już mały krok

0

@stivens

"Dobrze rozumiem, ze Ty zwyczajnie chcesz zostac hipsterem?

To moze Haskell. Pracy malo ale kandydatow tez malo :D"

Nie, raczej nie. Myślę, że znajdę sobie coś do roboty, nie zostając hipsterem. ;-)

A co do samego Haskell'a, to rzucę na niego okiem. Dzięki.

0

@KamilAdam

O super. Mamy jeszcze Scalę. Będę badał. Dziękuję!

4

Problem z tworzeniem zaawansowanych algorytmów jest taki, że tego się nie robi w pracy programisty. Jak spojrzysz na różnego rodzaju sortowania, wyszukiwanie drogi w grafie, rozwiązywanie układów równań itd. to generalnie ktoś to kiedyś wymyślił, napisał na ten temat pracę naukową, czy doktorat, tłum jajogłowych zabrał się za krytykę, wyszukiwanie warunków szczególnych i udoskonalanie pisząc swoje prace. Na koniec trafiło to do biblioteki standardowej języka i wszystko co musisz zrobić to lista.sort(). Jeżeli chcesz się zajmować faktycznie algorytmami, to praca naukowa jest chyba jedyną drogą (na uczelni, bądź w korporacyjnym R&D). Jeżeli chcesz jednak programować, to proponuję zająć się dziedzinami takimi jak symulacje, optymalizacja, przetwarzanie rozproszone, big data, może jeszcze w AI coś się znajdzie do rozkminienia.

0

Algorytmy grafowe to chyba akurat ciezko znalezc w bibliotece standardowej :)

2

Problem z pisaniem algorytmów jest taki, że tego nie robi się w standardowej pracy Deva w Polsce. Odnoszę wrażenie że jesteś odklejony od rzeczywistości albo nigdy nie pracowałeś.
Programista musi dostarczać wartości biznesowa firmie w danym okresie czasu, czyli napisać jakiś program np. CRUD'a biznesowego korzystając z Javy i Angulara (typowy stack w korpo). To najwięcej robiłem przez 3.5 roku pracy. Większość algorytmów z których korzystałem miałem już zaimplementowane w bibliotekach typu Apache Commons, czy wyższego rzędu frameworkach typu Spring.

Kolejna sprawa jest taka, że jak faktycznie tego typu tematyka Cię interesuje mocno to mimowolnie zaczynasz udzielać się w tych tematach, czy to pod specyficznymi tagami na Stackoverflow, czy grupach zamkniętych, czy projektach Open Source na Githubie. Zyskujesz wtedy renomę wśród branży, specyficznego grona ludzi, a uwierz mi że są headhunterzy którzy plądrują takie miejsca w poszukiwaniu ludzi od zadań specjalnych w tym przypadku algorytmów i oferują grubą flotę wraz z relokacją.

Stąd trochę zdziwiony jestem, że mówisz że nie wiesz jak się do tego zabrać, moim zdaniem to samo powinno przyjść jak się jest w czyms dobrym, mocno wkręconym to ludzie sami oferują Ci robotę w danej specjalizacji.

Przypadek z mojego ogródka był taki że kiedyś mocno interesowałem się integracja API i siedziałem na pewnym Slacku gdzie ludzie dyskutowali o tym i tam non stop pojawiał się ktoś kto oferował pracę dokładnie przy integracji API. Myślę że to działa też na innych płaszczyznach. Może tędy droga...

2
kevin_sam_w_domu napisał(a):

Problem z pisaniem algorytmów jest taki, że tego nie robi się w standardowej pracy Deva w Polsce.

Z jedną uwagą -- Polska nie ma tu nic do rzeczy. :) To jest po prostu -- jak napisał na przykład @piotrpo -- praca naukowa, a nie programistyczna. Która może być (i bywa) uprawiana także w firmach (i także w Polsce).

2
koszalek-opalek napisał(a):

Z jedną uwagą -- Polska nie ma tu nic do rzeczy. :) To jest po prostu -- jak napisał na przykład @piotrpo -- praca naukowa, a nie programistyczna.

Tak i nie. Takie np. MapReduce to powstalo chyba w Google a nie na uniwersytecie.

EDIT: Aa, nvm. Dodales to o firmach jeszcze.

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