DIZAJN PROGRAMSKIH JEZIKA

Kurs dizajn programskih jezika je obavezan kurs na trećoj godini R smera. U okviru kursa se proučavaju različite karakteristike programskih jezika i stilova programiranja:

  • Skript programiranje kroz Python
  • Programiranje ograničenja kroz Python constraint
  • Komponentno programiranje kroz PyQt (prethodnih godina rađena biblioteka JavaFX)
  • Konkurentno programiranje i odgovarajući mehanizmi konkurentnog programiranja kroz GO (prethodnih godina rađena Java)
  • Generičko programiranje kroz C++
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistent:

Obavezni predmet

  • 5 ESPB bodova
  • 2 časa predavanja
  • 2 časa vežbi

Predispitne obaveze (45 poena):

  • teorija: 20 poena
  • zadaci: 25 poena

Završni ispit (55 poena):

  • teorija: 25 poena
  • zadaci: 30 poena
Na ispitu se istovremeno rade i teorija i zadaci. Da bi položio ispit, student treba da ostvari najmanje 51 poen, od čega najmanje 40% na teoriji (18 poena) i najmanje 40% na zadacima (22 poena) i na završnom ispitu minimum 30% na praktičnom delu, od čega minimum 15% na C++u i minimum 15% na GO.

Programski jezici - uvod

Skript programiranje, programiranje ograničenja

Konkurentno programiranje

Parametarski polimorfizam

  • Parametarski polimorfizam. Generičko programiranje kroz C++.
    Slajdovi. Tekst.

Svojstva programskih jezika

Dodatni materijali

Dodatni materijali sadrže seminarske radove koji su rađeni prethodnih godina iz oblasti kursa.
Upozorenje: seminarski radovi sadrže razne korisne informacije, ali mogu sadržati i greške!
Svi dodatni materijali za učenje se mogu naći ovde.

Webgrader

  • Webgrader sistemu možete pristupiti [ovde]. Na sistem se prijavljuje klikom na "Prijavi se" korišćenjem podataka za fakultetski alas nalog.
  • Dodatni zadaci iz C++ biće postavljeni svake subote u 12h počevši od 7.12. do kraja semestra, uključujući i subotu 11.1.2020.
  • Pri rešavanju zadataka je potrebno držati se naznačenog formata obrade i ispisa podataka.
  • Prvih pet studenata koji postave tačno rešenje zadatka (uspešnost 100%), dobiće 1 dodatni poen.
  • Jedan student može nedeljno osvojiti najviše 1 dodatni poen, odnosno, ukupno najviše 5 dodatnih poena.
  • Tabelu sa dodatnim bodovima možete pogledati ovde. Tabela će biti ažurirana nakon svake nedelje.

ČAS 1

ČAS 2

ČAS 3

ČAS 4

ČAS 5

ČAS 6

Kolokvijum

  • Primer kolokvijuma: [Zadaci]

  • Struktura kolokvijuma:
    - Python: četiri zadatka
    • gradivo iz skript programiranja i programiranja ograničenja
    • korišćenje biblioteka: pandas, matplotlib i numpy
    • pravljenje grafičkog interfejsa korišćenjem PyQt5 bibilioteke u okviru jednog zadatka
    - GO: jedan zadatak koji obuhvata gradivo do kolokvijuma (6. i 7. čas vežbi)

  • Na kolokvijumu će biti dostupni:
    - python3 i go alat za prevođenje programa
    - VS Code sa instaliranim paketom za osnovne i dodatne module u python3 i go jeziku

  • Virtuelna mašina za studente sa potrebnim softverom za kurs.
    Da biste pokrenuli virtuelnu mašinu, potrebno je da imate instaliran VirtualBox koji možete preuzeti ovde .
    Studentima je na raspolaganju nalog student (lozinka: student).

ČAS 7

  • Konkurentno programiranje. Sinhronizacija niti. Podela poslova po nitima unapred.
    [Zadaci] [Rešenja]

