Název:

Skriptovací jazyky

Zkratka:ISJ
Ak.rok:2019/2020
Semestr:letní
Studijní plán:
ProgramObor/
specializace
RočníkPovinnost
BIT-1.volitelný
IT-BC-3BIT-volitelný
IT-BC-3BIT1.volitelný
Vyučovací jazyk:čeština
Informace pro zapsané:http://www.fit.vutbr.cz/study/courses/ISJ/private/
Kredity:5 kreditů
Ukončení:zkouška (kombinovaná)
Výuka:
hod./sempřednáškasem./cvič.lab. cvič.poč. cvič.jiná
Rozsah:2600026
 zkouškatestycvičenílaboratořeostatní
Body:5190040
Garant:Smrž Pavel, doc. RNDr., Ph.D. (UPGM)
Zástupce garanta:Fajčík Martin, Ing. (UPGM)
Přednášející:Fajčík Martin, Ing. (UPGM)
Smrž Pavel, doc. RNDr., Ph.D. (UPGM)
Cvičící:Smrž Pavel, doc. RNDr., Ph.D. (UPGM)
Fakulta:Fakulta informačních technologií VUT v Brně
Pracoviště:Ústav počítačové grafiky a multimédií FIT VUT v Brně
Prerekvizity: 
Operační systémy (IOS), UITS
Úvod do softwarového inženýrství (IUS), UITS
Základy programování (IZP), UIFS
Rozvrh:
DenVýukaTýdenMístnostOdDoPSKSkupiny
ČtpřednáškavýukyD105 08:0009:501BIA 1BIB 2BIA 2BIB 3BIT xx
 
Cíle předmětu:
  Porozumět tématu skriptovacích jazyků a jejich aplikací, pochopit komplementaritu skriptovacích jazyků vzhledem k systémovým jazykům, jejich výhody a nevýhody. Seznámit se základy regulárních výrazů, použitím vhodných struktur a postupů zejména v jazyce Python (částečně i ruby a dalších).
Anotace:
  Základní koncepty skriptovacích jazyků, skriptování versus programování, přehled vývoje skriptovacích jazyků, makrojazyky, tvorba komponent, základy jazyka Python, skriptování v operačních systému Unix, objektově-orientované programování ve skriptovacích jazycích, souběh a paralelismus.
Získané dovednosti, znalosti a kompetence z předmětu:
  Studenti se seznámí s moderními skriptovacími jazyky, po úspěšném zvládnutí předmětu budou schopni demonstrovat znalosti a chápání základních vlastností a role skriptovacích jazyků, syntaxe a sémantiky jazyka Python, implementovat skripty pro automatizaci systémových činností a vyvíjet jednoduché aplikace s použitím vhodných nástrojů.
Dovednosti, znalosti a kompetence obecné:
  Studenti se naučí řešit problémy v jazyce Python formou pravidelných projektů. Zdokonalí se v praktickém užívání programátorských nástrojů.
Proč je předmět vyučován:
  I když je předmět ISJ pro některé první příležitostí k seznámení se s programovacím jazykem Python, a okrajově Ruby, případně dalšími, nejedná se o základní kurz programování v těchto jazycích. Osobně se domnívám, že úvodní kurzy programování v konkrétním jazyce (za kredity) na univerzity snad ani nepatří. Někteří studenti je dnes absolvují dokonce už v raných ročnících gymnázií či na středních školách. A i pokud se tak nestane, měli by ti, kteří úspěšně prošli přijímacími zkouškami na FIT a chtějí poznat jen základní prvky jazyků typu Python, zvládnout pochopit náplň úvodních internetových kurzů, případně základních příruček, kterých je na internetu celá řada (viz také odkazy níže).

Obsah předmětu jde v mnoha směrech daleko nad rámec základních kurzů programování a zhruba od poloviny semestru se předmět dotýká témat, která bývají řazena mezi pokročilé techniky programování v tom kterém jazyce. I když tedy začínáme regulárními výrazy a základními stavebními kameny jazyka Python, probíráme tuto látku velmi rychle, abychom se co nejdříve dostali ke konceptuálně zajímavým a z hlediska systémových jazyků typu C novým tématům. Dále, i když většinu konstrukcí ukazujeme v jazyce Python a vyzdvihujeme některé elegantní konstrukce v Ruby a jinde, zaměřuje se ISJ na obecné koncepty, které jsou typické pro celou rodinu vysokoúrovňových dynamických skriptovacích jazyků.

ISJ není kurz, v němž lze získat kredity zadarmo. Studenti 1. ročníku, kteří o něj budou mít zájem, jej určitě zvládnou. Ale jistě budou muset překonat skutečnost, že se s některými koncepty (mj. i objektově orientovaným přístupem) setkají prostě poprvé, a nebudou tedy moci stavět na základech osvojených ve specializovaných kurzech. Zkušenost z předchozích let ale ukazuje, že se zvýšené úsilí z dlouhodobého hlediska i studentům 1. ročníku vyplatí.

Předmět je nepovinný, takže většinou není problém jej neabsolvovat. Pokud byste ale rovnou věděli, že se nebudete moci či chtít přípravě a projektům pravidelně věnovat, doporučuji raději vybrat jednodušší kurzy. Ať nejste zklamaní...

Pro každé z probíraných témat jsou zveřejněny odkazy na volně dostupné zdroje, často videa z konferenčních přednášek (v angličtině), s nimiž by se studenti měli seznámit ještě před přednáškou, na kterém je ta která oblast probírána. Přednášky cíleně nejsou vedeny jako výklad nových témat "od nuly", ale předpokládá se, že přítomní už témata alespoň na základní úrovni prošli v odkazovaných materiálech, a lze se tedy věnovat diskusi, provázání probíraného s dřívější látkou a souvisejícími oblastmi, případně vysvětlování pokročilých otázek.

Při současném rozsahu předmětu bohužel nelze zavést klasická počítačová cvičení. Všem proto doporučuji používat na přednáškách notebooky, tablety a další zařízení, na nichž si budou moci přímo "hrát" s demonstračním kódem. Část přednášky by tak lépe mohla mít formu demonstračního cvičení, kdy budu kód modifikovat přímo před tabulí a vy budete moci vidět, případně si i zkoušet, důsledky konkrétních změn.

Materiály, které budu využívat na přednáškách (jak bylo uvedeno, spíše jako podklad k diskusi) budou sice zveřejněny, ale nejsou primárně určeny k samostudiu. Nemá tedy cenu se na ně zaměřovat při přípravě na zkoušku, je vhodnější znovu projít materiály k jednotlivým tématům a projekty. Materiály budou převážně ve formátu Jupyter Notebook. O instalaci tohoto prostředí bude řeč na první přednášce.

V předmětu je místo jednoho či několika málo velkých projektů zadáno 8 miniprojektů, tedy od 3. přednášky téměř každý týden. Je k dispozici server, který projekty ještě před oficiálním odevzdáním prostřednictvím WIS automaticky ohodnotí, takže lze předem zjistit, kolik bude za aktuální řešení bodů. Půlsemestrální test a zkouška jsou přímo svázány s tématy, která si vyzkoušíte v rámci projektů.

Osnova přednášek:
 
  1. Úvod, stručná historie vývoje skriptovacích jazyků, výhody a nevýhody, porovnání jazyků
  2. Regulární výrazy a jejich podpora ve skriptovacích jazycích
  3. Vytváření jednoduchých skriptů v prostředí OS Unix, automatizace systémových činností
  4. Jména v Pythonu, základní datové struktury a jejich implementace
  5. Slovník (hashovací struktura) a jeho implementace v Pythonu
  6. Funkce a jejich argumenty, moduly, zpracování výjimek
  7. Základy objektově orientovaného programování ve skriptovacích jazycích
  8. Pokročilé prvky objektového přístupu v Pythonu, vícenásobná dědičnost a pořadí hledání metod
  9. Základy jazyka ruby a srovnání s Pythonem
  10. Dekorátory funkcí a tříd
  11. Iterační protokol a iterovatelné objekty
  12. Generátory a jejich použití v kontextu funkcí
  13. Souběžnost a paralelismus
Osnova ostatní - projekty, práce:
 
  1. Samostatné projekty řešící zadané obecnější úlohy, předpokládá se naprogramování středně rozsáhlého skriptu v jazyce Python. Je požadováno elektronické odevzdání pomocí IS FIT.
Literatura referenční:
 
  • Driscoll, M: Python 201: Intermediate Python. Amazon Digital Services LLC, ASIN: B01LMUAYSO, 2016.
  • Beazley, D.M.: Python - Podrobná referenční příručka pro programovací jazyk Python. Neocortex.
  • Abelson, H.: Structure and interpretation of computer programs, Cambridge. MIT Press, 2002.
Literatura studijní:
 
  • Driscoll, M: Python 201: Intermediate Python. Amazon Digital Services LLC, ASIN: B01LMUAYSO, 2016.
  • Harms, D., Macdonald, K.: Začínáme programovat v jazyce Python. Computer Press, ISBN 80-7226-799-X.
  • Lutz, M., Ascher, D.: Naučte se Python - Pohotová příručka. Grada, 2003, ISBN 80-247-0367-X.
Kontrolovaná výuka:
  Kontrolovaná výuka zahrnuje půlsemestrální test a individuální projekt. Půlsemestrální test nemá náhradní termín.
Ke zkoušce je třeba získat minimálně 1/3 bodů z bodovaných aktivit, přičemž 13 bodů je minim z projektu.
Průběžná kontrola studia:
  
  • Půlsemestrální písemný test (9 bodů).
  • Individuální projekt (40 bodů).
Podmínky zápočtu:
  
  • Získání alespoň 20 bodů z projektů
 

Vaše IPv4 adresa: 34.229.126.29