Teorija Programskih Jezikov (IŠRM)/Izpitna vprašanja

Iz MaFiRaWiki

Vsebina


Za študente IŠRM je ustni izpit iz Teorije programskih jezikov običajno prvi ustni izpit v teku njihovega študija, zato pridejo na ustni izpit še posebej prestrašeni. Zagotavljam, da je strah odveč in ni nič bolj utemeljen, kot strah pred zobozdravnikom. Bolj kot se sprostite, manj boli.

Tu je zbranih nekaj tipičnih vprašanj, ki jih zastavljam na ustnem izpitu. Zares je sam ustni izpit pogovor med kandidatom in predavateljem in ne zastrašujoče izpraševanje. Je pa za kandidata vsekakor bolje, če čim več pove sam od sebe, da mi ni treba vsega vleči iz njega, kot da bi mu pulil zobe.

Običajno vprašam splošno vprašanje ("Kaj veš povedati o izreku o varnosti?") in ne kaj zelo specifičnega ("Kako smo dokazali lemo o napredku za primer, ko je program aplikacija?"). Ko vidim, koliko študent ve povedati sam od sebe, ga ustrezno usmerjam in postavljam podvprašanja.

Če vas vprašam, da pojasnite kak pojem, ga pojasnite tako, kot če bi bili vi učitelj in jaz študent. Zamislite si, da pojasnjujete nekomu, ki pojma še ne pozna. Koristno lahko uporabite primere, vendar so tudi splošne razlage pomembne.

Ker ste študenti matematike, se zelo ceni natančno izražanje. Kot primer navajam nekaj tipičnih odgovorov o tem, kaj je lema o napredku:

  • To je, če imaš en program potem ima naslednji korak: slaba slovenščina, nepravilna formulacija
  • Program, ki ima naslednji korak, ima tip: ni res, na primer if true then 7 else false
  • Program, ki ima tip, ima naslednji korak: ni res, na primer 42
  • Če ima program tip in ni vrednost, ima naslednji korak: pravilno

Kot matematika me zmoti, če mi poveste izrek tako, da dobim občutek, da sem pomolil glavo v skledo solate. Vzemite si čas, zberite se, premislite kaj boste povedali, nato pa jasno povejte, kaj so predpostavke in kaj sklep izreka. Pomagajte si z zapisom na tabli.

Če ne znate pravilno povedati, kaj mislite, kako naj potem vem, kaj mislite? Vadite: povejte izrek in se vprašajte, ali je to, kar ste povedali, možno narobe razumeti, ali razumeti na več načinov, ali sploh ne razumeti?

Komentarji

Tu so zbrani komentarji na vaše odgovarjanje pri ustnih izpitih.

Na splošna vprašanja odgovarjajte s splošnim pregledom snovi

Kadar vas vprašam zelo splošno vprašanje, sprašujem po splošnem pregledu neke snovi. Pogosto pa dobim odgovor, ki se začne na sredini. Na primer, ko sem spraševal"Kaj so sestavni deli definicije programskega jezika, npr. MinML?", sem dobival različne odgovore:

  • Imamo izrek o varnosti, ki pravi ... (Nisem vprašal o izreku o varnosti!)
  • Pravila za semantiko malih korakov podamo ... (Nisem vprašal o semantiki malih korakov!)
  • Najprej je treba določiti, kateri izrazi so vrednosti ... (Ni res, najprej se moramo pogovarjati o sintaksi)

Idealen odgovor bi šel nekako takole: "Za primer vzemimo MinML. Definicija sestoji iz konkretne in abstraktne sintakse, statične semantike ali preverjanja tipov in dinamične semantike. Oglejmo si najprej sintakso..."

Razjasnite si koncepte

  • Naučite se tehnični pomen besede program in ne mešajte programov z izrazi.
  • Naučite se, kaj dejansko je glavni tip in ne samo fraze "MinPoly izračuna glavni tip".

Ne postavljajte sami sebi težkih vprašanj

Pogosto vam prepustim, da si sami izberete podvprašanje, na primer: "Pokaži mi nekaj tipičnih pravil sklepanja za delno pravilnost". Ne vem zakaj, ampak študenti si zelo radi izberejo podvprašanja, na katera potem ne znajo ali narobe odgovorijo! Verjetno mi ni treba razlagati, da to ni optimalni način odgovarjanja.

Tipična vprašanja

  • Kaj veš povedati o izreku o napredku?
    • Kako smo ga dokazali (lemi o ohranitvi in napredku)?
    • Ali vsi programski jeziki ustrezajo izreku o napredku?
    • Zakaj je pomemben za programersko prakso? Kaj se lahko zgodi v programskem jeziku, za katerega izrek o napredku ne velja?
  • Kaj je polimorfizem? Kako smo izračunali polimorfne tipe?
    • Katerega izmed vseh tipov izračuna posotpek združevanja?
    • Kaj je glavni tip?
    • Podaj preprost primer programa in ustrezni polimorfni tip
  • Katera so osnovna pravila za podtipe?
    • Kako se glasi pravilo za podtipe funkcij? Ali se spomniš, da sem na predavanjih razlagal, kako si tega pravila študenti ne zapomnijo?
  • Kaj je delna in kaj popolna pravilnost? Razlika med njima.
    • Podaj nekaj pravil za delno in popolno pravilnost.
    • Pravilo za pravilnost zanke while.
  • Kaj so osnovne sestavine v definiciji programskega jezika (npr. MinML)?
    • Kaj sta semantika velikih in malih korakov?
    • Podaj nekaj pravil za semantiko malih korakov.
  • Kakšno zvezo imajo rekurzivne definicije z negibnimi točkami?
  • Zakaj smo v denotacijski semantiki potrebovali izrek o negibni točki?
Osebna orodja