UPDATE: Ważna uwaga: post jest o "matematyce" w sensie "matematyki nauczanej w szkołach [do średniej włącznie]". Natomiast nie poruszam w nim kwestii typu "matematyczne podejście do informatyki", "matematyczne myślenia", czy też "dodatkowe zdolności nabywane podczas nauki matematyki" - te zagadnienia są poza zakresem niniejszego postu i się do nich w żadnym momencie nie odnoszę :)
W skrócie (parafrazując pewną kwestię z pewnego filmu): There is no single answer.
Miało być z mojego punktu widzenia, a także związane z tym co codziennie robię (rozszerzę słowo "praca" do "to czym się zajmuje"), więc zacznę od rozważenia co z matematyki potrzebuje w tym czym się zajmuje.
A. Matematyka w hackingu/security
W zasadzie od razu można wskazać kryptografię/kryptologię (którymi w zasadzie się nie zajmuje, ale o którym imo warto wspomnieć) jako dział w którym potrzeba masę matematyki, ale tylko jeśli:
1. tworzy się nowe algorytmy,
2. testuje/bada istniejące algorytmy/implementacje,
3. implementuje istniejące.
Natomiast pierwszy i ostatni punkt stoją w sprzeczności z zasadami używania kryptografii:
- "Nie twórz własnych algorytmów kryptograficznych" (chyba, że jesteś ekspertem od tego i spędziłeś nad tym N lat, i N kryptologów to przetestowało)
- "Nie re-implementuj algorytmów kryptograficznych" (używaj sprawdzonych i przetestowanych implementacji; przypominam, że z tego powodu PS3 padło (od ~35 min))
W każdym z powyższych punktów matematyka wyższa (czyli nie to co uczą w szkołach średnich/gim/podstawowych) na dobrym poziomie jest mile widziana.
Ale jak wspomniałem - tym się raczej nie zajmuje. Więc... ile matematyki widzę w tym czym się zajmuje (pentesty / security review / vulnerability research / etc)? Mało.
W zasadzie przydaje się podstawowa arytmetyka (również w systemie binarnym i hexadecymalnym), trochę algebry, trochę teorii grafów (chociaż używa się to raczej w sposób intuicyjny niż sformalizowany), trochę prawdopodobieństwa i statystyki (tj. trzeba wiedzieć, że 2 do potęgi 128 to jest trochę dużo ;p), trochę logiki, etc.
Sądzę, że można spokojnie z wiedzą ze szkoły średniej zajmować się z powodzeniem hackingiem/security, mając jednak na uwadze, że pewnych rzeczy trzeba będzie się douczyć.
Przeglądając papierki akademickie z tej dzieciny można stwierdzić, że badacze akademiccy starają się trochę więcej matmy wrzucić do security (tym ciekawiej ;>).
B. Matematyka w RE
Raczej jest jej mało, podobnie jak w security (póki co najwięcej matmy potrzebowałem do Ent'a). Może trochę więcej teorii grafów (szczególnie jeśli pisze się jakieś ciekawsze toolsy).
Jeśli chodzi o krypto w RE to jest jak w security, przy czym trzeba wziąć pod uwagę, że często krypto (jak i kompresja) są raczej używane do obfuskacji kodu (i są deszyfrowane/dekompresowane przed uruchomieniem), niż w klasycznym zastosowaniu typu "prześlij dane przez niezaufane medium". No i jest tu trochę więcej home-made algorytmów kryptograficznych do rozbrajania :)
C. Matematyka w programowaniu
W zasadzie programowanie to narzędzie, używane w masie rożnych dziedzin informatyki, więc skupie się na trzech (mi bliskich) dziedzinach/pseudodziedzinach:
C.1. Matematyka w gamedev
Jest i to miejscami sporo. Szczególnie arytmetyka/algebra (również ta używana w kinematyce; poruszanie, kolizje, etc), teoria grafów (pathfinding; gra The Settlers jest kapitalnym przykładem grafów w grach komputerowych), prawdopodobieństwo + statystyka (gameplay / balansowanie gameplay'u), standardowo logika + to co używa się w grafice i obróbce dźwiękowej.
Ale... w zasadzie dobrze opanowany program szkoły średniej (oprócz grafiki/etc - patrz niżej) w zasadzie powinien wystarczyć (+ ofc douczanie się w miarę potrzeb).
C.2. Matematyka w grafice komputerowej
UPDATE: Oczywiście (jak się okazuje, nie dla wszystkich ;>), chodzi mi o tego typu "programowanie grafiki", a nie rysowanie/modelowanie używając Photoshop/Gimp/3DMax/Blender/etc :)
Bardzo dużo. W zasadzie sama matematyka, a w szczególności algebra, funkcje (bardzo ubolewam nad faktem, że w [niektórych] szkołach uczą analizować funkcje, ale nie uczą ich tworzyć - to się bardzo przydaje, zarówno w gamedev jak i w grafice), etc.
Warto pamiętać, że sporo zagadnień z grafiki komputerowej stosuje się przy gamedev (szczególnie od kiedy akceleratory 3D wprowadziły shaderki, chociaż i wcześniej tego było niemało).
Anyway, tu się przydaje jednak trochę wiedzy nabywanej normalnie na studiach (szczególnie z algebry, trochę też z analizy, etc).
C.3. Matematyka w drobnych narzędziach
Matematyka w narzędziach typu "program kopiujący" czy "listujący pliki na dysku" w zasadzie nie istnieje, poza (standardowo) podstawami arytmetyki czy algebry (i może trochę ciągów).
Bottom line A+B+C: Gamedev i grafika komputerowa to dwie główne dziedziny (spośród zagadnień którymi się zajmuje) w których widzę, że tej matematyki faktycznie jest więcej. W reszcie dziedzin użycie matematyki jest w zasadzie na poziomie podstawowym/średnim.
Natomiast przypominam, i to jest bardzo istotne, że ani informatyka, ani programowanie, nie ogranicza się do tego co wymieniłem wyżej. Czyli są jeszcze inne dziedziny, w których tej matematyki używa się raz mniej (np. webdesign [?]), a raz więcej (skrajnym przypadkiem są wszelkie dziedziny naukowe w których przydaje się programowanie i metody numeryczne, itp).
Jest jeszcze jedna kwestia której nie poruszyłem - algorytmika. No tak... w algorytmice matematyki jest kapkę więcej (w zasadzie z mojego punktu widzenia algorytmika == programowanie * matematyka). Natomiast, czym innym jest implementacja algorytmu, a czym innym jest wymyślenie optymalnego algorytmu i udowodnienie, że jest on optymalny. Również nieodłączna kwestia szacowania złożoności obliczeniowej (O(n) etc) zahacza o matematykę.
Podsumowując
Trudno jest jednoznacznie odpowiedzieć na pytanie typu "czy dużo matematyki jest w informatyce / programowaniu". Niektóre działki informatyki/programowania wymagają więcej matematyki na wyższym poziomie, a niektóre mniej/prawie w ogóle.
Moim zdaniem można być dobrym programistą "ogólnym" znając jedynie (solidnie) program szkoły średniej i mieć chęć douczenia się rzeczy, które są potrzebne w danym momencie.
No i nie, słabe oceny z matmy nie mówią, że ktoś nie ma szans być dobrym programistą (wbrew temu w co niektórzy by chcieli wierzyć, informatyka i programowanie to nie są ani działy matematyki, ani elektroniki; może kiedyś tak było, but it's long gone now ;>).
P.S. Jeśli macie inne zdanie niż ja o matematyce i informatyce, to zachęcam do komentowania. Natomiast z góry proszę o sprecyzowanie o której działce informatyki mówicie, oraz jak duże doświadczenie w tej działce posiadacie :)
Comments:
Generalnie rzecz biorąc, zastanawia mnie czy w ogóle to pytanie ma sens. Choć obaj jesteśmy "informatykami", ciężko wskazać jakieś znaczące części wspólne naszych zawodów... (Zajmuję się zawodowo tworzeniem algorytmów rozproszonych rozwiązujących bardzo szczegółowe zagadnienia z teorii grafów. Mógłbym tak właściwie wykonywać tę pracę nie umiejąc pisać na klawiaturze.)
Ale jest jeszcze coś poza "twardą matematyką", specyficzny "matematyczny" (analityczny?) sposób myślenia, którego przedmioty ścisłe uczą.
Przy okazji - czy Wy również obserwowaliście w swoich szkolnych latach grozę sianą przez "zadania tekstowe"? Ja pamiętam, że spora część lekcji często upływała na wypisaniu z zadania danych i szukanych.
Rozwiązywanie zadań z matmy rozwija myślenie, które może przydać się w każdej dziedzinie życia. Matma w programowaniu? zależy co się piszę, w niektórych programach wystarczy znajomość arytmetyki w innych jest już trudniej ; ))
To przekonanie że informatyk musi być też matematykiem bierze się wprost ze zrównania pojęć "informatyk" i "algorytmik". Głoszone ono jest często przez nauczycieli, gdyż akademicko to właśnie to samo. Z drugiej strony pracownik przeciętnej firmy powie Ci, że dobry informatyk musi być dobry z WF-u, bo jak inaczej będzie te komputery nosił? ;)
Ścisła odpowiedź na to pytanie brzmi bowiem: tak, jak najbardziej. Zakłada ono jednak sensowne pojęcie tego, co rozumiemy przez matematykę, tj. naukę o obiektach, kategoriach i związkach. Takie jej dziedziny jak logika (*cough* prawa de Morgana) są w programowaniu absolutnie niezbędne, podobnie jak matematyczna meta-umiejętność modelowania w umyśle złożonych pojęć i związków między nimi. Nie wspominam też nawet o specifycznie "informatycznych" działach matematyki, jak choćby lingwistyka.
W 99% przypadków pytający ma raczej na myśli tzw. matematykę szkolną, czyli jakiś tam mały wycinek analizy, algebry i geometrii. W tym sensie rzeczywiście nie jest ona przydatna do wielu problemów programistycznych. Prawdą pozostaje jednak, iż matematyka i kodowanie operują podobnymi niskopoziomowymi umiejętnościami myślowymi. Dlatego [ocena poniżej 5] otrzymana za umiejętności posługiwania się owym małym wycinkiem analizy i algebry nie jest raczej dobrym znakiem, jeśli chodzi o potencjalne zdolności koderskie.
Matematyka jest zaledwie abstrakcją, przydatną wtedy gdy potrzebne są definicje czy dowody na różne zależności arytmetyczne, geometryczne i funkcyjne. Jednak same w sobie, wyrwane z kontekstu, zazwyczaj nie mają one wartości w IT. Np. po co nam twierdzenie Stokesa? Dopiero licząc właściwości pola magnetycznego, czyli coś z zakresu fizyki, posługujemy się tym aparatem matematycznym by ułatwić sobie życie. Ergo, matematyka samodzielnie jest zazwyczaj nieprzydatna, dopiero zastosowana w dziedzinie innej nauki ma sens.
W "informatyce", czy raczej czymś szerszym, szeroko pojętym "IT", w którym się poruszamy, jest miejsce dla różnych nauk. Wg mnie to fizyka jest tym, co króluje. Oczywiście pierwsze skojarzenie każdego to gry, nie trzeba rozwijać tego wątku. Jest również sztuczna inteligencja, też w grach, ale także obecna w najtańszym skanerze dokumentów, webcamie czy przeciętnej sygnalizacji świetlnej, pod postacią rozpoznawania obrazów czy znaków. Ta sama AI działa w systemach giełdowych, ratingowych. A wszystko to nie są niszowe zastosowania :)
Oczywiście można próbować usprawiedliwić wszystko zdaniem, że przecież bez matematyki te pozostałe nauki nie istnieją. Jasne. Informatyka też. Więc nie można aż tak upraszczać.
I tu się zatrzymam, bo będę pisał ten komentarz do rana :)
Agreed! Szczególnie jeśli captcha ma buga, który zmienia kolejność wykonywania działań (tj w 2+3*5 najpierw zrobi 2+3 a potem *5 ;p).... a coś mi mówi, że kiedyś takiego buga tu miałem :)
Ad meritum: Zgadzam się, że można uznać pytanie za zbyt rozległe - stąd też odpowiedź brzmiąca "there is no single answer" :)
@Paweł Goleń
Jeśli chodzi o "podejście matematyczne" czy "analityczny sposób myślenia", to się zgadzam, natomiast jest to out of scope tego postu (co w zasadzie powinienem zaznaczyć w treści, thx ;>).
Ad zadania tekstowe: przyznaje, ze nie zwróciłem uwagi (ale mogło być tak jak piszesz, nie zaprzeczam; szczególnie, że lRem potwierdza ;>)
@noname
Mam nadzieję, że przekaz z posta jest jasny (choć pewnie muszę to uściślić) - w niektórych działach informatyki trzeba (warto) być dobrym matematykiem, w innych nie jest to wymagane. Kwestia czym się chce zajmować.
@mijagi
Zgadzam się z "Rozwiązywanie zadań z matmy rozwija myślenie, które może przydać się w każdej dziedzinie życia". Jeśli chodzi o wiedzę (a nie podejście) z matmy ze szkoły średniej, to mam wrażenie, że w życiu codziennym przy normalnych aktywnościach tylko pewien podzbiór się wykorzystuje.
@lRem
Agreed on all :)))
@Xion
Agreed on all oprócz:
"Dlatego [ocena poniżej 5] otrzymana za umiejętności posługiwania się owym małym wycinkiem analizy i algebry nie jest raczej dobrym znakiem, jeśli chodzi o potencjalne zdolności koderskie."
Osobiście bardzo sceptyczny jestem co do tego. Tj. raz, że ocena otrzymana w szkole jest wypadkową
"tego co się wie" vs "to co jest sprawdzane w zadaniach na sprawdzianie" *
samopoczucie ucznia w momencie sprawdzianu *
humor nauczyciela danego dnia *
subiektywne spojrzenie nauczyciela na danego ucznia
Czyli ocena w szkole nie jest obiektywnym miernikiem wiedzy/umiejętności.
A dwa, jeśli dana osoba spędza 90% czasu na programowaniu, a 10% na "nauce do szkoły", to oceny będzie miała słabe, ale skill programistyczny nieporównywalnie wyższy (i również byłbym ostrożny w przeprowadzeniem równania w drugą stronę, tj. że skill programistyczny wpływa dobrze na wyniki z matematyki w szkole średniej i niżej).
Natomiast, to wyżej to tylko moje gdybanie, i jeśli ktoś posiada linka (lub tytuł książki, pracy naukowej, etc) do wyników przeprowadzonych badań w tym zakresie, to chętnie bym rzucił okiem :)
@garbaty lamer
Mam wrażenie, że zrozumiałeś post (część postu) inaczej niż było moim zamierzeniem aby go zrozumieć. Ale po kolei:
Ad "Troszkę powierzchowne pytanie, podobnie jak odpowiedź. Świadczy o dość mocnej i wąskiej Twojej specjalizacji - i w związku z tym o braku szerokiego spojrzenia na IT (które pewno przyjdzie z czasem)."
Auć :) Ale się z Tobą nie zgadzam. Here's why:
- pytanie/stwierdzenie nie jest mojego autorstwa, natomiast zostało one kilka(naście?) razy do mnie skierowane
- odpowiedź "krótka" brzmi "there is no single answer", która, owszem, jest powierzchowna, ale trudno na jej podstawie wysnuć wniosek o "braku szerokiego spojrzenia na IT" (wręcz przeciwnie, w przypadku braku szerokiego spojrzenia odpowiedź by raczej brzmiała "there is A single answer")
- odpowiedź "długa" dotyczy tego czym się zajmuje na co dzień (lub prawie na co dzień) - w końcu tego dotyczyło pytanie noname z komentarzy w poprzednim poście; nie jest to spis wszystkiego czym się zajmowałem + wszystkiego o czym słyszałem vs ilość matematyki w danym dziale (for the record: studia skończyłem na specjalności Informatyka Matematyczna, na bardzo matematycznym wydziale)
- cały post dotyczy "matematyki" jako "matematyki nauczanej w szkołach podstawowych/średnich", ponieważ tego dotyczy zazwyczaj pytanie; nie jest to filozoficzna dyskusja o matematycznym podejściu do myślenia czy IT, etc
Ad "Matematyka jest zaledwie abstrakcją [...]"
Osobiście bym powiedział, że "narzędziem", natomiast zgadzam się z tym co napisałeś.
Ale... jak pisałem, w poście piszę o "matematyce" jako o "matematyce nauczanej w szkołach podstawowych/średnich". Postaram się to doprecyzować w poście.
"W "informatyce", czy raczej czymś szerszym, szeroko pojętym "IT", w którym się poruszamy, jest miejsce dla różnych nauk. Wg mnie to fizyka jest tym, co króluje. Oczywiście pierwsze skojarzenie każdego to gry, nie trzeba rozwijać tego wątku. Jest również sztuczna inteligencja, też w grach, ale także obecna w najtańszym skanerze dokumentów, webcamie czy przeciętnej sygnalizacji świetlnej, pod postacią rozpoznawania obrazów czy znaków. Ta sama AI działa w systemach giełdowych, ratingowych. A wszystko to nie są niszowe zastosowania :)"
Agreed, w końcu "informatyka" to też pewne narzędzie służące do osiągania pewnych celów. Natomiast, ponownie, jest to out-of-scope względem postu.
Ad fizyka - agreed! Sądzę, że można by wymienić jeszcze kilka takich szerszych dziedzin, jak np elektronika (cieeekawe czy elektronicy też mają podobny problem z fizykami, którzy twierdzą, że elektronika nadal jest poddziałem fizyki).
Ad "A wszystko to nie są niszowe zastosowania"
Kwestia definicji "niszowego zastosowania" :)
"Oczywiście można próbować usprawiedliwić wszystko zdaniem, że przecież bez matematyki te pozostałe nauki nie istnieją. Jasne. Informatyka też. Więc nie można aż tak upraszczać."
To już zahacza o filozofię :)
I tyle ;)
Od września uczę się w szkole C++ (technik informatyk) - nauczycielka uczy nas programowania w C++ na zadaniach matematycznych. O ile w algorytmach to jest zrozumiałe, to w C++ nie do końca mogę to zrozumieć. A zadania naprawdę nie są łatwe (śmiem twierdzić że są ponad poziom), przy ostatnim sprawdzianie 10 na 11 osób w grupie oblało go, a jedna osoba dostała dopuszczającą ocenę.
Zadania z matematyki są one wyznacznikiem naszej "nauki" programowania w C++. Trochę inaczej sobie wyobrażałem naukę tego języka w szkole. Na szczęście w domu inaczej podchodzę do tego tematu. Bo w mojej opinii moje lekcje programowania - wyglądają jak matematyka z dodatkiem programowania.
Więc chciałbym zapytać, czy mam rację odnośnie tego sposobu nauczania ? Nie powiem, ale parę osób z grupy przez taką formę nauczania C++, pogryzło się z programowaniem.
moim zdaniem macie szczescie ze nauczycielka ma takie, a nie inne podejscie, w wielu szkolach informatyki ucza niekompetentni nauczyciele, ktorzy jedyne co potrafia to uczyc obslugi przegladarki Google na podstawie jakiegos podrecznika przez polowe semestru (pozdrawiam moja nauczycielke ;] ), moze nie wydaje sie to takie straszne, ale jakby przeliczyc ile czasu tracimy (w sensie - siedzimy na lekcji i nic nie robimy) w szkole to jest to jednak troche przygnebiajace.
tak w ogole, jesli jakikolwiek sposob nauczania programowania w szkole jest w stanie zniechecic kogos do zaprzestania nauki programowania, to powinien sie zastanowic, czy programowanie rzeczywiscie jest tym, co chcialby w zyciu robic, problemy stawiane w szkole sa nieporownywalnie prostsze niz te stawiane w pracy, samo to ze mozna sterowac komputerem wg wlasnego widzimisie jest moim zdaniem wystarczajaca zacheta do samodzielnej nauki programowania.
W sumie badań nie mam, ale patrząc na wyniki z przedmiotów zawodowych i matematyki u mnie w klasie (2 klasa technik informatyk ;]) - ja, jeśli chodzi o matmę jestem chyba przeciętny (jakoś wyszło 4 na koniec w zeszłym roku), o przedmiotach w ogóle nie związanych z informatyką (historia, biologia, etc) wolałbym nie wspominać :) Jeśli natomiast chodzi o przedmioty typu programowanie, soisk czy utk to z reguły radzę sobie lepiej od reszty. Dla odmiany najlepsza osoba z matmy w klasie ma problemy z programowaniem i algorytmami (zresztą jak większość); jak więc widać (przynajmniej tu) umiejętności programistyczne != umiejętności matematyczne i vice versa :)
Inna sprawa, że ja mam kontakt z programowaniem od 1. gimnazjum (wszystko niestety jako samouk), a znakomita większość klasy w tym roku zaczyna... Co do matematyki, to inna sprawa, że w związku z programowaniem zacząłem poznawać materiały dotyczące rzeczy, których w szkołach średnich nie uczą, bo były mi potrzebne (fibonacci, sita, grafy, czy podstawy kryptografii/kryptoanalizy)
ps. taki mały offtop: dlaczego Ansi hack nie działa w Win7 (ultimate)? :)
W tym miejscu można cisnąć ukłonem w stronę poziomu nauczania w szkołach podstawowych oraz gimnazjalnych, który obecnie obserwuję i łatam na co dzień, gromem natomiast ku nagłym zrywom i reformom nieudolnej polskiej edukacji (w tym miejscu mam na myśli jedynie tę z zakresu matematyki i jej krewnych, w innych dziedzinach jestem poza obiegiem).
Na pytania typu „Po co nam ta matematyka potrzebna w ogóle?” zwykłąm odpowiadać „Matematyka niekoniecznie, ale arytmetyka i jej koleżanki owszem”.
Niestety zdarzyło mi się już pracować z maturzystami, którzy mieli problem z ułamkiem i liczbą ujemną Nie dziwię się, że drżą przed matematyką.
Straszenie zadaniami tekstowymi ma swoje sedno w ich interpretacji, a konkretnie w tym, że ktokolwiek „normalny” mając powiedzmy dług u kolegi nie pomyśli o nim jako o liczbie ujemnej itp. Zadania są z kosmosu, a materiał programowy nie jest realizowany przez większość nauczycieli, ale to temat rzeka jest.
I na koniec tak już od siebie na temat z życia polskiego systemu edukacji:
Będąc nauczycielem informatyki, nie mogę uczyć matematyki - muszę iść na dodatkowe studia. Nauczyciel matematyki robi kursik i owszem – może. W jednej z państwowych szkół z przykrością odmówiono mi pełnego etatu nauczyciela informatyki, gdyż częściowo wzięła go sobie matematyczka w okresie przedemerytalnym.
To jest ta matematyka potrzebna czy nie ? ;)
"(wbrew temu w co niektórzy by chcieli wierzyć, informatyka i programowanie to nie są ani działy matematyki, ani elektroniki; może kiedyś tak było, but it's long gone now ;>)."
informatyka wyrosla z matematyki (maszyna turinga). informatyk, programista, a nawet osoba, ktora obrabia zdjecia w photoshopie zajmuje sie czytaniem z/pisaniem na tasmie (bardzo skomplikowanej) maszyny turinga, ktora jest kazdy komputer.
trudno sie zgodzic, ze webdesign jest dziedzina matematyki, ale nie ma zadnej niearbitralnej metody na rozroznienie miedzy 'informatykiem', a matematykiem, ktory zajmuje sie zerami i jedynkami na tasmie maszyny.
jesli zaakceptuje sie fakt, ze maszyny turinga sa dzialem matematyki, to nie ma gdzie postawic granicy miedzy informatyka a matematyka (bo kazdy PC to MT), wiec albo mozna sie umowic, ze te dwie dziedziny sa od poczatku odrebne, albo inf. zawiera sie w matematyce.
PC nie jest maszyną Turinga bo nie posiada nieskończonej pamięci, jest raczej maszyną (bardzo wielu;)) stanów skończonych :P
Jeśli chodzi o sposób myślenia to mi programowanie przypomina bardziej budowę jakichś automatów, które mają wykonywać zaplanowane przeze mnie zadania niż wklepywanie matematycznych formuł(chociaż niektóre formułki czasem się przydają). Chociaż ostatnio miałem 6 z matmy na świadectwie(2kl. technikum, teraz 3kl.) to mogę nie być wiarygodny ;)
PS. Dlaczego delta=b^2-4*a*c ?
A z matematyki to niewiele sie przydaje (na studiach mialem wiecej matmy niz informatyki, w dodatku prowadzonej glownie na zasadzie twierdzenie-dowod) wyprowadzanie wszystkiego z podstawowych aksjomatow+pewnika wyboru, konstrukcja liczb, dzialan itp. pozniej cala analiza czym ejst calka rozniczki, algebra, matematyka dyskretna i doslownie pare procent tej calej wiedzy jest do czegos potrzebnych reszta to strata czasu w ktorym mozna bylo np. gierki pokodzic i nauczyc sie OpenGL :)
Pewnie ze przydaje sie zwykla arytmetyka, jak sie bawi w gry/grafike to trygonometria, macierze obrotu, jakies liczenia trajektorii, kolizji itp. Ale to mozna spokojnie na biezaco uzupelniac jak ktos nie ma tej wiedzy.
Co nie zmienia faktu ze podstawowa wiedza matematyczna "is a must". Chocby w zyciu codziennym, policzyc oferty kredytowe, orpocentowanie na lokacie policzyc ktora oferta jest najkorzystniejsza, czasem optymalizacja czegos (czyli minimum funkcji sie klada). Podstawy kombinatoryki (nie mylic z rachunkiem prawdopodobienstwa, ktorego kombinatoryka jest malutkim wycinkiem). Warto meic tez jakies pojecie o zlozonosciach (niekoniecznie dokladne liczenie, ale zeby rozumiec ze nLogn mozna puscic na duzym zbiorze a n! mozemy nie doczekac) Juz nie mowiac ze sa ludzie na stanowiskach co nie umia procentow liczyc:(
Reasumujac dla przyzwoitosci dobrze znac matme chociaz na obecnym podstawowym poziomie maturalnym:)
z twojego rozumowania wynika, ze maszyny Turinga, ktore korzystaja tylko ze skonczonej pamieci (a wiec maja skonczenie wiele stanow), nie sa maszynami Turinga.
MT, ktora korzysta z nieskonczonej pamieci (tasmy), nigdy sie nie zatrzyma, wiec jest raczej malo interesujaca...
tez sie zgadzam, ze administratorowi bazy danych jest blizej do 'operatora' MT, niz do matematyka, ale to tylko widzimisie, ktore nie odpowiada na pytanie, czym inf. rozni sie od mat.
Umiem obliczyć i wykorzystać deltę do zmiany postaci funkcji kwadratowej z ogólnej na iloczynową i kanoniczną. Chodzi mi o to czym właściwie ta delta jest. Jaką własność funkcji kwadratowej opisuje delta sama w sobie? Czy można tą własność wykorzystać do czegoś więcej niż obliczenie miejsc zerowych i współrzędnych wierzchołka? Czy zależności rządzące wartością delty można przedstawić geometrycznie? Bo można umieć z czegoś korzystać, można nawet wiedzieć jak to działa ale czasem chciałoby się zrozumieć *dlaczego* to działa. :)
@ged_
To wynika bezpośrednio z definicji maszyny Turinga, która mówi, że posiada ona pomięć w postaci nieskończonej taśmy. Maszyna zatrzyma się bez problemu (w większości przypadków) bo nie chodzi o to by przejechać co najmniej raz całą pamięć a o sam fakt posiadania jej nieskończonej ilości. Faktyczna ilość użytej pamięci zależy od danego algorytmu i danych wejściowych (opis algorytmu również może być danymi wejściowymi). Nie wiadomo czy jest fizycznie możliwe skonstruowanie maszyny Turinga jednak potrafimy konstruować jej przybliżenia posiadające ograniczoną ilość pamięci. Ze wszystkich problemów możliwych do rozwiązania przez maszynę Turinga, na komputerach możemy rozwiązywać tylko te, które zmieszczą się w ich pamięci. W przypadku mało wymagających programów koniec pamięci jest zwykle bardzo odległy i możemy traktować komputer jak maszynę Turinga jednak już programiści gier AAA czy Photoshopa muszą pamiętać o istnieniu tej granicy a dla np. symulacji skomplikowanych zjawisk kwantowych potrzeba komputera o pamięci liczonej w terabajtach (i oczywiście paru tysiącach procesorów żeby obliczenia nie trwały setki lat;)).
@Gyn
Kiedy następny videocast? :)
rozloz sobie rownanie ax^2+bx+c na postac iloczynowa za pomoca wzorow skroconego mnozenia, wtedy zobaczysz 'naocznie' skad sie to wszystko wzielo. Jak nie potrafisz na literkach to podstaw jakies liczby, nie musza byc specjalnie ukladane, kazdy dwumian kwadratowy ma 2 rozwiazania (niekoniecznie rzeczywiste i niekoniecznie rozne) i kazdy da sie rozlozyc za pomoca wzorow skroconego mnozenia.
nie zauwazylem, ze kolega wyzej podawal linka do wiki i tam wszystko jest wyprowadzone, wyrazenie delta zostalo wylaczone jako oddzielny wzor, bo:
1) pojawia sie jednoczesnie w 2 wyrazeniach - tak, chodzi o 'to cos' pod pierwiastkiem w kazdym z nawiasow
2) od tego zalezy ile pierwiastkow ma rownanie (pierwiastek istnieje tylko dla nieujemnych liczb wymiernych, wiec delta musi spelniac to zalozenie by rownanie mialo pierwiastki)
no i w zasadzie to tyle, nie ma tutaj zadnej wyzszej matematyki, zwykly rozklad rownania kwadratowego na czynniki i doglebna analiza otrzymanego wzoru, nikt nie wyprowadzal niczego z dupy
nie ma co sie martwic ze nie wiesz co skad sie wzielo, jesli naprawde Cie to interesuje to idz na studia matematyczne, na pozostalych kierunkach rzadko kiedy wyznacza sie na wykladzie dowody twierdzen (aczkolwiek niektorzy wykladowcy czasami podaja dowody dla niektorych twierdzen)
zauwaz, ze jesli MT korzysta ze skonczonej ilosci komorek na nieskonczonej tasmie, to ma skonczenie wiele stanow, wiec jest rownowazna normalnemu komputerowi. w twoim mniemaniu, taka MT nie jest MT, bo nie uzywa nieskonczonej pamieci, wiec wedlug ciebie, MT to tylko takie maszyny, ktore nigdy nie koncza obliczenia (bo inaczej nie korzystalyby z nieskonczonej pamieci).
na odwrot, jesli wziac PC, to (jak sam zauwazyles) ma on skonczenie wiele stanow, wiec potrzebuje tylko skonczonej ilosci komorek na tasmie, wiec jest rownowazny "twojej" MT z nieskonczona tasma, ale wykorzystujacy tylko skonczona ilosc komorek na niej.
jak widac, komputery PC zawieraja sie w zbiorze maszyn Turinga...
"nieskonczona tasma" sluzy temu, aby moc opisac obliczenia, ktore nigdy sie nie koncza i aby nie wprowadzac arbitralnego limitu pamieci (1KB, 1MB, 1PT, itd).
@rolek delta to po prostu wyroznik wielomianu stopnia 2: http://pl.wikipedia.org/wiki/Wyr%C3%B3%C5%BCnik (na angielskiej wiki jest zdecydowanie wiecej). Tutaj tez masz dobry punkt zaczepienia: http://www.math.us.edu.pl/~pgladki/faq/node124.html
Co do interpetacji geometrycznej wydaje sie ze nic wiecej poza to co pisales nie ma (ale nie jestem pewny).
Z drugiej strony o to chodzi by jak cos Cie zaciekawi to samemu probowac pogrzebac na ten temat, napisz programik ktory powyciaga delty z roznych rownan, i porysuje na wykresie razem z wykresami, eksperymentuj, zepsuj. (albo nawet sie po prostu chwile zastanow jak bedzie wygladala delta na wykresie :) ) Najwazniejsze to nauczyc sie uczyc.
- we współczesnych algorytmach kryptograficznych dla crackera najważniejsze jest wyłuskanie kodu asm funkcji kryptograficznej, obliczenie czasu wykonania jednego obiegu, obliczenie (kombinatoryka) ilości możliwych np. haseł z przestrzeni znaków i podjęcie decyzji o faktycznym implementowaniu ataku. Na tej podstawie podejmuje się decyzje o celowości ataku bo sprawdzenie haseł 8-znakowych A-Z a-z dla 100.000.000 obiegów może zająć 1s (MD5 na GPU) i 10 lat (rar na CPU).
- w algorytmach finansowych bez matematyki trudno wymyślić coś nowego, jeśli się jej nie opanuje zawsze będzie się zależnym API gotowych wskaźników.
Dlatego matematyka wyznacza kierunek programiście, buduje koncepcje i modele które progrmiści muszą tylko opisać w dowolnym języku.
Samo implementowanie kodu to praca wyrobnicza i poziom LO wystarcza.
pzdr
1. Kombinatoryka,
2. Logika(Boola)
~Assa
Aby programować tak naprawdę potrzeba 3 rzeczy:
1. umięjętność logicznego myślenia - każdy z nas ma mózg, więc każdy logicznie myśli :]
2. motywacja oraz chęć dążenia do celu - bez tego ani rusz. Chcesz dobrze programować? Zmotywuj się i uparcie dąż do wyznaczonego celu! Bez opier*** się! ;)
3. nigdy nie poddawaj się - jak coś nie wychodzi, zostaw to na chwilę a odpowiedź sama przyjdzie, ale nie wolno Ci się poddać! Co z tego, że teraz czegoś nie rozumiesz a ktoś tam w internecie rozumie? Nie martw się i nie poddawaj się - jak będziesz wytrwały to i Ciebie olśni!.
Te 3 cechy wystarczą każdemu do tego aby dobrze programować, a cała ta 'straszna' matematyka jak będzie potrzebna to sama da się zrozumieć i zaimplementować, a to czy ktoś ma tą a nie inną ocenę nie ma żadnego znaczenia.
3 cechy powyżej pozwoliły poznać mi smak swoich małych drobnych sukcesów, za każdym razem kiedy rozwiązywałem problem programistyczny. Gyn jak i większość z was zapewne pamięta swój 'pierwszy raz' kiedy padło pierwsze 'crackme' i uświadomienie sobie 'Yeah! Dałem rade! Ależ to proste!'. Pamiętajcie: 3 cechy + smak pierwszego drobnego sukcesu i już nie ma odwrotu! Wpadliście w sidła :D Od teraz będzie tylko lepiej :D Oto cała tajemnica :)
FFT, optymalizacja funkcji i cale to talatajstwo zwiazane z przetwazaniem dzwieku.
"Chodzi mi o to czym właściwie ta delta jest. Jaką własność funkcji kwadratowej opisuje delta sama w sobie? Czy można tą własność wykorzystać do czegoś więcej niż obliczenie miejsc zerowych i współrzędnych wierzchołka? Czy zależności rządzące wartością delty można przedstawić geometrycznie?"
Delta jako taka powstała najprawdopodobniej ze względów praktycznych jako wyodrębnienie powtarzającej się części we wzorach (mniej pisania a i wzory łatwiej zapamiętać). Przekłada się on an właściwości geometryczne wykresu, ale nie bezpośrednio (jak sam zauważyłeś chodzi o odległość wierzchołka paraboli od osi odciętych, a przez to występowanie miejsc zerowych (w dziedzinie rzeczywistej).
- uczenie maszynowe / data mining
- przetwarzanie sygnałów
- oprogramowanie naukowe (np. symulacje fizyczne)
- grafika
I pewnie można by coś tam jeszcze znaleźć. Jeżeli kogoś te dziedziny nie interesują to pewnie może zignorować matematykę.
Inna sprawa, że trzeba rozróżnić ludzi, którzy byliby w stanie nauczyć się matematyki ale im się nie chce / nie potrzebują i ludzi, którzy nie są w stanie nauczyć się matematyki bo jest dla nich zbyt abstrakcyjna. Ci drudzy raczej nie będą wymiataczami w programowaniu.
Z powodu moich tragicznych ocen z matmy w szkole ZAWSZE odradzano mi zajmowanie się czymkolwiek związanym z informatyką. Najgorsze jest to, że najbardziej mnie interesowało.. programowanie. Jako nastolatka uczyłam się htmla, c# (oczywiście niewiele - jakąś prostą stronkę zrobić czy b. prosty program pod konsolę to tyle), ale pamiętam, że robiłam to w jak największej tajemnicy, bo uchodziłam za kompletnego przygłupa przez niskie oceny z matmy, a otoczenie wiązało mocno jedno z drugim i przez to sama nie wierzyłam, że mogę kiedykolwiek być z tego dobra. Działało to mega demotywacyjnie. Naprawdę żałuję, że nie spotkałam nikogo, kto by miał inne zdanie na ten temat! Teraz to już nie ten wiek, żeby się tego uczyć, ale nie przeczę- żałuję. Na pewno nie byłabym mistrzem, ale może nie zniechęciłabym się i umiała trochę więcej. Pozdrowienia!
Odpowiedzi na swoje pytanie nie znalazłem ale myślę, że wiem do czego matematyka przydaje się jeśli przygodę z informatyką rozpoczyna ktoś na pierwszym roku studiów.
Czyli zna - albo nie zna podstawy matematyki, których próbowali go aż do liceum/technikum nauczyć. Informacje matematyczne ze szkoły przydają się przy pojmowaniu podstaw programowania, podstaw pisania w wybranym języku a jest to narzędzie do pracy, do programowania.
W szczególności może to być język baz danych, bardzo specjalizowany w stosunku do ogólnego C czy Pascala.
Bo chyba nie podlega dyskusji, że 1. umiejętność logicznego myślenia i 2. wyobraźnia matematyczna - cechy niezależne od tego jak dobrze się nauczyło liczyć, dowodzić w szkole, używać przyjętej notacji matematycznej - są po prostu n i e z b ę d n e i nie ma co się brać za studiowanie informatyki bez nich.
Inaczej mamy takich informatyków jak ci od obsługi wyborów samorządowych 2014, których należałoby rozpędzić na cztery wiatry i zabronić zbliżania do komputera. :-)
Notabene ja sam nie posiadam ani nie udało mi się rozwinąć ww. 2 kardynalnych cech w szkole, choć oceny z "matematyki" w szkołach zawsze miałem niezłe i dlatego nie umiem programować w żadnym języku i już się nie nauczę. Nie ten wiek. Co nie znaczy, że kilkudziesięciu bardzo prostych ale przydatnych programików w C nie napisałem. Nie znaczy nic.
Z ukłonami J.Wawer z Warszawy
Dopiero teraz zaczynam widzieć , rozumieć i wyobrażać sobie jakies struktury co w sumie jest wyważaniem otwartych drzwi bo już raczej istnieją jednak takie podejście wydaje się obecnie dla mnie lepsze niż wpisywanie danych do gotowych algorytmow i sprawdzanie efektu .
Wpis interesujący, niewątpliwie matematyka w programowaniu pomaga a nie szkodzi :)
Pozdrawiam, Mateusz.
Add a comment: