PROGRAMSKI JEZICI

Ova stranica posvećena je kursevima u okviru kojih se izučavaju različite programske paradigme i njihovi predstavnici:

  • imperativno programiranje - istorijski razvoj, osnovne karakteristike i mogućnosti različitih imperativnih jezika (programski jezik C se izučava detaljno u okviru kurseva Programiranje 1 i Programiranje 2)
  • objektno-orijentisano programiranje - osnovni koncepti objektno orijentisanog programiranja (teorijske osnove, programski jezik Java i objektno orijentisano programiranje uče se detaljnije u okviru kursa Objektno-orijentisano programiranje)
  • funkcionalno programiranje - teorijske osnove (lambda račun), programski jezici Haskell i Python
  • logičko programiranje - teorijske osnove (logika prvog reda), programski jezik Prolog
  • komponentno programiranje - praktični pristup kroz programski jezik Python i biblioteku PyQt (do 2019. godine Java i bibliteku JavaFX), odnosno Scala i bibliteku ScalaFX
  • konkurentno i distribuirano programiranje - teorijske osnove i praktični pristup kroz programski jezik Java, odnosno Scala
  • programiranje ograničenja - teorijske osnove i praktični pristup kroz BProlog i Python (biblioteka constraint)
  • skript programiranje - teorijske osnove i praktični pristup kroz Python
  • generičko programiranje - teorijske osnove i praktični pristup kroz programski jezik C++
Takođe, u okviru kurseva izučavaju se i osnovna svojstva programskih jezika.

Kursevi

Nastavnik: doc dr Milena Vujošević Janičić
Asistenti: Marjana Šolajić, Milan Čugurović i Ivan Ristović

U okviru kurseva programskih jezika organizuju se gostujuća predavanja koja imaju za cilj da približe studentima primenu naučenih koncepata u industriji, a drže ih stručnjaci iz IT sveta. Do sada su organizovana sledeća gostujuća predavanja:

  • Konkurentno programiranje u programskom jeziku Go, Miloš Mitrović, Callidus Cloud (kurs PPI, april 2018)
  • Razvoj MScript programskog jezika, Mad Head Games (kurs PPI maj 2015. i decembar 2015., kurs DPJ i PPR decembar 2016)
  • Skript programiranje: programski jezik Lua, RTRK (kurs DPJ, decembar 2015, decembar 2016. i decembar 2017)
  • Funkcionalno programiranje u programskom jeziku Skala, Zuhlke Engineering d.o.o. (kurs PPR, maj 2016. i mart 2017)
  • Reaktivno programiranje, Endava (kurs PPR i PPI, mart 2017)
  • Sistemi u realnom vremenu i programski jezik Ada, Endava (kurs PPR i PPI, april 2017)

Prijavite se za PLMW (Programming Languages Mentoring Workshop)

(29. 03. 2020) U nastavku prenosimo tekst Vašeg kolege, Luke Hadži-Đokića (student četvrte godine, R smer) o svom apliciranju za stipendiju, iskustvu i boravku u New Orleansu na prestižnoj radionici i konferenciji iz oblasti programskih jezika. Takođe, on navodi i značaj svog boravka i mogućnosti koje mu je to iskustvo pružilo. Ukoliko Vas ovaj tekst zainteresuje, za sva dodatna pitanja, osećajte se slobodno da nas kontaktirate!

Prijavite se za PLMW

