do programovaní a algoritmizace / Uvod kurzu Radek Pelánek 2019 Dnešní prednáška • o předmětu • organizace, ukončení • pojmy - algoritmus, programování • motivace, širší kontext • představení Pythonu, rychlé demo více o samotném programování až příště Cíle predmetu „dobré základy" • zvládnutí základních programátorských konstrukcí (proměnné, funkce, if, for, while, ...) • obecné principy použitelné v radě programovacích jazyků • programátorský styl • úvod do programátorského a algoritmického stylu myšlení + základní povědomí o pokročilých prvcích, záludnostech, ... movací jazyk Python „Uvod do programování" nikoliv „Programování v Pythonu" • Python je používán pro ilustraci pojmů a příkladů, na cvičeních o důraz na obecné koncepty, cílem není detailní zvládnutí Pythonu • záměrně neprobíráme specifika Pythonu • zvládnutí konkrétního jazyka - trénink a praxe Programátorská kultura Programy by měly být nejen korektní, ale i „pěkné". 4 □ ► 4 [3P ► < Programátorská kultura Programy by měly být nejen korektní, ale i „pěkné" • názvy proměnných, funkcí • rozdělení funkcionality do funkcí • nepoužívání „copy&paste" kódu • zarovnání řádku • dokumentace, komentáře Co čekat: príklady • výpočty: faktoriál, prvočísla, odmocnina, náhodná čísla • obrázky: želví grafika, „textová grafika", bitmapy o jednoduché hry: hádání čísla, variace na piškvorky • zpracování dat: statistiky dat ze souboru A 1' 3 3 1 ✓A ^> /\ / \ 1 5 10 10 5 A i Forma predmetu • 2h přednáška, nepovinná, ale velmi doporučená • hodně „příkladový styl" • slidy nemusí být pochopitelné bez komentáře, obsahují i záměrné chyby (pro ilustraci) 9 video záznamy budou pravděpodobně dostupné, ale plátno nepříliš čitelné • 2h cvičení, povinné • programování v jazyce Python 9 více skupin, cvičících Pozn. povinnost „být připraven na cvičení" (konkrétně např. „kontrolní otázky" na konci slidů) Komunikace řešení problémů, nestandardní situace, dotazy: • cvičící spíše než přednášející • osobně (po cvičení, přednášce) spíše než elektronicky • diskuzní fórum spíše než mail Hodnocení predmetu 400 bodů • domácí úkoly: 150 bodů • 5 za semestr o bodování: 25, 25, 30, 35, 35 • vnitrosemestrální zkouška u počítače: 100 bodů • programování v rámci jednoho cvičení • úkoly - variace na příklady ze cvičení • závěrečná písemná zkouška: 150 bodů • zkouší se principy, algoritmy, pojmy, „čtení kódu" • test s výběrem možností, podobné průběžným Kahootům • výjimečné bonusové body (kladné i záporné) Hodnocení predmetu minimum pro ukončení: • účast na cvičení (max. 2 neomluvené hodiny) • odevzdání všech 5 domácích úloh (alespoň 5 bodů každou) • alespoň 90 bodů za domácí úlohy • alespoň 50 bodů za vnitrosemestrální zkoušky • alespoň 80 bodů ze závěrečné zkoušky známka: hranice rovnoměrně mezi 220 a 400 Nesplnění podmínek I Nesplnění podmínek na účast na cvičení či nedostatečný zisk bodů z domácích úloh: • nemáte nárok na opravu • odůvodněné případy - bonusový (a náročný) domácí úkol • plně v kompetenci cvičícího Nesplnění podmínek II Nedostatečný zisk bodů z vnitrosemestrální zkoušky: • opravná zkouška v lednu • binární hodnocení: • úspěch =4> body z vnitrosemestrálky se přepíší na 50 • neúspěch =4> hodnocení F bez možnosti další opravy Nesplnění podmínek III Nedostatečný zisk bodů ze závěrečné zkoušky: a standardní závěrečná zkouška 9 hodnocení F, můžete jít na opravný termín Domácí úkoly - organizace • skupiny: rámcově stejné zadání, odlišné detaily • přesné zadání, termín odevzdání - kompetence 4 □ ► 4 [3p ► < Opisování • pracujte samostatně • opisování se trestá velmi přísně (hodnocení F bez dalších diskuzí) • neřešíme moc, kdo opisoval - nesdílejte svoje řešení Priznaní asistence asistence s DU: • měla by být výjimečná • jasně přiznat v odevzdaných materiálech • celkové pojetí úlohy jsem konzultoval s XY • v této funkci jsem měl chybu a nebyl schopen jsem ji najít, použité řešení je od XY • tuto funkci jsem nezvládl napsal, použil jsem řešení ze stránky WV Stránka predmetu https://www.fi.muni.cz/~xpelanek/IB113/ • harmonogram přednášek, cvičení, úkolů • rozepsané podmínky ukončení • výukové materiály • doplňující informace 4 □ ► 4 [3P ► < Studijní materiály v ISu Relevantní agendy z ISu pro tento předmět: • Učební materiály - slidy z přednášek • Organizační pokyny - archiv zaslaných mailů • Odevzdávárny - odevzdávání domácích úloh • Poznámkové bloky - počet bodů z úloh • Diskuse - nejasnosti, tipy na zajímavé zdroje, 4 □ ► 4 [3P ► Sbírka príkladu https://www.fi.muni.cz/IBlll/sbirka/ • interaktivní webová stránka • příklady ze cvičení • procvičení nad rámec cvičení primárně určena pro paralelní předmět pro informati obsahuje i těžší příklady nad rámec IB113 4 □ ► 4 [3P ► < Umíme programovat • https://www.umimeprogramovat.cz/ • neomezený přístup po přihlášení, viz instrukce v mailu • především průběžné, dobrovolné procvičování • konkrétní doporučení v průběhu semestru • 3. domácí úloha (cvičení Programování v Pythonu) rané doplňkové zdroje - knihy • Python Programming: An Introduction to Computer Science, J. M. Zelle. • Introduction to Computing and Programming in Python A Multimedia Approach. M. Guzdial, B. Ericson. • Programátorská cvičebnice, R. Pelánek. • Jak to vyřešit, R. Pelánek. rané doplňkové zdroje - web • Učíme se programovat v jazyce Python, http://howto.py.cz/index.htm • http://interactivepython.org- interaktivní učebnice • dokumentace k Pythonu • Coursera, Udacity kurzy o sdílejte užitečné zdroje v diskusním fóru předmětu • základní počítačová gramotnost • středoškolská matematika (např. faktoriál, prvočíslo, logaritmus) • logické spojky (and, or, ...) • angličtina (alespoň pasivně, základní porozumění) rychlotest: Kahoot převozník, loďka uveze jen 1 další kus nákladu náklad: vlk, koza, zelí bez dozoru: • vlk žere kozu • koza žere zelí jak dostat vše bezpečně na druhou stranu n Motivační úloha • převozník, loďka uveze jen 1 další kus nákladu • náklad: vlk, koza, zelí • bez dozoru: • vlk žere kozu • koza žere zelí 9 jak dostat vše bezpečně na druhou stranu Jak řešit úlohu algoritmicky? Co to znamená? http://www.fi.muni.cz/~xpelanek/IBlll/vkz/ 4 □ ► 4 [3P ► • návod/postup, jak „mechanicky" vyřešit určitý úlohy/problému * příklady: o rozklad na součin prvočísel • nalezení nejkratší cesty mezi dvěma městy • vygenerovat zadání Sudoku 4 □ ► 4 [3P ► < Žádoucí vlastnosti algoritmu • má jasný vstup a výstup • obecný (nejen pro omezenou třídu instancí) • deterministický (vždy jednoznačné, jak postupovat) • konečný, efektivní za algoritmus můžeme považovat i recept, návod programování - zápis algoritmů pro počítače počítače jsou „hloupé" - zápis algoritmu musí být opravdu přesný (srovnej „osolíme přiměřeně") nutnost vyjadřovat se přesně: o otrava - náročný zápis • bonus - nutnost myslet přesně Proč pořádně zvládnout základy programování • základ pro další studium • užitečnost • profesní • občasná • elegance, kreativita, „síla" movánŕ: způsoby využití (příklady, rozhodně ne kompletní klasifikace) • aplikace • programování pro web • vestavěné systémy • vědecké výpočty • skriptování každé důraz na něco jiného, sdílí ale základní principy „informatického myšlení", námi probírané základní konstrukce jsou potreba všude Aplikace • „samostatné" aplikace pro stolní počítače, mobilní zařízení o příklady: • kancelářský software • editace grafiky, zvuku, videa • hry • důraz na interakci s uživatelem • využití knihoven, práce s operačním systémem Programování pro web o příklady: • informační systémy • e-obchody • prezentace firmy v I / v| / I 9 široka skala: • drobné úpravy existujících systémů (CMS) • vytváření vlastních rozsáhlých systémů • práce s databázemi, integrace různých prostředků (Python/PHP, JavaScript, CSS, HTML...) • důraz na soukromí - přístupová práva v IS, elektronické platby Vestavěné systémy • příklady: • kuchyňské spotřebiče, GPS, mobil, foťák • dopravní prostředky • zdravotnické přístroje • nízko-ú rovno ve programování, ovladače • úzké propojení s konkrétním hardwarem • bezpečnost, práce s limitovanými zdroji (paměť 4 □ ► 4 [3P ► < Vědecké výpočty 9 příklady: 9 simulace počasí, klimatu • bioinformatika (protein folding, analýza genomu, ...) • vymýšlení algoritmů (urychlení výpočtu, distribuované výpočty) • propojení informatiky a matematiky (příp. jiných disciplín) • zpracování rozsáhlých dat • uživatelské rozhraní a interaktivita jsou jen malá část <* příklady: • převod dat mezi různými formáty • rychlá analýza dat • prototypy, experimenty • drobné úpravy systému (např. správce a malý rozsah, specifický účel • často jednorázové aplikace • „programování pro běžný život" Programování v malém / ve velkém programování v malém • desítky až stovky řádků kódu • nezávislé na „ostatních" • tento předmět programování ve velkém • tisíce až milióny řádků • závislosti, souvislosti, návrh, testování, ... • další předměty (OOP, softwarové inženýrství, ) <□► < rnP ► < -E ► < -E ► E O Q, O Programování v malém: motivace • nutná prerekvizita pro kvalitní programování ve velkém • trénink myšlení • prakticky užitečné, i když nejste programátor na plný úvazek raktické programování v malém: príklady • tvorba studijního katalogu • vytvoření interaktivní výukové úlohy pro webový systém • zpracování botanických dat • obrázky do knihy Hlavolamikon • vytváření šifer pro Tmou Pokud neovládáte X, pak vás často ani nenapadne, že by se vám X mohlo hodit. Obrázky do knihy "0102010902050302030703080401040304090507060606100701 3131313113:3131231213-;10" 9 A A 9 A 9 A A 9 A A 9 9 9 9 9 A A A 9 A A 9 9 9 A 9 A A A 9 9 A 9 9 A 9 9 A A 3 1 3 1 3 1 3 1 1 3 3 13 12 3 12 13 TMOU T Z [51 Y 1 rm na 1 P ľzl 1 J B 1 1 * J 0 6 5_ T c T u M Y M O s |o 0 cvičeni rutinní činnost (na počítači) programátorské cvičení ejen užitečnost programování je zajímavé i samo o sobě • elegantní myšlenky • radost z objevování, experimentování • tvoření, kreativita • „síla" - pár stisků klávesnice a vytvoříte něco zajímavého Elegance Mandelbrotova množina, 25 řádků kódu Zkuste YouTube: Mandelbrot set movacŕ jazyky kompilovaný program zdrojový kód (program) překladač strojový kód vstupy bezici program výstupy interpretovaný program zdrojový kód (program) interpret ^ -i výstupy vstupy movacŕ jazyky: klasifikace I nízko-úrovňové • kompilované • nutnost řešit specifika konkrétního systému • explicitní práce s pamětí • náročnější vývoj (nízká efektivita práce) • vysoká efektivita programu vysoko-úrovňové • interpretované • nezávislé na konkrétním systému • využití abstraktních datových typů • snadnější vývoj (vysoká efektivita práce) • nižší efektivita programu nikoliv dvě kategorie, ale plynulý přechod; zjednodušeno movacŕ jazyky: klasifikace II zjednodušená klasifikace a použití nízko-úrovňové C, FORTRAN, ... vestavěné systémy, rychlé výpočty objektové C++, Java, C#, ... klasické aplikace, rozsáhlé systémy skriptovací Python, PHP, JavaScript, Perl, ... programování pro web, skriptování, prototypy deklarativní Prolog, LISP, Haskell, ... umělá inteligence více na samostatné přednášce na konci semestru Python • vysoko-úrovňový - velká míra abstrakce, „spustitelný pseudokód" • interpretovaný - pomalejší než kompilovaný, ale větší volnost • pedagogický - byl tak navržen, dnes již dominantní výukový jazyk • moderní a široce používaný - patří mezi přibližně 5 nejpoužívanějších jazyků • volně a snadno dostupný na všech platformách • široká nabídka knihoven Původ jazyka a názvu autor: Guido van Rossum konec 80. let název podle: Monty Python's Flying Circus / nightí Everything IS 60 SIMPLE! i HELLO WORLD 15 TUST pnirt Wlo, worldi1' DVNAľtiC TYPING'' I conE join U5! / FROG^Arinii^Cj 1$ FUN AGAJNi IT'S A WW P) NEV world 7& UP HEREJ N BLITHE ARE 1 * rouaviwG? / X lOSTTTPEO THAT'S IT? j ... I ALSO SAMPLED EVERYTHING IN THE TOCWE OTMET FOR conPARW- I BUT I THINK THIS l&THE FNTHON, https://xkcd.com/353/ https://www.explainxkcd.com/wiki/index.php/353 on je pouzfvany So what are the Top Ten Languages of 2018, as ranked for the typical IEEE member and Spectrum reader? Language Rank Types Spectrum Ranking https://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages • důraz na obecné principy, nikoliv specifika Pythonu • většina konceptů snadno a velmi podobně realizovatelná v jiných jazycích • používáme Python 3 (zpětně nekompatibilní s Python 2) • minimální použití rozšiřujících knihoven • Základní konstrukce (proměnné, výrazy, řídicí struktu funkce) • Programy pracující s čísly (číselné typy, jednoduché ukázky, dělitelnost, náhoda) • Řetězce a seznamy (a kryptografické odbočky) • Vyhledávání a řazení (práce se seznamem, binární vyhledávání, řadicí algoritmy, základy složitosti) • Datové typy a jejich užití (slovník) hlavní důraz cvičení, vnitrosemestrální zkoušky, ... snová II: Pokročilejší prvky, aplikace • Záludnosti: Proměnné, paměť, rekurze • Práce se soubory, textem, regulární výrazy • Složené datové typy, objekty v Pythonu • Obrázky (reprezentace, generování, úpravy) • Vývoj programů, programovací jazyky, praktické tipy povědomí, základní vhled, testováno na závěrečné zkoušce Demo základních prvků • proměnné • typy (číslo, řetězec, bool) • print (funkce pro výpis) • výrazy, operátory (aritmetické, logické) • podmínky (if/else) • cykly (for, while) • bloky kódu • funkce • programovaní je • zajímavé • užitečné • Python je • přívětivý i pro začátečníka • přímo prakticky použitelný