Praktické tipy, programovací jazyky. IB111 Základy programování Radek Pelánek

Podobné dokumenty
IB111 Úvod do programování skrze Python Přednáška 13

IB111 Úvod do programování skrze Python Přednáška 13

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

IB111 Programování a algoritmizace. Programovací jazyky

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

11. Přehled prog. jazyků

Matematika v programovacích

Jaký programovací jazyk učit jako první a jak ho učit?

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Programování a algoritmizace: úvod

Úvod. Programovací paradigmata

Funkcionální programování. Kristýna Kaslová

Maturitní otázky z předmětu PROGRAMOVÁNÍ

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Objektově orientované programování

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Netradiční programovací jazyky

Maturitní témata Školní rok: 2015/2016

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

IB111 Úvod do programování skrze Python Úvod kurzu

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

IB111 Úvod do programování skrze Python

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Skriptovací jazyky. Obsah

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Počítačová Podpora Studia. Přednáška 4. Nástroje pro vědecko-technické výpočty a zpracování dat. (v rámci PPS) PPS 2014

C2184 Úvod do programování v Pythonu podzim Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita. Úvod.

1. Programování proti rozhraní

DTP Základy programování Úvod do předmětu

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Úvod do programovacích jazyků (Java)

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Funkcionální programování

IB111 Úvod do programování skrze Python Přednáška 7

Program a životní cyklus programu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Martin Hejtmánek hejtmmar

PB161 Programování v jazyce C++ Přednáška 7

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programovací jazyky Přehled a vývoj

PB161 Programování v jazyce C++ Přednáška 7

Algoritmizace a programování

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

PB161 Programování v jazyce C++ Přednáška 9

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

IB111 Úvod do programování Úvod kurzu

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

8 Třídy, objekty, metody, předávání argumentů metod

Programování a algoritmizace: úvod

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IB111 Úvod do programování skrze Python Úvod kurzu

Da D to t v o é v ty t py IB111: Datové typy

Algoritmizace. Cíle předmětu

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Algoritmy I. Cvičení č.1 ALGI 2015/16

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

1 Nejkratší cesta grafem

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Úvod do programování - Java. Cvičení č.4

Programovací jazyk univerzální notace pro zápis algoritmů, implementována.

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Softwarové komponenty a Internet

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Algoritmizace a programování

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Seminář z Informatiky a výpočetní techniky. Slovanské gymnázium Olomouc 4. září 2014 Tomáš Kühr

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Poslední nenulová číslice faktoriálu

Základy programování Zdrojový kód, dokumentace, týmová práce

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Algoritmizace řazení Bubble Sort

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programovací jazyk Pascal

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Vstupní požadavky, doporučení a metodické pokyny

Časová a prostorová složitost algoritmů

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Konečný automat. Jan Kybic.

Algoritmizace a programování

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

První kapitola úvod do problematiky

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

KIV/ZIS cvičení 5. Tomáš Potužák

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Java/QE Akademie - Osnova

Úvod do programovacích jazyků (Java)

Transkript:

Praktické tipy, programovací jazyky IB111 Základy programování Radek Pelánek 2017 1 / 76

Dnešní přednáška shrnutí základů vývojová prostředí, editory správa verzí knihovny, praktický vývoj v Pythonu regulární výrazy přehled programovacích jazyků návaznosti Kahootová anketa 2 / 76

IB111 shrnutí shrnutí základních témat co je potřeba hladce umět pro další studium upozornění na problematické body 3 / 76

Řízení toku výpočtu podmíněný příkaz cykly: for, while funkce, return 4 / 76

Datové typy čísla (int, float) řetězce seznamy, n-tice slovníky 5 / 76

Indexování indexování od nuly rozlišování mezi: indexem i hodnotou na příslušné pozici a[i] rozdíl mezi indexováním seznamu a slovníku vnořené struktury, indexování data[x][y] vs. data[x,y] interpretace indexování zleva 6 / 76

Řazení základní řadící algoritmy: bubble sort, select sort, insert sort použití vestavěného řazení sorted(alist) vs. alist.sort() řazení podle kritéria: key 7 / 76

Funkce dekompozice problému na funkce čistá funkce, vedlejší efekt předávání parametrů, změna parametrů rozlišování, vhodné použití: funkce, která mění parametry funkce, která vrací nový objekt 8 / 76

Proměnné globální, lokální vytvoření aliasu vs. kopie (mělká, hluboká) měnitelné vs. neměnitelné typy indexování slovníku předávání parametrů funkcím 9 / 76

Rekurze základní princip sebe-reference čtení, interpretace rekurzivního kódu jednoduchá rekurze s návratovou hodnotou 10 / 76

Objekty rozlišení třída vs. objekt metody, datové atributy vestavěné typy jsou objekty, použití objektové notace vlastní definice jednoduchých tříd, použití objektů init metody, význam self datové atributy 11 / 76