Da počnem odmah sa poentom - prijavite se za PLMW! Dobro, verovatno ne znate šta je to. Razumljivo. Zato vam preporučujem da pročitate, kao što sam to i ja uradio, ovaj tekst profesorke Lindsi Kuper, koji me je inspirisao da se prijavim. Ukratko, PLMW (Programming Languages Mentoring Workshop) je radionica namenjena studentima koji su zainteresovani za akademsku karijeru u polju programskih jezika. Održava se četiri puta svake godine, dan pred glavnu konferenciju (POPL, PLDI, ICFP i SPLASH). To su četiri “najbitnije” konferencije u polju programskih jezika. Tamo se obrađuju teme kao što su dizajn programskih jezika, sistemi tipova, verifikacija softvera, sinteza programa, interaktivni dokazivači, konstrukcija kompilatora, optimizacija itd. Da bi prisustvovali, potrebno je registrovati se, rezervisati let, smeštaj, što može da bude jako skupo. Baš zato postoji putna stipendija, koja pokriva sve to, namenjena studentima širom sveta. To je najbitnije što imam da kažem. Ta putna stipendija ne važi samo za studente prestižnih univerziteta sa bog-zna-kakvim ocenam. Interesovanje je najbitniji kriterijum. Mene je to u januaru (za džabe) odvelo u Nju Orleans!

Ispričaću i kako sam se tamo proveo. Let je trajao dvadesetak sati, smeštaj je bio super, a konferencija još bolja. Teško je opisati koliko mi je značilo to iskustvo. Upoznao sam dosta studenata, super ljudi, sa sličnim interesovanjima. Upoznao sam dosta profesora, takođe super ljudi sa sličnim interesovanjima. Pričali smo o njihovim radovima, o muzici, aligatorima, životu, i ostalim glupostima. Inače, svi tamo su voljni za razgovor. To je, u neku ruku, i poenta konferencije. Kroz te razgovore i kroz razna predavanja sam, u nedelju dana, naučio više nego mesecima kod kuće. Jedino mi je žao što nisam malo više vremena izdvojio za razgledanje. Biće prilike i za to, da kucnem u drvo.

Inspirisan tuđim genijem i preporukom jednog profesora sa Maks Plank Instituta, odlučio sam da se prijavim za letnju praksu na nekoliko evropskih istraživačkih instituta. Baš skoro sam dobio potvrdu da sam prihvaćen na IMDEA institut, pa ću tako (ako se situacija sa COVID-19 iole popravi), ovog leta tri meseca provesti u Madridu. Da nisam otišao na PLMW i da mi neko nije eksplicitno rekao “prijavi se tu, tu, i tamo”, sumnjam da bi mi to uopšte palo na pamet. Sumnjam da bih se izborio sam sa sobom i prešao preko “svejedno me neće primiti” mentaliteta.

Međutim, kao što ste verovatno i sami zaključili, situacija se promenila. Sledeća od one četiri konferencije, PLDI, koja je planirana za jun ove godine u Londonu, se neće tamo održati. To su ujedno i loše i dobre vesti. Umesto uživo, održaće se online i biće potpuno besplatna za sve!

Stoga, obratite pažnju na njihov sajt ili tviter nalog do juna i nemojte da propustite ovu priliku. A kasnije, kada pandemija prođe, prijavite se za PLMW!

Seminarski rad nije obavezan. Studenti koji ne budu radili seminarski rad i dalje imaju mogućnost da osvoje 100 poena na kursu i da dobiju najvišu ocenu.

Seminarski rad se radi u timu i ne može se raditi samostalno. Tim može da sadrži najviše tri člana. Svaki član tima može dobiti najviše 10 poena. Poeni se ne mogu preneti od prethodne godine.

Dozvoljeni jezici: Scala, Haskel, Prolog, C++ (generičko programiranje), Lua, Ruby, Erlang, Elixir, Scheme, razni skript jezici. Napomena: ukoliko se seminarski radi u Python-u, potrebna je upotreba neke biblioteke koja se ne obrađuje u okviru kurseva.

Nedozvoljeni jezici: Java, PHP, JavaScript, SQL i slično, C, Pascal, odnosno nije dozvoljeno web programiranje niti baze podataka. Takođe, teme iz oblasti mašinskog učenja nisu prihvatljive.

Cilj: Savladati sadržaj koji nije obuhvaćen kursevima na studijama - dakle proširiti znanje i dobiti praktično iskustvo.

