Czy w dzisiejszych czasach warto uczyć sie algorytmów, jak i matematyki?

2

Nurtuje mnie ostatnio pytanie z którego postanowiłem napisać ten temat. Czy w dzisiejszych czasach warto uczyć sie algorytmów, jak i matematyki? No bo kto z was w pracy w ogóle zastanawiał się jakiego algorytmu użyć do posortowania danej kolekcji? Bo zakładam, że nad użyciem konkretnego rodzaju kolekcji to się jeszcze trzeba czasem zastanowić, ale przecież już i tak się jej nie implementuje, bo wszystko w bibliotece standardowej. Tak samo z matematyką, większość rzeczy opakowana jest w rożne biblioteki i wystarczy powywoływać kilka funkcji i wszystko mamy gotowe. Dlatego zastanawia mnie czy ktoś z was po pracy poświęca część swojego czasu na takie rzeczy czy raczej uważacie to za stratę czasu i rzecz niepotrzebną? A może komuś z was serio przydaje się taka wiedza w pracy zawodowej? Wszelkie wypowiedzi mile widziane :)

0

Sortowań nikt raczej samemu nie pisze (chyba, że w ekstremalnych przypadkach) jednak samą algorytmikę warto znać. Np. algorytmów grafowych, sortowania topologicznego, generatorów kombinatorycznych, etc. nie ma i nigdy nie będzie w bibliotece standardowej. Tak samo z matmą. Co z tego, że jakieś są tam biblioteki, skoro często potrzebujesz coś policzyć i wyoptymalizować w trakcie pisania kodu, by wstawić gdzieś stałą. Jak chcesz zrozumieć problem przepływu, komiwojażera, czy inne NP (oraz jak udowodnić, że są NP-zupełne) bez znajomości matmy? To tak jakby stwierdzić po co nam samochody, skoro można latać helikopterami.

0

Oczywiśćie, że algorytmika (przede wszystkim) i matematyka (troszkę mniej) są bardzo istotne. Szczególnie dla kogoś nowego w dziedzinie programowania.
Nie sposób nauczyć się dobrze programować, jeśli dana osoba nie potrafi implementować algorytmów. Wynika to z prostej przyczyny: programowanie to dziedzina, która kładzie duży nacisk na myślenie analityczne a tego myślenia nie sposób nacuzyć się bez implementacji często zawiłych, a zarazem ciekawych problemów algorytmicznych.
Programy użytkowe to tylko wynik wcześniej włożonej pracy w to aby potrafić myśleć analitycznie - a algorytmy i matematyka są do tego celu bardzo przydatne.

Poza tym nie ma czegoś takiego jak "wszystko jest w bibliotece standardowej", bo tam tak naprawdę jest bardzo niewiele. Jeśli kiedykolwiek spotkasz się z prawdziwym problemem matematycznym to zobaczysz, że prędzaj sam sobie napiszesz własnego "math"-a niż skorzystasz z gotowca, bo w nim aż tak dużo nie ma, jedynie tyle ile potrzebne jest to na co dzień.

W pracy ostatnio musiałem implementować własne sorotowanie - taki wyjątkowy przypadek.

0

No właśnie ja też wcześniej miałem takie podejście, choć i tak zawsze bardziej przykładałem się do poznawania nowych języków programowania, frameworków itp. I teraz gdy pracuje ile jest dalej nowych rzeczy do poznawania, mało tego, uczenie tego sprawia mi najzwyczajniej przyjemność i czuję, że sie rozwijam. Tylko własnie przestałem poświęcać czas na algorytmy itp a poznaję "tylko" nowe narzędzia i zacząłem się zastanawiać czy jest to normalna kolej rzeczy czy może faktycznie powinienem jednak część czasu poświęcić na jakiś własny, domowy projekcik bardziej algorytmiczny. Chodzi mi o to czy waszym zdaniem warto czy jest to raczej tylko sztuka dla sztuki.

0

