Matematyka w życiu programisty

0

Ostatnio miałem ciekawą sytuację w pracy związaną z zastosowaniem matematyki. Mianowicie była sobie kolejka, z której pobierano elementy oraz przetwarzano je. Jeżeli dany element nie mógł zostać przetworzony (z pewnych względów) po czasie T to trafiał na koniec kolejki. Trzeba było dobrać optymalny czas T po którym element wracał do kolejki. Gdyby ten czas był za duży to elementy w kolejce czekały by zbyt długo na obsłużenie. Jeżeli zbyt krótki to elementy nieustannie trafiały by na koniec kolejki.
Zadanie wydaje się proste i zrozumiałe, zwłaszcza że są dużo bardziej skomplikowane kolejki. Zadaniem zajął się nasz architekt: 15 lat doświadczenia w zawodzie oraz ukończony Uniwersytet Wrocławski, więc nie wątpie, że matematykę znał dobrze. Próbował utworzyć model matematyczny dla tej sytuacji ale po pewnym czasie się poddał i stwierdził, że będzie lepiej napisać symulację. Z ciekawości zacząłem googlać o teorii kolejek i po 2h znalazłem dokument sprzed 50 lat, w którym autor matematyk rozwiązywał problem i podawał na końcu wzór, z którego można wyznaczyć minimum. Całe wyprowadzenie miało jakieś 40 stron i było strasznie skomplikowane. Na koniec autor dziękował jakiemuś profesorowi, że pomógł mu rozwiązać równanie z którym by sobie sam nie poradził.
Po tej sytuacji nasuwa mi się wniosek, że na prawdę szkoda czasu na naukę matematyki będąc programistą. Jak już w końcu trafi się zadanie, w którym można by użyć wiedzy matematycznej, to stworzenie modelu opisującego problem będzie zbyt skomplikowane dla człowieka po zwykłej informatyce. Taki model będzie w stanie stworzyć jakiś zdolny matematyk, który siedzi w teorii pół życia. A i to pewnie tylko wtedy, gdy zadanie nie będzie zbyt skomplikowane.
A co wy uważacie na ten temat? Przydała się komuś bezpośrednio matematyka w programowaniu komercyjnym?

0

Ale nikt przecież nie kazuje Ci się uczyć aż "takiej" matematyki. Wystarczy dobrze opanowac to co miałeś na studiach i tez jest OK.:)

0

No ale z taką co była tylko na studiach jeszcze mniej można zdziałać. Więc po co w ogóle się uczyć matematyki?

0

wszystko ok dopoki nie kaza ci grafiki programowac lub cos inzynierskiego :S

0

To może jakiś konkretny przykład, cepa.
Ja podałem przykład z poważnego systemu. Podaj mi przykład czegoś inżynierskiego/graficznego, w którym musiał bym od 0 sam opracowywać rozwiązanie i miałbym szanse opracować to rozwiązanie znając jedynie matme ze studiów :P

0

ot chociazby pierwsze co na googlach wyskoczylo:
http://http.developer.nvidia.com/GPUGems/gpugems_ch01.html

albo cokolwiek co ma w nazwie symulacja, nie twierdze ze wszystko trzeba wymyslac od nowa, ale powiedz mi ile procent programistow nadaje sie do klepania rzeczy jak chociazby link wyzej :)

0

Do grafiki wzory są dawno wyprowadzone, nie trzeba nic nowego wyprowadzać co najwyżej usuwać współczynniki które spowalniają obliczenia. Więc wystraczy co najwyżej użytkowa wiedza z matematyki a nie poryte dowody jakie się głównie robi na uniwersytetach.

0

Zupełnie nie rozumiem takich pytań. Oczywistym jest, że są dziedziny w informatyce, w których matematyka na wysokim poziomie jest bardzo ważna i są takie, gdzie w ogóle nie jest potrzebna.
Umieściłeś to w dziale Flame, czemu? Uważasz, że matematyka nie jest potrzebna?

0

Zupełnie nie rozumiem takich pytań. Oczywistym jest, że są dziedziny w informatyce, w których matematyka na wysokim poziomie jest bardzo ważna i są takie, gdzie w ogóle nie jest potrzebna.