Uputstva za izradu i predaju seminarskog:

  • Potrebno je da se koristi GitHub (Uputstvo)
  • Nakon prijave tima, biće napravljen repozitorijum od strane asistenta i članovima tima će biti date potrebne privilegije za rad.
  • Repozitorijum mora da ima README.md fajl koji treba da sadrži:
    • ime teme
    • kratak opis šta tema obuhvata
    • planirane jezike i tehnologije koje će biti korišćeni u izradi
    • šta je potrebno da se projekat pokrene (alati, paketi i slično)
    • na koji način se prevodi i pokreće program
    • za koji operativni sistem je napravljen izvrsni fajl
    • podatke o autorima i njihove kontakt informacije
    • sve ostalo što smatrate da je važno u kontekstu vašeg projekta
  • Neophodno je napraviti izvršnu verziju programa (ne može se koristiti razvojno okruženje za pokretanje programa na odbrani) i postaviti je zapakovanu u repozitorijum pod sekciju Releases.

Seminarski radovi se brane na kraju semestra. Odbrana seminarskog rada se sastoji iz dva dela: prvi deo je kod asistenta gde se detaljno gleda kod i demonstrira da je tema savladana (pokretanje napisanog programa uz neke izmene i prevođenje), a drugi deo je kod nastavnika gde se prezentuje ideja, realizacija i korišćene tehnologije. Odbrana je javna i njoj mogu prisustvovati svi studenti. Odbrana može da bude praćena slajdovima.

Važni datumi
  • Prijava tima za izradu seminarskog rada - do 22. februara
  • Prijava prve verzije teme seminarskog rada - do 1. marta
  • Prihvatanje teme i finalno preciziranje teme seminarskog rada - do 10. marta
  • Predaja finalne verzija seminarskog rada - do 10. maja
  • Odgovor asistenta o potencijalnim potrebnim izmenama - do 17. maja
  • Korigovanje eventualnih izmena: do 24. maja
  • Odbrane seminarskih radove: od 25. maja do 29. maja

Seminarski radovi, 2019. godina

I smer
  • jezik: Python, naziv: 2D Persistent Homology visualizer, studenti: Marko Spasić i Kristina Popović, opis: Alatka koja pruža vizualizaciju algoritma za izračunavanje perzistentne homologije u 2D, git repozitorijum
  • jezik: Go, naziv: Go Blockchain, studenti: Nikola Stanojević, Mateja Trtica i Nikoleta Vukajlović, opis: Implementacija decentralizovane mreže čvorova koji simuliraju blockchain, git repozitorijum
  • jezik: C++, naziv: Compound Units, student: Aleksandar Nikolić, opis: Implementacija generičkog tipa koji predstavlja složene jedinice mere i čije se skraćivanje vrši za vreme kompilacije, git repozitorijum
  • jezik: Ruby, naziv: Safir, studenti: Milena Stojić i Dunja Spasić, opis: Implementacija dodatnih funkcionalnosti (tzv. plugins) za Sketchup koje nisu direktno podržane a znatno mogu olakšati i skratiti rad, dodati na estetici i pomoći pri kreiranju novih modela, git repozitorijum
  • jezik: Ruby, naziv: SELENA, studenti: Katarina Savičić, Sandra Radojević i Dara Milojković, opis: Simulacija razgovora čoveka i virtuelnog psihoterapeuta. Predstavlja implementaciju programa ELIZA, prvog NLP programa, git repozitorijum
  • jezik: Ruby, naziv: CV Express, studenti: Bojana Ristanović, Lea Petković i Nikola Stamenić, opis: Na osnovu podataka i želja vezanim za sam dizajn budućeg CV-a korisnika, kreira odgovarajući CV. Program u pozadini generiše PDF fajl, a korisniku nudi razumljiv grafički korisnički interfejs pomoću kog se unose neophodni podaci, git repozitorijum
  • jezik: Ruby, naziv: Pong, studenti: Boris Karanović, opis: Implementacija jedne od najstarijih arkadnih igrica - Pong. Igrica je napravljena za dva igrača, a programirana u programskom jeziku Ruby, na uredjaju RaspberryPI3. Implementacija GUI-a je izvršena pomoću biblioteke OpenGl git repozitorijum
  • jezik: Kotlin, naziv: MATF Asistent, studenti: Olivera Popović i Aleksandar Stefanović, opis: Ideja projekta je pomoć studentima pri organizaciji vremena tako što učitava raspored sa veb strane fakulteta a korisnik zatim može da izabere kurseve koje želi da pohađa, nakon čega program automatski generiše odgovarajući raspored, git repozitorijum
  • jezik: Python, naziv: Geo Demonstrator, studenti: Kristina Pantelić i Lazar Vasović, opis: Korisnik zadaje figuru u dvodimenzionom okruženju, nad kojom zatim vrši proizvoljne afine geometrijske transformacije: translaciju, rotaciju, refleksiju, skaliranje, smicanje, git repozitorijum
  • jezik: Go, naziv: Anotorr, studenti: Antić Dimitrije, Stefan Golubović i Andrija Novaković, opis: Implementacija peer-to-peer torrent protokola, git repozitorijum
  • jezik: Kotlin, naziv: Androidi, studenti: Stevan Milić i Ivan Nedić, opis: Clicker/Idle igrica u kojoj igrač sakuplja resurse i bira unapređenja koja želi, praveći progres i automatizujući proces igranja, git repozitorijum
  • jezik: Haskell, naziv: Ime_tima, studenti: Strahinja Ivanović i Darko Veizović, opis: Rešavač igre Slagalica istoimenog kviza, git repozitorijum