Widać tutaj słabość myślenia w kategoriał modułów, bo źle postawiłeś granicę - ona powinna przebiegać w miejscu najmniejszego interfejsu. Zatem pytanie powinno brzmieć: Czy warto w dzisiejszych czasach w ogóle uczyć się programowania? Przecież prawie wszystkie potrzebne programy są już napisane, a Google właśnie pisze pozostałe kilka i niedługo je udostępnią. Będziesz mógł używać wszystkich programów za jedynie jedną nerkę, a jak wiadomo dwóch nerek nikt nie potrzebuje. ;P

0

:D może i coś w tym jest :P chociaż też nie do końca zrozumiałeś o co mi chodzi. Ja nie neguję potrzeby tych dziedzin, ale nie oszukujmy się nie każdy z nas pracuję, gdzieś gdzie wynajduję rozwiązania "naprawiające świat". I chodzi mi bardziej o to czy jak nie jest się naukowcem itp to czy warto dalej wydzielać ten czas na algorytmy i matematykę czy jednak lepiej skupić się na aspektach czysto biznesowych. Bo jednak czas jest ograniczony, więc jak zajmiesz sie nawet w niewielkim wymiarze jednym, to delikantnie i tak będziesz musiał delikatnie ograniczyć drugie. I pytanie czy warto, czy może to mieć jakiś wplyw na karierę.

3

Ale jakim problemem jest poznać nowy język programowania czy framework? Jeśli umiesz programować to jest to maks tydzień.

Do Google np. nie dostaniesz się jeśli nie będziesz znał algorytmiki, bo z tego co wiem to rozmowa obija się głównie o to. Wychodzą z założenia, że jeśli umiesz myśleć to nauczenie Ciebie dowolnego języka to kwestia 2-3 tyg. @anonim1 ja na przykład nie potrafię wyobrazić sobie Ciebie, który pisze w Haskellu bez znania matematyki i algorytmiki.

2
anonim1 napisał(a):

Bo zakładam, że nad użyciem konkretnego rodzaju kolekcji to się jeszcze trzeba czasem zastanowić, ale przecież już i tak się jej nie implementuje, bo wszystko w bibliotece standardowej.

Nie wszystkie, raptem kilka najczęściej używanych. A czasem zdarzają się sytuacje, w których żadna z nich nie jest optymalna.

anonim1 napisał(a):

Tylko własnie przestałem poświęcać czas na algorytmy itp a poznaję "tylko" nowe narzędzia i zacząłem się zastanawiać czy jest to normalna kolej rzeczy czy może faktycznie powinienem jednak część czasu poświęcić na jakiś własny, domowy projekcik bardziej algorytmiczny. Chodzi mi o to czy waszym zdaniem warto czy jest to raczej tylko sztuka dla sztuki.

O ile nie jesteś naukowcem, to poznawanie nowych narzędzi i bibliotek przydatnych w pracy przełoży się dla Ciebie na korzyść finansową, a poznawanie algorytmów niekoniecznie. W Twojej sytuacji (jak i mojej, i tysięcy innych osób tutaj) to trochę sztuka dla sztuki, ale myślę, że i tak warto.

winerfresh napisał(a):

Ale jakim problemem jest poznać nowy język programowania czy framework? Jeśli umiesz programować to jest to maks tydzień.

Może i jest kilka języków i frameworków, które da się ogarnąć w tydzień, ale raczej nie mają one poważnych zastosowań. No chyba, że przez "poznanie" uznajesz poznanie ich nazwy, to wtedy ok. :P
Dla mnie "znajomość" języka/frameworka oznacza możliwość efektywnego korzystania z niego, i znajomość jego wewnętrznych mechanizmów. Żeby to osiągnąć trzeba napisać projekt, dwa lub trzy, a z tego robi się raczej rok niż tydzień.

1

Mam wrażenie, że @somekind najlepiej zrozumiał, co jest moim dylematem :) też uważam, że nauczenie się nowego języka w 2 tygodnie to bzdura, chyba że mówimy o samym poznaniu składni, ale to raczej po poznaniu składni nie szukał bym pracy w tym nowym języku :P

somekind napisał(a):
anonim1 napisał(a):

Bo zakładam, że nad użyciem konkretnego rodzaju kolekcji to się jeszcze trzeba czasem zastanowić, ale przecież już i tak się jej nie implementuje, bo wszystko w bibliotece standardowej.