Čtení komplexních výrazů výrazy podle priorit operátorů volání funkcí zevnitř indexování, tečková notace zleva len(alice.mother.daughters[0].daughters) data[x][get_value(a, b[3])] putpixel(get_coordinates(n), change_color(getpixel((x,y)))) 12 / 76

Vývojová prostředí, editory IDLE dostatečný pro jednoduché příklady, do budoucna chcete něco lepšího... žádoucí vlastnosti editoru: syntax highlighting odsazování, párování závorek autocomplete, suggest PEP8 kontrola podpora ladění podpora refaktorizace... 13 / 76

Vývojová prostředí, editory příklady různých typů editorů: IDLE základní editor používaný v tomto kurzu emacs, vi (+příkazová řádka) obecné editory, příp. se specifickou konfigurací pycharm silný editor speciálně pro Python, vhodné obzvlášť pro velké projekty ipython, jupyter interaktivní použití (prolínání programu a výsledků), v prohlížeči 14 / 76

http://nbviewer.jupyter.org/github/mbakker7/exploratory_computing_with_python/blob/master/ notebook9_discrete_random_variables/py_exploratory_comp_9_sol.ipynb 15 / 76

xkcd: Real Programmers https://xkcd.com/378/ 16 / 76

Správa verzí naivní přístup: myprogram.py, myprogram2.py, myprogram oct 24.py myprogram zaloha.py, myprogram pokus.py myprogram final.py, myprogram really final.py sofistikovanější přístup version control automatizavaná správa verzí podpora týmové práce mnoho různých řešení: git, cvs, svn,... 17 / 76

Git současné populární řešení distributed revision control GitHub repozitář, (primárně) veřejné projekty gitlab.fi.muni.cz repozitář na FI, umožňuje snadno vytvářet soukromé projekty 18 / 76

Python moduly užitečné moduly v základní distribuci math: matematické funkce random: náhodná čísla sys: systémové funkce a proměnné os: spolupráce s operačním systémem re: regulární výrazy datetime: práce s časem json: práce se soubory ve formátu JSON 19 / 76

Python knihovny, frameworky Příklady známých externích knihoven: Django: webový framework NumPy, SymPy, SciPy: efektivní numerické výpočty, symbolické výpočty, vědecké výpočty, statistika Pandas: práce s daty (především tabulkovými ), SQL-like operace matplotlib: tvorba grafů, vizualizace pygame: vývoj her scrapy: scrapování dat z webu Tensorflow: strojové učení, deep learning 20 / 76

Regulární výrazy nástroj pro hledání vzorů v textu programování textové editory příkazová řádka: např. grep teorie: formální jazyky, konečné automaty 21 / 76

Regulární výrazy obecně používaný nástroj syntax velmi podobná ve většině jazyků, prostředí bohatá syntax následuje ochutnávka, ukázky základního využití v Pythonu 22 / 76

http://xkcd.com/208/ 23 / 76

Znaky a speciální znaky základní znak vyhoví právě sám sobě speciální znaky:. ^ $ * +? { } [ ] \ ( ) umožňují konstrukci složitějších výrazů chceme, aby odpovídaly příslušnému symbolu prefix \ 24 / 76

Skupiny znaků [abc] jeden ze znaků a, b, c [^abc] cokoliv jiného než a, b, c \d Čísla: [0-9] \D Cokoliv kromě čísel: [^0-9] \s Bílé znaky: [ \t\n\r\f\v] \S Cokoliv kromě bílých znaků: [^ \t\n\r\f\v] \w Alfanumerické znaky: [a-za-z0-9_] \W Nealfanumerické znaky: [^a-za-z0-9_] 25 / 76

Speciální symboly. libovolný znak ^ začátek řetězce $ konec řetězce alternativa výběr jedné ze dvou možností 26 / 76

Opakování * nula a více opakování + jedno a více opakování? nula nebo jeden výskyt {m,n} m až n opakování Pozn. *, + jsou hladové, pro co nejmenší počet opakování *?, +? 27 / 76

Příklady Jaký je význam následujících výrazů? \d[a-z]\d \d\d\d\d \d{3}\s?\d{3}\s?\d{3} [a-z]+@[a-z]+\.cz ^To:\s*(fi kit)(-int)?@fi\.muni\.cz 28 / 76

Regulární výrazy v Pythonu knihovna re (import re) re.match hledá shodu na začátku řetězce re.search hledá shodu kdekoliv v řetězci (re.compile pro větší efektivitu) raw string r vyraz nedochází k interpretaci speciálních znaků jako u běžných řetězců v Pythonu 29 / 76