R smer
  • jezik: Lua, naziv: Protect the planet, studenti: Lazar Perišić i Miloš Đurić, opis: bazira se na pomeranju player-a gore-dole i pucanju meta koje dolaze, tokom vremena mete se stvaraju sve brze dok ne dostignu odredjenu brzinu, cilj igrice je postici sto veci score (unistiti sto veci broj meta), git repozitorijum
  • jezik: Rust, naziv: Robin Hud, studenti: Marijana Urošević i Luka Hadži-Đokić, opis: cilj igre je da, u ulozi Robina Huda, opljačkate zamak i pobegnete pre nego što Vas stražari primete i uhvate, stražari patroliraju zamkom u potrazi za uljezom, ako se igrač nađe u vidnom polju stražara, igra je gotova, git repozitorijum
  • jezik: Lua, naziv: Ne ljuti se čoveče, studenti: Natalija Drašković, Isidora Ristović i Vera Popović, opis: igra veoma nalikuje na poznatu igru Ne ljuti se čoveče i održava njene osnovne koncepte, kao što je mogućnost jedenja protivničke figure, ali uvodi i nove koncepte u vidu pitanja na poljima koja vode od početka do cilja, git repozitorijum
  • jezik: C#, naziv: Windows copy, studenti: Marija Katić i Jovan Milenković, opis: implementacija operacije cut/copy/paste na Windows OS koje u pozadini koriste robocopy komandu, git repozitorijum
  • jezik: Python, naziv: Scaffolder, studenti: Alen Osmani, Danilo Vasić i Bogosav Cvetković, opis: video igra u kojoj je cilj postići što veći rezultat, rezultat zavisi od postignute visine, radnja je smeštena na gradilištu, igrač se penje tako što skače sa skele na skelu, git repozitorijum
  • jezik: Python, naziv: Igra memorije, studenti: Anja Velicković, Ivan Stanić i Milica Simić, opis: kartice su poređane na kvadratnom talonu, prvi igrač podiže dve kartice i ako su identične – uzima ih sa talona i podiže još dve, ukoliko kartice nisu iste, na potezu je sledeći igrač, svako od igrača se trudi da zapamti gde stoji kartica i tako traži par istih, ovaj postupak se ponavlja naizmenično dok se kartice nalaze na talonu, pobeđuje igrač koji ima više kartica, git repozitorijum
  • jezik: Python, naziv: Zmijica, studenti: Anja Drašković i Ilija Katić, opis: svaki put kada pojede hranu zmija poraste, ako kretanjem udari u zid ili zagrize sama sebe igra se završava i ispisuju se poeni, git repozitorijum
  • jezik: Python, naziv: Interactive schedule, studenti: Đorđe Jovanović i Višeslav Đurić, opis: aplikacija koja simulira raspored časova za predavanja i vežbe na fakultetu i u školi, git repozitorijum
  • jezik: C#, naziv: Space Impact, studenti: Nikola Damjanović, Miloš Nikolić i David Aksović, opis: igrica se bazira na pomerajima svemirskog broda gore,dole,napred,nazad i pucanjem na nailazeće neprijateljske brodove kako bi ih oborili i dobili poene, sudaranje u neprijateljski brod ili projektil dovodi do kraja igre, git repozitorijum