Znowu jakieś konkrety prosze :P Wniosek z mojego pierwszego postu jest taki, że jak już się zdarzy, że matma jest potrzebna to się okazuje że tylko matematycy, którzy siedzą w jednym dziale pół życia są w stanie rozwiązać problem. A jak model się skomplikuje to i pewnie nawet oni tego nie potrafią.

0

A do flame wars dodałem, żeby mi moderator nie zamknął jeżeli się offtop zrobi :P

0
mefisto napisał(a)

się okazuje że tylko matematycy, którzy siedzą w jednym dziale pół życia są w stanie rozwiązać problem.
Ale czyja to wina? Matematyki? :)

Dobrze, rozumiem, że nie widzisz sensu w nauce matematyki na studiach. Ale co w związku z tym?
Program nauczania jest ustalany odgórnie, taki mamy model państwa. Musieli wybrać jakieś przedmioty. W takim systemie oczywiste jest, że będą zadowoleni i niezadowoleni. Wywalisz matmę, to część się oburzy (np ja), zostawisz, to inni będą marudzić.
Do niczego to nie prowadzi.

0

@up: chyba nie zrozumiales intencji autora. Pytaniem nie bylo dlaczego musimy sie uczyc matmy a dlaczego nie, i czy to lubimy czy nie. Pytanie bylo jakie mamy doswiadczenia z matma w pracy na codzien.
Ja od siebie moge napisac ze z jakas wyzsza matma nie mialem do czynienia, nie mialem potrzeby uzywac (moze zaraz dostane bure ze biore udzial w lamerskich projektach, kto wie, w koncu to flame ;d). Mialem za to wielki projekt ktory mial wiele wspolnego ze statystyka. Core robily osoby ktore umialy z matmy nieco wiecej, ludzie ktorzy nie dawali rady robili po prostu inne rzeczy, jak interfejs czy dostep do danych.
Co do samej nauki matmy to uwazam ze ona jest potrzebna, chociazby z tego powodu ze moze nie bede jakichs modeli tworzyl pozniej, ale uczy myslenia, rozwiazywania problemow itp. Mam kolege ktory co prawda sknczyl UAM w Poznaniu, jakastam informatyka, ale z matma to on raczej jest na bakier, i zauwazylem ze wymieka juz przy dosc podstawowych zagadnieniach, algorytmach (glupi nie jest, ma braki), i przez to sadze ze zawrotnej kariery nie zrobi.

0

Cóż, według mnie nie da się jednoznacznie odpowiedzieć na to pytanie. Podałeś akurat ekstremalny przykład, który okazał się bardzo złożony matematycznie, ale nie oznacza to, że wszystkie problemy związane z matematyką są takie.

Akurat ja pracuję przy projekcie, w którym matematyka jest jedną z najważniejszych rzeczy, jakie należy znać: implementacje dość złożonych algorytmów z zakresu Data Mining etc. Z drugiej strony, jeśli czyjaś praca to przede wszystkim tworzenie interfejsów i innych żmudnych, ale w gruncie rzeczy prostych zadań, to nie potrzeba do tego wyższej matematyki.

Ale mimo wszystko -- programista powinien znać matematykę na poziomie wyższym niż licealny. Na takim poziomie w gruncie rzeczy powinien ją znać każdy inżynier. Poza tym, już ktoś wspomniał: matematyka pomaga w myśleniu, projektowaniu, szacowaniu... Uczy "myślenia algorytmicznego", co jest podstawą pracy programisty.

Na Politechnice powiedział nam kiedyś jeden z wykładowców: "Z każdego matematyka można zrobić dobrego programistę. W drugą stronę to niekoniecznie działa".

0

jeśli czyjaś praca to przede wszystkim tworzenie interfejsów i innych żmudnych, ale w gruncie rzeczy prostych zadań

Mówisz o interfejsach graficznych? Jeżeli tak to bardzo się mylisz, mówiąc że to prosta i żmudna praca.

0
rincewind napisał(a)