ČAS 8

ČAS 9

ČAS 10

ČAS 11

ČAS 12

Ispit

  • Primer ispita sa bodovanjem: [Zadaci]

  • Struktura ispita:
    - GO: dva zadatka koji obuhvataju celo gradivo iz konkurentnog programiranja
    - C++: dva zadatka koji obuhvataju celo gradivo iz generičkog programiranja

Literatura za predavanja

  • Materijali i slajdovi sa predavanja i vežbi
  • R. Sebesta: "Concepts of programming languages", Addison Wesley, (10. ed.), 2012.
  • A. Tucker and R. Noonan: "Programming Languages: Principles and Paradigms", McGraw-Hill Science, 2001.
  • P. Van Roy, S. Haridi: "Concepts, Techniques, and Models of Computer Programming", MIT Press, 2003.

Literatura za vežbe

Dodatno

Spisak programa potrebnih za kurs

  • Python 3.6
  • Python biblioteke: pandas, numpy, matplotlib, PyQt5, python-constraint
  • GO
  • G++
  • Visual Studi Code (preporuka, može se koristiti i neki drugi editor)

Septembar 3 - rezultati ispita

Rezultate ispita možete pogledati ovde.
    Uvid u radove
  • praktični deo: javiti se elektronskim putem asistentkinji do kraja dana.

30.09.2020.

Septembar 3

Termin ispita u roku Septembar 3 ostaje prema rasporedu, tj. ispit će biti održan u sredu, 30.09. u 17h na Trgu, sačekati ispred 704.
Važna napomena: radovi će biti pregledani odmah nakon ispita. Pošto upis ocena mora biti završen 30.09. uvid u teoriju i praktični deo ispita će biti moguć samo nakon ispita po završetku pregledanja radova, odnosno, studenti zainteresovani za uvid mogu sačekati ispred kabineta 716 nakon ispita.

27.09.2020.

Septembar 3 - promena termina ispita

Mole se studenti koji planiraju da izađu na ispit u ovom roku, da potvrdite mejlom asistentkinji izlazak do kraja nedelje, tj. do 27.09.

25.09.2020.

Upis ocena

Mole se studneti koji su položili ispit u nekom od prethodnih rokova i žele da upišu ocenu u indeks da se prijave putem naredne ankete do ponedeljka 28. septembra u 12h, kako bi napravili odgovarajući plan upisa ocena (kako bi se izbegle gužve po hodnicima i čekanje).

Upis ocena biće organizovan u sredu, 30. septembra, a tačni termini biće objavljeni nakon isteka roka za popunjavanje ankete. Ako nekome 30. septembar ne odgovara, nije problem, biće i drugih termina za upis (javite se mejlom nakon 05. oktobra).

24.09.2020.

Septembar 2 - rezultati ispita

Rezultate ispita možete pogledati ovde. Rezultati su upisani i u Hipatiju. Mole se studenti da provere poene i ukoliko primete bilo kakvu grešku, istu prijave.
    Uvid u radove
  • praktični deo: javiti se elektronskim putem asistentkinji zaključno sa petkom, 18.09.
  • teorijski deo: javiti se elektronskim putem profesorki do subote 19.09. u podne.

16.09.2020.

Septembar 2

Ispit u roku Septembar 2 biće održan u sredu, 16.09. sa početkom u 13h u učionici 704 na Trgu.

14.09.2020.

Septembar 1 - rezultati ispita

Rezultate ispita možete pogledati ovde. Rezultati su upisani i u Hipatiju. Mole se studenti da provere poene i ukoliko primete bilo kakvu grešku, istu prijave.
    Uvid u radove
  • praktični deo: javiti se elektronskim putem asistentkinji.
  • teorijski deo: javiti se elektronskim putem profesorki.

03.09.2020.

Septembar 1

Ispit u roku Septembar 1 biće održan u sredu, 02.09. sa početkom u 17h u učionici 704 na Trgu.