Regulární výrazy v Pythonu: práce s výsledkem match/search vrací MatchObject pomocí kterého můžeme s výsledkem pracovat pomocí kulatých závorek () označíme, co nás zajímá 30 / 76

Regulární výrazy v Pythonu: práce s výsledkem >>> m = re.match(r"(\w+) (\w+)", \ "Isaac Newton, fyzik") >>> m.group(0) Isaac Newton >>> m.group(1) Isaac >>> m.group(2) Newton 31 / 76

Regulární výrazy: xkcd http://xkcd.com/1313/ http://www.explainxkcd.com/wiki/index.php/1313:_regex_golf https://regex.alf.nu/ 32 / 76

Programovací jazyky přehled klasifikace, vlastnosti historie způsoby užití neseriózní postřehy 33 / 76

Interpretace, kompilace kompilovaný program zdrojový kód (program) překladač strojový kód vstupy běžící program výstupy interpretovaný program zdrojový kód (program) interpret výstupy vstupy 34 / 76

Programovací jazyky: klasifikace I nízko-úrovňové vysoko-ú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 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 35 / 76

Programovací 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 36 / 76

37 / 76

38 / 76

Historie programovacích jazyků prapočátky: 19. století: Charles Babbage, Ada Lovelace, děrné štítky,... 30. léta: teoretické základy programování, Turingův stroj, lambda kalkul (Alonzo Church) 40. léta: první počítače, strojový kód, asembler 39 / 76

Historie programovacích jazyků 50. a 60. léta: první vysokoúrovňové jazyky (v některých aplikacích přežívají dodnes) ALGOL COBOL FORTRAN vědecko-technické výpočty (užíván stále) BASIC 40 / 76

BASIC jazyk pro začátečníky rozšířen v 70. a 80. letech na mikropočítačích výborný jazyk pro vytvoření špatných programátorských návyků 41 / 76

Historie programovacích jazyků 70. léta rozvoj základních paradigmat (imperativní, objektové, funkcionální, logické) C, Pascal, Prolog 80. a 90. léta další rozvoj jazyků, specializace, nové prvky související např. s nástupem internetu C++, Perl, Haskell, Ruby, R, Java, JavaScript, PHP současnost nové verze jazyků vznik nových jazyků: Go, Dart, Kotlin, Julia 42 / 76

Rosseta Code rosettacode.org stejné problémy řešené v mnoha programovacích jazycích 43 / 76

If programming languages were... weapons https://9gag.com/gag/anxebe0/if-programming-languages-were-weapons religions http://blog.aegisub.org/2008/12/if-programming-languages-were-religions.html boats http://compsci.ca/blog/if-a-programming-language-was-a-boat/ vehicles http://crashworks.org/if_programming_languages_were_vehicles/ killing a dragon: https://blogs.oracle.com/roumen/how-to-kill-a-dragon-with-various-programming-languages 44 / 76

Přehled programovacích jazyků důležitý aspekt přehledu: různé jazyky mají různé rysy, (ne)výhody a aplikační domény nedůležitý aspekt přehledu: volba citátů a přirovnání (značně subjektivní, pro zpestření,...) 45 / 76

C C would be Judaism it s old and restrictive, but most of the world is familiar with its laws and respects them. The catch is, you can t convert into it you re either into it from the start, or you will think that it s insanity. Also, when things go wrong, many people are willing to blame the problems of the world on it. C is a nuclear submarine. The instructions are probably in a foreign language, but all of the hardware itself is optimized for performance. 46 / 76

C: užití nízkoúrovňové programování blízko hardwaru optimalizace rychlosti výpočtu 47 / 76

C syntax mnoho jazyků staví na syntaxi C základní rozdíly oproti Pythonu: vyznačování bloků kódu, (ne)významnost bílých znaků explicitně typovaný jazyk 48 / 76

C syntax: ukázka ciferný součet #include <stdio.h> int SumDigits(unsigned long long n, const int base) { int sum = 0; for (; n; n /= base) sum += n % base; return sum; } int main() { printf("%d %d %d\n", SumDigits(1, 10), SumDigits(12345, 10), SumDigits(123045, 10)); return 0; } 49 / 76

Objektové jazyky odvozené od C C++, C#, Java,... kompilované (Java bytecode) (většinou) explicitně typované typicky silně objektové vhodné pro velké projekty 50 / 76

C++ C++ is a set of nunchuks, powerful and impressive when wielded but takes many years of pain to master and often you probably wish you were using something else. 51 / 76

Java Java is a cargo ship. It s very bulky. It s very enterprise y. Though it can also carry a lot of weight. Will carry a project, but not very fun to drive. 52 / 76

Java: Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello world!"); } } 53 / 76

Interpretované, skriptovací jazyky JavaScript Python Perl PHP Ruby typické užití: vývoj webu (front-end, back-end), zpracování dat, skriptování, prototypování,... 54 / 76