Na Politechnice powiedział nam kiedyś jeden z wykładowców: "Z każdego matematyka można zrobić dobrego programistę. W drugą stronę to niekoniecznie działa".

MacGyver zrobiłby dobrego programistę z 3 zapałek i agrafki, a z Twojego profesora być może i telewizor.

Znam taką liczbę matematyków, którzy się do programowania (nawet pralki) nie nadają, że takie idiotyzmy już mnie nawet nie śmieszą.

rnd napisał(a)

Mówisz o interfejsach graficznych? Jeżeli tak to bardzo się mylisz, mówiąc że to prosta i żmudna praca.

Chętnie bym zobaczył tych geniuszy matematycznych trzaskających ot tak w pełni client-side aplikację przeglądarkową, oczywiście bez tego irytującego odświeżania strony.

W ogóle o czym jest ten temat? Chcę wbić gwoździa, to używam młotka, chcę coś policzyć, to używam matematyki. Jeśli nie umiem używać młotka, to proszę kogoś, kto umie, jeśli nie znam matematyki, to proszę kogoś, kto ją zna.
A jeśli będę chciał wylać fundamenty pod dom, to zamiast kopać i mieszać beton samemu (mimo, że potrafię) wynajmę koparki i gruszkę, bo będzie szybciej i taniej.

0

Zależy co mefisto uważa za znajomość matematyki. Jeśli podziela przekonanie polskiego systemu edukacji że matematyka to umiejętność zapamiętywania różnych, przesadnie długich wzorów (oczywiście bez cienia zrozumienia do czego są i co właściwie znaczą), to jestem raczej po stronie tych którzy twierdzą że matematyka jest na polu programowania raczej bezużyteczna. Jeśli jednak ktoś uważa (jak np. ja) że matematyka to sposób myślenia (kiedyś byłem nawet niezły, nigdy nie pamiętałem żadnego wzoru, zawsze wyprowadzałem taki jaki mi był potrzebny) to jednak trzeba przyznać że potrafi się mocno przydać.
Architekt oprogramowania o którym pisze Mefisto pewnie opanował umiejętność programowania (jak i matematyki) w rozumieniu pierwszej definicji, czyli na poziomie bezmyślnego odtwarzania utartych schematów (umie na pamięć QS, BST i inne a bez wzorców projektowych to pewnie nie umiał by włączyć klawiatury), natomiast nie posiadł umiejętności używania mózgu, spotkał się z czymś nowym i zwyczajnie zmiękł.
Co do samego zadania z kolejkami – niezbyt wymagające.

0

RFabiański - mylisz się - na UWr uczą głównie przeprowadzania dowodów a nie bezmyślnego zapamiętywania wzorów. Jestem ciekaw czy sam byś potrafił chociaż podejść do tego zadania.

0

Matma jest potrzebna np do:

  • gier (wszelkie możliwe transformacje i efekty, liczenie fizyki),
  • kodeków i filtrów (do dźwięku, obrazów, wideo etc, a także ogólna kompresja danych),
  • sztuczna inteligencja,
  • analiza algorytmów (gdzie trzeba rozwiązywać równania rekurencyjne, liczyć złożoności z całek, itp itd),
  • przyspieszania algorytmów - jeżeli jest dużo zwykłego liczenia to można uprościć równania, zmniejszyć ich liczbę, zmniejszyć liczbę dzieleń i innych skomplikowanych instrukcji,
  • efektywnego wzbogacania struktur danych (np drzew),

Z drugiej strony rzadko się przydaje do:

  • tworzenia CMS-ów,
  • programowania GUI,

Rzadko kiedy informacje są przetwarzane - np forum tylko składuje dane i je wyświetla, z jakichś operacji matematycznych to można co najwyżej uznać liczenie postów. Problemy informatyczne, w których nie ma matematyki na trochę wyższym poziomie są z reguły nudne i odtwórcze (klepanie kodu bez większego zastanowienia).

Twierdzenie, że wzory matematyczne zostały już wymyślone i nie trzeba się starać ich zrozumieć jest złe, gdyż często takie wzory trzeba efektywnie połączyć co jest trudne bez ich zrozumienia.

0