02.09.2020.

Jun 1 - rezultati ispita

Rezultate ispita možete pogledati ovde. Rezultati su upisani i u Hipatiju. Mole se studenti da provere poene i ukoliko primete bilo kakvu grešku, istu prijave.
    Uvid u radove
  • praktični deo: javiti se elektronskim putem asistentkinji.
  • teorijski deo: javiti se elektronskim putem profesorki.

27.06.2020.

Jun 1

Ispit u roku Jun 1 biće održan u petak, 26.06. sa početkom u 17h u učionici 718 na Trgu.

23.06.2020.

Prijavite se za PLMW (Programming Languages Mentoring Workshop)

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!

29.03.2020.

Januar 2 - rezultati ispita

Rezultate ispita možete pogledati ovde. Rezultati su upisani i u Hipatiju. Mole se studenti da provere poene i ukoliko primete bilo kakvu grešku, istu prijave.
    Uvid u radove
  • praktični deo: javiti se elektronskim putem asistentkinji do petka, 07.02.
  • teorijski deo: cetvrtak, 06.02. u 12h, kabinet 716

05.02.2020.

Januar 1 - rezultati ispita

Rezultate ispita možete pogledati ovde. Rezultati su upisani i u Hipatiju. Mole se studenti da provere poene i ukoliko primete bilo kakvu grešku, istu prijave do 01.02. do kada su moguće izmene.
    Uvid u radove
  • praktični deo: petak, 24.01. u 11h, kabinet 716 ili se javiti elektronskim putem asistentkinji do termina uvida
  • teorijski deo: petak, 24.01. u 15h, kabinet 716
    Posebne pohvale studentima koji su ostvarili izuzetne rezultate na kursu
  • Mandić Dejana
  • Vasiljević Irena
  • Babić Danica
  • Kuprežanin Nikolina

23.01.2020.

Srećna Nova godina

Svim studentima želimo uspešnu i srećnu narednu godinu, sa puno radosti i veselih trenutaka sa najdražima!

31. 12. 2019.

Rezultati seminarskog rada

Rezultati pregledanih seminarskih radova mogu se naći ovde. Svi poeni su uneti u Hipatiju, proverite! U okviru tabele rezultata, dat je raspored unošenja poena u Hipatiju, većini studenata su svi poeni uneti u okviru poena za teorijski deo kolokvijuma. Pregledani su svi seminarski radovi kao i sve predate ispravke. Ako ste predali ispravku, trebalo bi da je broj poena korigovan, a u tabeli je dat dodatni komentar (javite se ukoliko uočite neki problem!).

U okviru tabele, u dnu, su dati komentari koji objašnjavaju dobijeni broj poena. Studenti koji žele detaljnije informacije i obrazloženja, mogu ih dobiti u utorak na predavanjima ili mejlom. Studenti koji nisu zadovoljni brojem poena, mogu ispraviti seminarski rad u skladu sa komentarima i popraviti broj poena. U tom slučaju, neophodno je da se najpre javite mejlom da želite da ispravite broj poena kako bi dobili detaljne instrukcije o tome šta je i kako potrebno izmeniti.

Studenti koji nisu predali seminarski rad mogu to uraditi do 28. decembra ali u tom slučaju mogu maksimalno da osvoje 5 poena i neće imati prostora za popravke. Kompletno ocenjivanje treba da bude završeno do Nove godine za studente kojima je rad pregledan u prvoj turi, i do 10. januara za studente kojima je rad pregledan u drugoj turi.

17. 12. 2019.

Čas predavanja u poslednjoj nedelji

U poslednjoj nedelji nastave, predavanje će biti održano u utorak 24. 12. u sali BIM od 9h do 11h. U sredu u terminu predavanja imaćete čas sa prof Miljanom Kneževićem.

17. 12. 2019.

Predavanja na Argo seminaru

Pozivaju se studenti da prisustvuju narednim predavanjima iz oblasti verifikacija softvera / programski jezici.