Eval interpretované jazyky flexibilnější než kompilované typická ukázka: příkaz eval vyhodnocení výrazu v řetězci může usnadnit práci ale nebezpečné (zejména nad uživatelským vstupem) 55 / 76

JavaScript JavaScript is a sword without a hilt. 56 / 76

JavaScript i přes podobnost názvu nemá s Javou mnoho společného interpretovaný jazyk jazyk webového front-endu 57 / 76

PHP PHP is a bamboo raft. A series of hacks held together by string. Still keeps afloat though. 58 / 76

Ruby Ruby is difficult to describe. It s sleek, sexy, and very fun to drive. Here s a picture. Very trendy. 59 / 76

Perl Perl would be Voodoo An incomprehensible series of arcane incantations that involve the blood of goats and permanently corrupt your soul. Often used when your boss requires you to do an urgent task at 21:00 on friday night. Perl used to serve the same purpose as Python, but now only bearded ex-hippies use it. 60 / 76

Deklarativní jazyky imperativní programování: program je posloupnost instrukcí ( jak má počítač počítat) deklarativní programování: program je popis toho, co se má udělat 61 / 76

Deklarativní jazyky logické programování: Prolog funkcionální programování: Lisp, Haskell typické užití: umělá inteligence, výpočty, výuka principů, které využijete jinde (funkcionální prvky dnes v mnoha dalších jazycích) 62 / 76

Prolog Prolog is an AI weapon, you tell it what to do, which it does but then it also builds some terminators to go back in time and kill your mom. 63 / 76

Prolog mother_child(trude, sally). father_child(tom, sally). father_child(tom, erica). father_child(mike, tom). sibling(x, Y) :- parent_child(z, X), parent_child(z, Y) parent_child(x, Y) :- father_child(x, Y). parent_child(x, Y) :- mother_child(x, Y). 64 / 76

LISP Lisp is a shiv which comes in many forms. Anyone who uses this is probably crazy and dangerous. 65 / 76

Haskell https://xkcd.com/1312/ 66 / 76

Haskell bsort :: Ord a => [a] -> [a] bsort s = case _bsort s of t t == s -> t otherwise -> bsort t where _bsort (x:x2:xs) x > x2 = x2:(_bsort (x:xs) otherwise = x:(_bsort (x2:xs) _bsort s = s 67 / 76

Matematický software nástroje vyvinuté primárně jako matematický software, ale obsahují obecný programovací jazyk Mathematica R 68 / 76

Mathematica Mathematica is a low earth orbit projectile cannon, it could probably do amazing things if only anyone could actually afford one. 69 / 76

Esoterické programovací jazyky karikatury programovacích jazyků dobrá karikatura umožňuje uvědomit si důležité aspekty originálu Brainfuck AsciiDots LOLCODE OSTRAJava Whitespace... ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++. <<+++++++++++++++.>.+++.------.--------.>+.>. /#$<. *-[+] \#1/ HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE banik pyco tryda Ostrava{ rynek(){ Konzola.pravit("Toz vitaj") pyco } } fajront pyco 70 / 76

Jaký jazyk je nejlepší? neexistuje univerzální jazyk, každý má své (ne)výhody lepší otázka: Jaký jazyk je nejlepší pro danou situaci? problém, který řešíme tým, který problém řeší legacy code učte se různé jazyky! Kolik jazyků umíš, tolikrát jsi programátorem. 71 / 76

Popularita jazyků těžko měřitelné, existuje řada pokusů různými metrikami: vyhledávání na webu počty knížek o jazyku výskyty v inzerátech dotazy na StackOverflow (a podobných stránkách) projekty na GitHubu (a podobných repozitářích) 72 / 76

Popularita jazyků na vršku se vesměs vyskytují (abecedně): C, C++, Java, JavaScript, Python konkrétní příklad indexu popularity: 73 / 76

Co dál? algoritmy (směr k větší abstrakci) IB002 Algoritmy a datové struktury I programátorské úlohy v Pythonu navazující IV003 Algoritmy a datové struktury II programování podrobněji (směr k nižší abstrakci, jak funguje počítač) PB071 Principy nízkoúrovňového programování jazyk C, správa paměti, práce s řetězci objektově-orientované programování PB161 Programování v jazyce C++ (a navazující) PB162 Programování v jazyce Java (a navazující) 74 / 76

Co dál? jiná paradigmata IB015 Neimperativní programování Haskell, Prolog více o jazyce Python a jiných jazycích PV248 Kurz jazyka Python PV249 Vývoj v jazyce Ruby PV178 Úvod do vývoje v C#/.NET (a navazující předměty) teorie programování, vyčíslitelnost a složitost učí se v rámci různých předmětů (IB102, IB107) 75 / 76

Závěrečné přání Ať vás programování baví! 76 / 76