Mefisto – już ja dobrze wiem jak oni „uczą”. Najpierw wykładowca na wykładach dyktuje dowody, natomiast na egzaminie zadaniem studenta jest przepisanie dowodu. Oczywiście możesz powiedzieć że jak ktoś jest bystry to nie musi ich się uczyć na pamięć, tylko produkować je już na egzaminie. Niestety nie będzie to miało wiele wspólnego z prawdą gdyż na większości egzaminów nie ma czasu na myślenie tylko na szybkie i bezmyślne odtwarzanie (poza tym istnieje duża możliwość że twój dowód nie będzie identyczny z tym co podyktował wykładowca => 0pkt).
Co do kolejek : czas T dobieramy następująco (przynajmniej przy założeniu że zadanie można dokończyć od momentu jego wykonywania w którym trafiło na koniec kolejki, przy innych założeniach problem też nie komplikuje się zbytnio):
Jeśli f(t) jest funkcją rozkładu prawdopodobieństwa (zmienną losową) to T jest najmniejszą wartością taką że :
całka(0 .. nieskończoność, tf(t+T)dt)/całka(T..nieskończoność,f(t)dt)>całka(0..nieskończoność,tf(t)dt)+2czas przełączania

No i to tyle. (oczywiście mogą się pojawić drobne problemy z wyznaczeniem f(t) ale można to aproksymować w trakcie działania po czasach kilku pierwszych zadań z kolejki)

0

Znowu jakieś konkrety prosze :P Wniosek z mojego pierwszego postu jest taki, że jak już się zdarzy, że matma jest potrzebna to się okazuje że tylko matematycy, którzy siedzą w jednym dziale pół życia są w stanie rozwiązać problem

Problem: symulacja nieliniowych układów elektronicznych w dziedzinie czasu (inaczej analiza stanów nieustalonych)
Zakres wymaganej matematyki: algebra liniowa (macierze), rachunek różniczkowo-całkowy, rozwinięcie funkcji w szereg Taylora (potrzebne do schematów różnicowych używanych w dyskretyzacji).
Oprócz tego przydatna znajomość elektroniki i elektrotechniki.

Zamiast układów elektronicznych wstawić coś innego - np. obliczenia naprężeń w konstrukcjach (ok, bardziej złożone) albo obliczanie zysków ciepła w budynkach i mamy kolejne klasy problemów, gdzie matematyka wyższa jest niezbędna.
Z drugiej strony matematyka na poziomie dobrych studiów informatycznych w zupełności do tych zagadnień wystarcza i nie trzeba poświęcać pół życia by nauczyć się i zrozumieć te metody.

0

Chcesz mi powiedzieć, że model matematyczny do naprężeń będzie tworzył programista? Nie wydaje mi się.
Nawet w grach, gdzie nie ma jakiejś wielkeij odpowiedzialności, bardziej matematycznymi kwestiami zajmują się fizycy. Przykład: do wiedźmina wodę opracowywał fizyk.

0

Fizyk, czy nie fizyk, zależy co rozumiesz pod tym pojęciem. Czy chodzi Ci o osobę z wyższym wykształceniem z fizyki, czy kogoś, kto po prostu dobrze zna się na fizyce? Do modelowania wody wcale nie trzeba pół życia poświęcić na studiowaniu fizyki.
Po prostu trzeba przeczytać kilka mądrych książek, orientować się w matematyce wyższej (ale niewiele wyższej niż tej, która jest na studiach technicznych - tyle, że trzeba ją zrozumieć a nie ZZZ) i można siadać do programowania. Nikt WYMYŚLAĆ modelu nie każe - wystarczy zaimplementować któryś z istniejących. Metody rozwiązywania równań różniczkowych cząstkowych (np. FEM) są powszechnie znane i nauczane. I jest to w zasięgu zdolnego programisty z zacięciem inżynierskim.

0
Krolik napisał(a)

Problem: symulacja nieliniowych układów elektronicznych w dziedzinie czasu (...)

Zamiast układów elektronicznych wstawić coś innego(...)

To wszystko należy do dziedziny problemu, nie programowania.

0