Nie wszystkie, raptem kilka najczęściej używanych. A czasem zdarzają się sytuacje, w których żadna z nich nie jest optymalna.

Ale ile razy musiałeś optymalizować kod pod względem używania kolekcji? Moje wrażenie jest takie, że najczęściej optymalizuje sie baze (np. indeksy), a jeżeli chodzi o kod to się patrzy czy jakoś bez sensu nie składało się zapytań w orm-ie:P

somekind napisał(a):

O ile nie jesteś naukowcem, to poznawanie nowych narzędzi i bibliotek przydatnych w pracy przełoży się dla Ciebie na korzyść finansową, a poznawanie algorytmów niekoniecznie. W Twojej sytuacji (jak i mojej, i tysięcy innych osób tutaj) to trochę sztuka dla sztuki, ale myślę, że i tak warto.

No własnie, ale czemu warto? Bo chyba tu jakoś zgubiłem powód :P

5

@anonim1 warto żeby rozwijać myślenie :) Algorytmika nie polega na wkuciu kilku sortowań, tylko na sposobie podchodzenia do problemów z którymi się spotykamy. Jasne że w pracy pewnie nie będziesz musiał nagle rozwiązać problemu plecakowego, albo nie dostaniesz do napisania szukania przepływu w grafie, ale dostaniesz inne problemy, które wymagają pewnego analitycznego podejścia.

Poza tym często warto rozumieć jak działa algorytm X czy struktura danych Y, żeby wiedzieć kiedy go użyć a kiedy też nie. I nie chodzi mi tutaj o to czym się różni ArrayList od LinkedList a na przykład o to kiedy lepiej użyć ConcurrentHashMap a kiedy zwykłej mapy synchronizowanej.

0

Dzięki, chyba czegoś takiego potrzebowałem :) po prostu teraz mam dużo nowych rzeczy do pracy i jakoś tak poczułem, że może nie warto tracić czasu na "bzdury". Dzięki za wyprowadzenie z błędu :)

0

Myślę, że warto, a nawet bardziej warto niż poznawać nowe technologie. Dlaczego? Ponieważ ucząc się algorytmiki (nie mam na myśli wkuwania algorytmów np. na sortowanie, ale różne techniki, jak np. programowanie dynamiczne), pomijając fakt, że umiesz też zmodyfikować dane algorytmy do swoich potrzeb (co jest zwłaszcza przydatne przy strukturach danych), uczysz się rozwiązywać abstrakcyjne problemy, co jest w zasadzie najważniejsze w pracy programisty. Wydaje mi się, że przekłada się to także na umiejętności związane z inżynierią oprogramowania, bo jak rozumiesz algorytmy, to łatwiej też zrozumieć jak działają rozbudowane systemy. Poza tym wymyślanie algorytmów rozwija kreatywność, w końcu praktycznie zawsze trzeba się wykazać nieszablonowym myśleniem.

Co do matematyki, to też myślę, że warto znać. Np. taka umiejętność myślenia różniczkowego, może się przydać kiedy byś implementował przykładowo jakiś system kierujący przepływem informacji (możliwe, że będzie trzeba tutaj wykonać jakieś obliczenia). Na pewno jest przydatna logika, choćby przy minimalizowaniu warunków w if-ach, czy pętlach. Nie mówiąc już o teorii grafów, myślę, że każdy dobry programista powinien umieć przedstawiać różne problemy w postaci grafów (podobno to jest podstawowa wiedza jaką sprawdzają przy rekrutacji do Google'a).

Oczywiście można pisać programy nie znając się na algorytmice ani matematyce, ale trzeba się liczyć z tym, że każdą pracę nie wymagającą kreatywności można łatwo zautomatyzować (nie licząc zawodów fizycznych, ale to do czasu).

1

Programowanie bez znajomości matematyki to praca przez powtarzanie czegoś kto coś już zrobił.
Można być majstrem który powtarza coś co ktoś kiedyś mu pokazał - i to jest całkiem OK.
Można też być inżynierem, który wie co robi i dlaczego to robi oraz jak to zastosować do zupełnie nieznanego problemu.

Często w pracy wystarczy być takim majstrem - zwłaszcza jeśli się pracuje w korporacji nie-informatycznej.

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