U četvrtak 26.12.2019. sa početkom u 18:15h u sali 718 odrzaće se sastanak Argo seminara sa narednim programom:

  1. Alen Arslanagić, University of Groningen: Lightweight Typestate Analysis
  2. Marija Selaković, Huawei Research: Dynamic Analysis and Test Generation for JavaScript
  3. Pavle Subotić, Amazon: Towards Verification of React Applications
  4. Stefan Jakšić, Austrian Institute of Technology: Monitoring of Cyber-Physical Systems for Correctness and Robustness
Apstrakte predavanja mozete videti ovde: http://argo.matf.bg.ac.rs/?content=seminar_sr_lat

Kratke biografije predavača:

  • Alen is a PhD student at the University of Groningen under Jorge Perez. He completed his masters studies at the University of Novi Sad. Alen recently completed a research internship with the Amazon Automated Reasoning Group (ARG).
  • Dr. Marija Selakovic je senior inzenjer u Huawei istrazivackom centru u Dresdenu. Pre dolaska u Huawei, Marija je bila asistent na tehnickom univerzitetu u Darmstadtu, gde je i zavrsila doktorske studije u oblasti analize koda i automatskog testiranja. Tokom doktorakih studija Marija je dva puta bila praktikant u istrazivackom centru Microsofta u Redmondu. Master studije je zavrsila na VU univerzitetu u Amsterdamu i univerzitetu L’Aquila u Italiji. Osnovne studije je zavrsila na fakultetu organizacionih nauka u Beogradu.
  • Dr. Pavle Subotic is an Applied Scientist at the Amazon Automated Reasoning Group (ARG). Previously he worked on R&D projects at AWS, Oracle, and Toshiba. He completed his PhD at University College London (UCL) under Prof. Byron Cook and is a co-founder of the Souffle open source compiler project.
  • Dr. Stefan Jaksic is a Scientist at AIT Austrian Institute of Technology GmbH, in the Center for Digital Safety and Security. Stefan obtained his PhD degree from TU Wien in 2018, successfully defending his thesis ‘Real-time Monitoring for Correctness and Robustness'. He is co-author of several peer-reviewed conference papers in the field of Runtime Verification. He is involved in national and European research projects in the field of verification of mixed-signal systems such as Internet of Things (IoT) and Cyber-Physical Systems (CPSs). He is also lecturing Model-Based System and Software Engineering at FH Campus Wien.

17. 12. 2019.

Seminarski radovi

Zbog kolokvijuma koji se održavaju za vikend i naredne nedelje, rok za izradu seminarskog rada se pomera na 20. decembar u 23:59. Forma za predavanje seminarskog rada će uskoro biti dostupna ovde.

12.12.2019.

Vežbe

U utorak, 10.12. biće održane vežbe samo u terminu od 14:15 u 704. Drugi termin za vežbe biće održan u petak, 13.12. od 16:15 u BIM-u.

09.12.2019.

Webgrader

Na Webgraderu su postavljeni zadaci pod temom "Dodatni zadaci za 9. nedelju vežbi".
Tabelu sa dodatnim bodovima možete pogledati ovde. Tabela će biti ažurirana nakon svake nedelje.

07.12.2019.

Webgrader

Na Webgrader je postavljen test zadatak. Studentima se predlaže da do subote probaju da se uloguju na sistem i posalju rešenje zadatka kako bi se utvrdilo da ispravno funkcioniše forma za slanje rešenja i ocenjivač za C++. Potrebno je da se pri rešavanju zadatka koristi format učitavanja i ispisa koji je prikazan u test primerima.

04.12.2019.

Seminarski radovi