Tak, zgadza się. Ale bycie programistą, który jest "tylko programistą", a nie inżynierem, i nie zna się na niczym więcej prócz klepania kodu, to straszna kicha jest. Podsumowując: istnieje wiele dziedzin poza programowaniem, gdzie nie trzeba poświęcać pół życia żeby coś ruszyć, ale znajomość matematyki na poziomie takim jak nauczany na studiach informatycznych bardzo ułatwia. Są dziedziny, gdzie tej matematyki jest więcej i są takie gdzie mniej, ale za to więcej czegoś innego (np. fizyki :P). Ostatnio pracowałem przy: http://www.gagabox.pl/ i znajomość teorii sygnałów okazała się przydatna.

0

Matma jest po prostu źle nauczana i w zły sposób zapisana. Nie dziwie się że ludzie nie nawidzą tego przedmiotu skoro jest opisany za pomocą setek twierdzeń i abstrakcyjnym dowodów z którymi nawet inteligentny człowiek ma masę problemów. W liceum nie uczą, na studiach wymagają, i nagle z 3ch lat podstawiania pod wzory trzeba zrozumieć pewne rzeczy z kosmosu - ciężko się nie wściec...

Ja bym chętnie nauczył się matmy na bardzo dobrym poziomie, szczerze, ale nie potrafię zrozumieć n-durnych twierdzeń, dowodów, itp, jeżeli ktoś mi wpierw tego łopatologicznie nie wytłumaczy na sensownym przykładzie. A wykładowcy generalnie mają to w dupie, tak jak mój gość od ćwiczeń który traktuje nas jakbyśmy wszystko wiedzieli, a jak czegoś nie wiemy, to tłumaczy nam tak że nadal nie wiemy (i czuję się przez to jeszcze głupszy ...).

Ja jestem na podniesieniem poziomy nie w liceum, ale już w gimnazjum, a w liceum zrobić przygotowanie na studia, a nie żeby uczniowie się wpisywali do modelu odpowiedzi, i na pewno więcej osób na tym skorzysta.

0

To prawda, denerwuja mnie tez ksiazki do matmy. Nie rozumiem danego problemu więc biorę jakąś książkę, czytam i dalej nie mogę zrozumieć więc biorę kolejną, a tu sie okazuje ze pomimo ze autorzy różni to treść książek prawie identyczna, tak jakby zerżnięte z jakiejs jeszcze innej. Dotyczy to nie tylko matmy. Nie wiem skad to sie bierze ze tzw profesorowie nie potrafia sami napisac jakiejs sensownej ksiazki tylko kopiuja z jakiegos zbioru z przed kilkudziesieciu lat

1
a_s_f napisał(a)

Nie wiem skad to sie bierze ze tzw profesorowie nie potrafia sami napisac jakiejs sensownej ksiazki tylko kopiuja z jakiegos zbioru z przed kilkudziesieciu lat

Bo to debile?
Sorry, ale jeśli ktoś nie jest dydaktykiem i nie umie uczyć, to nie powinien być profesorem. Tacy ludzie tylko szkodzą, także nauce.
Najciekawsze jest to, że zazwyczaj im niższy tytuł/stopień, tym lepiej dana osoba potrafi wyjaśnić zagadnienie.

0

Ja mam teraz wykład z magistrem (!!!) i jest jednym z lepszych wykładowców z jakimi miałem do czynienia. Wykłada teorie sygnałów (dosyć matematyczny przedmiot) i naprawde potrafii tłumaczyć.

0

Politechnika Łódzka zrobiła program którym można monitorować i badać rozwój/postępy w leczeniu udaru mózgu na postawie głosu. Program dostał już jakieś GrandPrix w Brukseli. Komu należy przypisać większy udział, matematykom i twórcom algorytmów, czy tym co klepali kod? Kto powinien być bardziej wyróżniony, Huffman czy ten kto zaimplementował jego algorytm? Kiedyś projektowanie aplikacji odbywało się na zasadzie architekt, robol, a konkretniej projektant algorytmów, klepacz kodu.

0

Czasem zaimplementowanie algorytmu sprawia więcej problemów niz jego wymyślenie:)

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