Seminarski radovi, 2018. godina

R smer
  • jezik: C++, naziv: Cars game, studenti: Maša Kilibarda, Anđela Milanović i Tamara Despotović, opis: igrica se bazira na pomerajima levo-desno kako bi se izbegli automobili koji nadolaze i skupilo gorivo koje se neprestano smanjuje, cilj igrice je preći što dužu razdaljinu, git repozitorijum, rad
  • jezik: Python, naziv: Primena mašinskog učenja u igri šaha, studenti: Miodrag Radojević, Milica Šehovac i Milica Gajić, opis: primenom mašinskog učenja program daje odgovor da li igrač sa kraljem i topom može u narednih 16 poteza da matira igrača sa kraljem na šahovskoj tabli, git repozitorijum, rad
  • jezik: Scala, naziv: NeoReborn, student: Miloš Ivanović, opis: editor za rad sa grafovima, git repozitorijum, rad
  • jezik: Scala, naziv: Padaš ili vladaš?, studenti: Vera Milosavljević i Veronika Miljaković, opis: kviz sadrži pitanja iz gradiva kursa Programske paradigme i služi za pripremanje kolokvijuma i ispita, git repozitorijum, rad
I smer
  • jezik: Haskell, naziv: Skočko, studenti:Dimitrije Špadijer i Selena Vukadinović, opis: Implementacija igre Skočko iz TV kviza Slagalica, git repozitorijum , rad
  • jezik: GO, naziv: Go golf, studenti: Nikola Ninković i Jovana Pejkić, opis: 2D golf igrica, git repozitorijum , rad
  • jezik: Python, naziv: Imaginary Friend, studenti: Miloš Milutinović i Dijana Zulfikarić, opis: Alat za prepoznavanje govora, koji će u zavisnosti od ulaza izvršavati različite zadatke, git repozitorijum , rad
  • jezik: Haskell, naziv: Numerički algoritmi u Haskellu, studenti: Marija Filipović i Djordje Stanojević, opis: Implementacija numeričkih algoritama, git repozitorijum , rad
  • jezik: Python, naziv: python-web-browser, studenti: Đorđe Dimović i Lazar Bojanić, opis: Pojednostavljen web pretraživač, git repozitorijum , rad
  • jezik: Python, naziv: Kate Perry, studenti: Mateja Marjanović i Dalma Beara, opis: Tekst editor napisan u Python-u, git repozitorijum , rad
  • jezik: C++, naziv: Pluton, studenti: Nebojša Koturović i Jelena Mrdak, opis: Fajl menadžer napisan u C++, git repozitorijum , rad
  • jezik: Kotlin, naziv: Kotlin, studenti: Marko Veljković i Aleksandar Jakovljević, opis: Aplikacije za odabir predavanja iz dobijenog rasporeda časova generisanog izborom predmeta koji student sluša u tekućoj godini na MATF-u, git repozitorijum , rad
  • jezik: Python, naziv: BobanBot, studenti: Marko Jovanović i Stevan Djokić, opis: Boban bot je tu pomogne i studentima i Bobanu tako što će poboljšati efikasnost studentske službe na Matematičkom fakultetu. Biće implementiran kao messenger (facebook) chatbot koji će imati različite funkcionalnosti, git repozitorijum , rad
  • jezik: Python, naziv: mlSmart game, studenti: Stevan Milić i Ivan Nedić, opis: Igrica za dva igrača za učenje mašinskog učenja, git repozitorijum , rad