Mole se studenti da pažljivo pročitaju uputstva vezana za izradu seminarskog rada (koja su data u prethodnim obaveštenjima) kao i da razvojno stablo crtaju isključivo onako kako je to prikazano u primeru seminarskog rada. Ukoliko je rad u paru, obim rada treba da bude duplo veći od samostalnog rada, a u slučaju da sam jezik nema dovoljno značajnih prethodnika (npr jezici koji su stariji) potrebno je u razvojno stablo i priču uključiti i odgovarajuće najbitnije naslednike tj jezike na koje je sam jezik značajno uticao.

04.12.2019.

Rezultati praktičnog dela kolokvijuma

Rezultati praktičnog dela kolokvijuma su upisani u Hipatiju. Potrebno je da studenti provere svoje poene i ukoliko primete grešku, prijave asistentkinji.

04.12.2019.

Rezultati teorijskog dela kolokvijuma

Rezultati teorijskog dela kolokvijuma su upisani u Hipatiju. Uvid u radove: sreda 04. 12. u pauzi izmedju predavanja.

02.12.2019.

Rezultati praktičnog dela kolokvijuma

Rezultate praktičnog dela kolokvijuma možete pogledati ovde. Uvid u radove: na pauzi između časova vežbi ili se javiti elektronskim putem asistentkinji zaključno sa petkom 29.11.

26.11.2019.

Kolokvijum

Svi studenti će raditi kolokvijum u prvoj grupi. Kolokvijum će biti održan u utorak, 19.11. sa početkom u 10h. Sačekati na 4. spratu asistentkinju.

17.11.2019.

Prijava za kolokvijum

Zbog velikog broja studenata na Hipatiji, zamolili bismo da potvrdite ukoliko sigurno izlazite na kolokvijum u utorak, 19.11. preko ankete koju možete pronaći ovde. Prijavljivanje traje do ponoći u nedelju, 17.11. nakon čega će biti okačeno obaveštenje u vezi sa organizacijom kolokvijuma.

16.11.2019.

Kolokvijum

Na stranici za vežbe možete pronaći strukturu kolokvijuma, kao i primer istog. Ostavljen je i link za preuzimanje kopije virtuelne mašine na kojoj se polaže kolokvijum/ispit. Studentima je na raspolaganju nalog student (lozinka: student).

Gradivo za teorijski deo ispita obuhvata:
  • uvod u programske jezike i programske paradigme uključujući osnovno o svim paradigmama,
  • skript programiranje,
  • programiranje ograničenja,
  • konkurentno programiranje i
  • programski jezik Go.

10.11.2019.

Prijava za seminarski rad

Ukoliko ste zainteresovani da radite teorijski seminarski rad za dodatnih 5 poena potrebno je
  • Da se prijavite preko naredne forme (rok za prijavu je 5. novembar)
  • Da prisustvujete času predavanja u sredu 6. novembara (ili da se raspitate kod kolega o detaljima vezanim za izradu seminarskog rada)
Seminarski rad ima za cilj da
  • Da produbite svoje znanje u oblasti programskih jezika
  • Da savladate upotrebu jezika za obeležavanje teksta (latex) i paketa za crtanje slika u njemu (tikz)
Seminarski rad obuhvata crtanje razvojnog stabla za određeni programski jezik i pisanje kratkog teksta na temu samog jezika kao i nekoliko izabranih jezika koji su najviše uticali na taj jezik. Primer seminarskog rada za programski jezik Eliksir je dostupan ovde, a sve potrebne informacije tehničke prirode dobićete u okviru predavanja. Podelu tema možete videti ovde.

Rok za predaju finalne verzije seminarskog rada je 15. 12. 2019. Rad se predaje preko forme (ne putem mejla!), na koju će link biti dostupan ovde.

02.11.2019.

Promena termina vežbi

U utorak, 22.10. neće biti časova vežbi za grupu 3R. Termin nadoknade: četvrtak, 24.10. od 9h u učionici DLAB.

22.10.2019.

Početak nove školske godine

Svim studentima želimo lep i uspešan početak školske 2019/20. godine!

27.9.2019.

Matematički fakultet, Univerzitet u Beogradu
školska 2019/20. godina