Dva događaja su me motivisala da napišem nešto na ovu temu. Naivno pitanje svežeg studenta elektrotehnike da li mu je potrebno da zna logaritme i trigonometrijske funkcije da bi bio dobar programer. Nešto posle tog incidenta, na predavanju o ms sql-u, predavač je pitao da li znamo šta je faktor grupa, gde se slušaoci, profesionalni programeri, nisu baš proslavili. Kao programer, koji je dogurao do zvanja diplomirani matematičar, pronalazim se u ovoj temi. Koliko je znanje matematike potrebno profesionalnom programeru, ako je uopšte potrebno?

Mandelbrot setSudeći po diskusijama na domaćim forumima ovo pitanje deli struku na dva tabora, sa potpuno različitim pogledom na temu. Jedna strana obično zastupa formalno-obrazovni-matematičko-bespogovorni pogled na programiranje, podrazumevajući da je formalno znanje matematike neophodno za bilo kakvo programiranje koje doseže dalje od korišćenja čarobnjaka. Druga grupa zastupa potpuno suprotan stav, od matematike koriste osnovne računske operacije i još po nešto od aritmetike. Smatraju da je dublje poznavanje matematike potpuno nepotrebno programeru. Kao i obično, istina je verovatno negde između, ali imam utisak da argumenti koji se potežu u diskusijama, sa obe strane, promašuju metu.

Uopštavanje / modelovanje

Najčešće, posao programera je modelovanje nekog realnog procesa, tj. pravljenje programa koji simulira realni proces na računaru. Kad programer pravi Address book aplikaciju, on ne smišlja ništa novo, već modeluje proces korišćenja klasičnog adresara u pisanoj formi, menjajući tradicionalnu tehnologiju novom. Ovakve apstrakcije jesu osnova matematike, od pojma broja pa nadalje.

Moć da se realni problem apstrahuje na objekte, operacije i relacije među njima, zanemarujući nebitno za rešenje problema, su odlika najboljih matematičara, a verujem i najboljih programera. Nekada čak i sam formalni izgled matematičkog izraza može asocirati na njegovo značenje, bez obzira na značenje simbola. Kvadrat binoma je kvadrat binoma, ako važe određena pravila za operacije sabiranja i množenja, nije presudno šta stoji iza oznaka a i b, sve dok važe pravila igre.

Programeru koji u znacima + i * ne vidi aritmetičke operacija sabiranja i množenja, već operacije nad proizvoljnim poljem koje zadovoljavaju nekakve uslove, preopterećenje operatora je logična igra, slično kao i većina drugih programerskih tehnika. Da ne pominjem da matematičari nikada ne koriste copy/paste, postoje čak i vicevi na tu temu…

Ako ste ljubitelj funkcionalnog programiranja, dovoljno je da kažem lamda račun.

Preko preče, naokolo bliže

Matematika nas uči da zadati problem napadamo iz različitih uglova, koristeći prethodno znanje, kao i da povezujemo na prvi pogled potpuno različite teorije, i pravimo analogije među objektima koji su na prvi pogled potpuno različiti.

Tvrđenja koja su u jednoj oblasti matematike teško dokaziva, mogu biti trivijalna u nekoj drugoj teoriji. Čisto algebarski dokaz da polinom n-tog stepena ima n nula, tzv. osnovne teoreme algebre ne postoji, međutim, uz pomoć aparata kompleksne analize dokaz gotovo trivijalan.

Epilog

Znanje matematike, u ovom smislu razumevanja matematičkog načina zaključivanja i metoda, samo će najsrećniji naučiti u školi. U školi (mislim i na fakultete), najčešće, učimo puno računa, obrazaca, i još puno, uglavnom, dosadnih stvari. Uloženi napor može da poboljša memoriju, ali toj svrsi može da posluži i poezija, pa šta je kome draže… Preostaje samostalno učenje, na šta je većina programera navikla, s tim što je nešto lakše doći do kvalitetne literature.

Neko veliko poznavanje matematike vam nije neophodno, teorija formalnih jezika neće u skorije vreme stići u Jablanovih Top 6 programerskih veština, ali ako želite da imate širu sliku, i povremeno dodatno uživanje u svom poslu, vredi uložiti trud.

Nije na odmet obnoviti i osnove, predlažem teoriju brojeva, možda i malo verovatnoće…