Seminarski radovi, 2017. godina

  • jezik: Python, naziv: Pyraminix, studenti: Tamara Marčetić i Maja Stojković, rad
  • jezik: Python, naziv: Multitasking igrica, studenti: Vladimir Đošović i David Marjanović , rad
  • jezik: Scala, naziv: Potera, studenti: Katarina Đurić, Lazar Mladenović i Tatjana Damnjanović, rad
  • jezik: Scala, naziv: Gladne zeke, studenti: Ivona Jurošević i Aleksandar Mužina, rad
  • jezik: Scala, naziv: Kviz, studenti: Marko Mladenović, Andrijana Čakarević i Nikola Rajković, rad
  • jezik: Lua, naziv: Whey invasion, studenti: Katarina Živković i Lazar Nisić, rad
  • jezik: C++, naziv: Implementacija balansiranih AVL stabala, studenti: Milan Čugurović i Ivan Drecun, rad
  • jezik: Python, naziv: Maze-pathfinder, studenti: Milana Kovačević i Ivan Ristović, rad
  • jezik: Python, naziv: Escape room, studenti: Ana Bajić, Strahinja Stanojević i Tomislav Milovanović, rad
  • jezik: Python, naziv: PMK, student: Miljan Kolčić, rad
  • jezik: Ruby, naziv: Sticky notes, studenti: Dušan Pilipović i Vido Mladenović, rad
  • jezik: Ruby, naziv: RX ball, studenti: Nikola Dimić i Dragana Dimitrijević, rad
  • jezik: Lua, naziv: 5 in a row, studenti: Srđan Lazarević i Ana Košutić, rad
  • jezik: Lua, naziv: Defense of the burek, studenti: Nikola Dimitrijević, Luka Živanović i Božidar Antić, rad
  • jezik: Blueprint (Unreal Engine), naziv: Balansero, studenti: Rastko Đorđević, Marijana Tanović i Bojan Vasiljević, rad
  • student: Uroš Gojković, jezik: Clojure, rad
  • student: Slavko Djuričin, jezik: OCaml, rad
  • student: Miroslav Mišljenović, jezik: GO, rad
  • student: Nemanja Majstorović, jezik: ML, rad
  • student: Djordje Andjelković, jezik: Julia, rad
Seminarski radovi, 2016. godina
  • naziv: Sovice, studenti: Stanko Grujić i Željko Grujić, rad
  • naziv: Mravi, studenti: Strahinja Milojević, Miloš Arsić i Jovana Đoković, rad
  • naziv: HopOp, studenti: Uroš Poznan i Jelena Kitanović, rad
  • naziv: Avioni, studenti: Miloš Lončarević i Filip Miljaković, rad
  • naziv: Banka, studenti: Kristina Gavrilović, Milena Dukanac, Uroš Poznan i Jelena Kitanović, rad
  • naziv: DNK, student: Anđela Mijajlović, rad
Seminarski radovi, 2015. godina
  • naziv: PewPew, studenti: Jelena Simović i Nikola Grulović, rad
  • naziv: Multithreading, student: Nikola Premčevski, rad
  • naziv: Sunčev sistem, student: Vojislav Stanković, rad
  • naziv: Pametne utičnice, student: Pavle Pavlov, rad
  • naziv: Kviz, student: Una Stanković, rad
  • naziv: Kviz, student: Kristina Stanojević, rad
  • naziv: Kombinatori, studenti: Vlado Skoko i Nikola Ajzenhamer, rad
  • naziv: Aurora, studenti: Nemanja Mićović i Lazar Ranković, rad
  • naziv: RGB LED, student: Đorđe Milićević, rad
  • naziv: Super Mario, studenti: David Ivić i Saša Cvetković, rad
  • naziv: Moj broj, student: Željka Živanović, rad
  • naziv: Moj broj, studenti: Isidora Đurđević i Daniel Doža, rad
  • naziv: Nim, student: Anja Bukurov, rad
Matematički fakultet, Univerzitet u Beogradu
školska 2018/19. godina