7 thoughts on “Matematika i programiranje?

  1. marko says:

    dobar text i dobar blog

  2. SuperZoka says:

    Zanimljiv tekst … U svakom slučaju, obrni, okreni, najbolja varijanta je da znaš matematiku 🙂 Srećno sa blog-om

  3. Branimir says:

    Hvala drugari.
    @SuperZoka Pa da to je jedan od razloga pisanja posta, da malo motivišem ljude da se zainteresuju za neke teme…

    Niko me nije pitao za vic, svi znate ili šta?

  4. SuperZoka says:

    Misliš na copy/paste viceve ??? Daj neki …

    1. Branimir says:

      Reše inženjeri da utvrde razliku između fizičara i matematičara. Odluče da im daju seriju zadataka i prate kako ih rešavaju.

      1. Prvi zadatak “Dati su prazno lonče, rešo, česma i kafa, zadatak je skuvati kafu.”

      Fizičar: “Punim lonče vodom, palim rešo, stavljam lonče na rešo, čekam da voda proključa, dodajem kafu.”

      Matematičar: “Punim lonče vodom, palim rešo, čekam da voda proključa, dodajem kafu.”

      I fizičar i matematičar su uspešno rešili zadatak, nisu utvrđene razlike.

      2. Drugi zadatak: “Dati su lonče puno vode, rešo, česma i kafa, zadatak je skuvati kafu.

      Fizičar opisuje postupak: “Palim rešo, stavljam lonče na rešo, čekam da voda proključa, dodajem kafu.”

      Matematičar gleda u lonče, razmišlja neko vreme i zapisuje: “Posle prosipanja vode iz lončeta, svodi se na prethodni postupak.”

  5. SuperZoka says:

    Sir Ernest Rutherford, predsednik Kraljevske Akademije Engleske i dobitnik Nobelove nagrade za fiziku ispričao je sledeću priču:

    … Pre izvesnog vremena pozvao me je kolega. Spremao se da odgovor nekog studenta na pitanje iz fizike oceni nulom, dok je student, naprotiv, zahtevao najvišu ocenu. Ispitivač i student su se ipak složili da se dovede nezavisni arbitar i ja sam bio izabran. Pročitao sam ispitno pitanje: “Pokazati kako je moguće odrediti visinu neke visoke zgrade pomoću barometra”. Studentov odgovor je glasio:

    – Odneću barometar na vrh zgrade, vezaću ga za dugačak konopac, spustiću ga do trotoara, a zatim ću ga ponovo podići. Izmeriću dužinu kanapa. Dužina kanapa je visina zgrade.

    Student je zaista imao dobar razlog za visoku ocenu, s obzirom da je dao kompletan i tačan odgovor! S druge strane, kad bi dobio visoku ocenu iz fizike, to bi značilo svojevrsno priznanje u ovoj oblasti, što njegov odgovor ipak nije potvrđivao! Predložio sam da student još jedanput pokuša da reši ovaj zadatak. Dao sam studentu šest minuta da reši zadatak uz upozorenje da njegov odgovor mora da pokaže bar neko znanje iz fizike! Pri kraju petog minuta student jos ništa nije bio zapisao! Pitao sam ga, da li želi da odustane, ali mi je odgovorio da ima mnogo odgovora na ovaj problem. Upravo je razmišljao o najboljem rešenju. Izvinuo sam se što ga prekidam i zamolio ga da nastavi. U sledećem minutu on je napisao svoj odgovor koji je glasio:

    “Odnesi barometar na vrh zgrade i nagni se preko ivice krova. Ispusti barometar, a štopericom meri vreme dok ne tresne o trotoar. Tada, koristeći formulu gt2/2, izračunaj visinu zgrade”.

    U tom trenutku, pitao sam kolegu, da li sad on odustaje od davanja loše ocene? Dok sam napuštao kancelariju kolege, setio sam se da mi je student rekao da ima još mnogo rešenja za ovaj problem, pa sam mu odgovorio:

    – Pomenuli ste još rešenja …

    – Pa…, – reče student – postoji mnogo načina da se odredi visina zgrade uz pomoć barometra. Na primer, možete izneti barometar napolje, pod pretpostavkom da je sunčan dan, izmeriti visinu barometra, zatim dužinu njegove senke, dužinu senke zgrade, a onda običnom proporcijom, uz pomoć Talesove teoreme, izračunati visinu zgrade!

    – Sjajno! – rekao sam -… a ostali načini?…

    – O da… – rekao mi je studenta – postoji jedan osnovni metod merenja koji će vam se sigurno dopasti. U ovom metodu, uzmete barometar sa sobom i počnete da se penjete uz stepenice. Prethodno, na zidu lupite crticu da označite dužinu barometra. Zatim, kako se penjete, markirate stalno dužinu barometra. Tako ćete dobiti visinu zgrade u jedinicama dužine barometra!

    – Veoma direktan metod! – rekao sam.

    – Naravno, – nastavio je student – ako želite malo sofisticiraniji metod, možete vezati barometar za kraj opruge, zaljuljati ga kao klatno i zatim odrediti vrednost gravitacione konstante na nivou ulice, a onda na vrhu zgrade. Iz razlike za gravitaciono ubrzanje, može se, u principu, izračunati visina zgrade! Takođe, koristeći isti princip, možete odneti barometar na vrh zgrade, vezati ga za dugački kanap, zatim spustiti do površi trotoara i zaljuljati. Tada možete izračunati visinu zgrade prema periodu precesije klatna!

    – Na kraju, zaključio je student, postoje i mnogi drugi načini da rešite problem. Verovatno najbolji način je da odnesete barometar u prizemlje i da pokucate na vrata domara zgrade. Kada vam domar otvori vrata, vi treba samo da kažete:

    – Gospodine domaru, ovo je divan barometar! Ako mi kažete kolika je visina zgrade, pokloniću vam ga!

    U tom trenutku nisam više mogao da izdržim pa sam upitao studenta da li zaista zna konvencionalni odgovor na ovaj problem. Priznao je da ga zna, ali mi je rekao da je sit profesora i asistenata na fakultetu, koji pokušavaju da mu nametnu svoj način razmišljanja.

    (Napomena: student iz priče je Niels Bohr, čuveni danski fizičar, dobitnik Nobelove nagrade 1922)

  6. Pera says:

    Vrlo zanimljivo. Morao sam nešto da kažem. Moje prvo ozbiljnije susretanje sa matematikom je bilo kada sam za 2d igru obnovio analitičku geometriju u ravni.

Leave a Reply