1. diel - Úvod do Pythonu
Vitajte pri prvej lekcii populárneho online kurzu programovacieho jazyka Python. Programovať sa budeme učiť postupne od úplných základov až po zložité konštrukcie a objektové modely. Ďalej sa naučíme pracovať s databázou a vyvíjať webové aplikácie. S trochou trpezlivosti a vytrvalosti sa z teba stane dobrý programátor.
Kurz reflektuje moderný prístup k programovaniu, ktorého súčasťou sú aj AI nástroje. Ukážeme si, ako ich pri vývoji využívať ako praktických pomocníkov pri hľadaní riešení, vysvetľovaní chýb aj písaní kódu. Pamätajme, že AI nie je náhrada za vlastné premýšľanie, je to podpora, ktorá pomáha pracovať efektívnejšie.
Fialové AI boxy v kurze obsahujú doplňujúce tipy a ukážky práce s AI. Nemusíte si ich pamätať, majú vám hlavne pomôcť lepšie pochopiť, ako AI pri programovaní využiť.

Minimálne požiadavky kurzu
Na tento kurz nepotrebujete žiadne špeciálne znalosti, stačí bežná práca s počítačom 🙂
Vývoj programovacích jazykov
Aby sme úplne porozumeli jazyku Python, pozrime sa do minulosti na to, ako sa programovacie jazyky vyvíjali. Bude pre nás dôležité pochopiť, ako Python pracuje a prečo je dobré programovať práve v tomto jazyku.
1. generácia jazykov – Strojový kód
Procesor počítača vie vykonávať len obmedzené množstvo jednoduchých inštrukcií, ktoré sú uložené ako sekvencie bitov, sú to teda čísla. Tie sa mu obvykle zadávajú v hexadecimálnej (šestnástkovej) sústave. Inštrukcie sú tak elementárne, že umožňujú iba napr. sčítanie adries alebo skoky medzi inštrukciami. Nie je možné napr. jednoducho sčítať dve čísla, musíme sa na čísla pozerať ako na adresy v pamäti a také sčítanie čísel zaberie niekoľko inštrukcií. Program, ktorý sčíta dve čísla by vyzeral napr. takto:
2104 1105 3106 7001 0053 FFFE 0000
Inštrukcie sa procesoru predložia v binárnej podobe. Takýto kód je samozrejme extrémne nečitateľný a závisí od inštrukčnej sady daného CPU. V tomto jazyku určite nebude jednoduché tvoriť nejaké programy. Platí, že každý program musí byť nakoniec do tohto jazyka preložený, aby mohol byť na procesore počítača spustený:

2. generácia jazykov – Assembler
Assembler (skrátene ASM) nie je o nič jednoduchší ako strojový kód, ale je ľudsky čitateľný.

Ahoj, ja som Richie, maskot ITnetwork. Nižšie sa nachádza prvá "informácia navyše" v tomto kurze. Ak študuješ kurz cez Úrad práce a máš naň obmedzený čas (pracuješ, máš rodinu), tieto informácie preskoč. Nijako to neovplyvní tvoju úspešnosť na skúške, môžeš si ich v pokoji prečítať neskôr. Naopak, ak máš dostatok času, tieto praktické informácie si rozklikni. Ak lekciu počúvaš ako prednášku, zaškrtni alebo odškrtni možnosť Čítať informácie navyše.
Ide o strojový kód, v ktorom majú inštrukcie slovné označenie (kód), človek si teda nemusí pamätať čísla. Kódy inštrukcií sa potom preložia do vyššie uvedeného strojového kódu. Rovnaký program by v ASM vyzeral takto:
ORG 100 LDA A ADD B STA C HLT DEC 83 DEC –2 DEC 0 END
Vidíme, že podoba je trochu ľudskejšia, ale nezainteresovaní ľudia stále vôbec netušia, ako program funguje (vrátane mňa).
3. generácia jazykov
Jazyky v tretej generácii konečne ponúkajú užívateľovi určitú abstrakciu toho, ako program vidí počítač. Zameriavajú sa totiž na to, ako program vidí človek. Naše čísla sú už vnímané ako premenné a zdrojový kód pripomína matematický zápis.
Sčítanie dvoch čísel by v jazyku C vyzeralo takto:
int main(void) { int a, b, sum; a = 83; b = -2; sum = a + b; return 0; }
Všetci asi tušíme, čo program robí: spočíta čísla 83 a
-2 a výsledok uloží do premennej sum. Pri
všetkých jazykoch tretej generácie je samozrejme výhodou vysoká
čitateľnosť.
S ďalším vývojom išli jazyky ešte ďalej a priniesli objektovo orientované programovanie, ale o tom až neskôr.
Kategórie jazykov
Jazyky tretej generácie môžeme v zásade rozdeliť do dvoch kategórií.
1. Kompilované jazyky
Kompilované (neriadené) jazyky majú svoj zdrojový kód zapísaný v jazyku, ktorému ľudia dobre rozumejú. Zdrojový kód sa samozrejme musí preložiť do strojového kódu, aby ho bolo možné spustiť na procesore. Tento preklad zaisťuje prekladač (kompilátor), ktorý preloží naraz celý program do stroj. kódu:

Hlavnou výhodou kompilácie je rýchlosť výsledného programu, ktorý beží podobne rýchlo ako program v strojovom kóde. Naopak nevýhodou je neprenositeľnosť programu. Nemôžeme program skompilovaný pre Windows spustiť na macOS.
Ak vás zaujímajú konkrétne výhody a nevýhody kompilácie bližšie, zhrňme si ich nižšie.
Výhody kompilácie
Medzi hlavné výhody kompilácie patria:
- Rýchlosť – Jediné spomalenie spočíva v jednorazovej kompilácii. Preložený program potom beží porovnateľne rýchlo, ako keby bol napísaný napr. v ASM.
- Neprístupnosť zdroj. kódu – Program sa šíri už skompilovaný. Nie je ho teda možné jednoducho modifikovať, ak zároveň nevlastníte jeho zdrojový kód.
- Jednoduché odhalenie chýb v zdrojovom kóde – Ak zdrojový kód obsahuje chybu, celý proces kompilácie spadne. Kompilátor programátorovi potom oznámi, čo spôsobilo problém. To značne zjednodušuje vývoj.
Nevýhody kompilácie
Kompilácia so sebou samozrejme prináša niekoľko nevýhod:
- Závislosť na platforme – Program je úplne závislý na platforme, teda na type procesora a operačnom systéme. Nemôžeme vziať skompilovaný program a preniesť ho na inú platformu bez toho, aby sme ho skompilovali na tejto novej platforme.
- Nemožnosť editácie – Akonáhle sa program raz skompiluje do strojového kódu, nemožno ho editovať inak ako opätovnou kompiláciou.
- Memory management – Vzhľadom na to, že počítač danému programu nerozumie a len mechanicky vykonáva inštrukcie, môžeme sa niekedy stretnúť s veľmi nepríjemnými chybami s pretečením pamäte. Kompilované jazyky nemusia mať automatickú správu pamäte a sú to jazyky nižšie (s nižším komfortom pre programátora). Behové chyby spôsobené najmä zlou správou pamäte sa kompiláciou neodhalia.
Príkladom kompilovaných jazykov sú napr. jazyk C, jeho objektový následník C++ alebo Pascal / Delphi.
2. Interpretované jazyky
Interpretácia sa snaží riešiť problém prenosnosti programov medzi rôznymi platformami. Prichádza tiež s vyšším komfortom pre programátora. Interpreter funguje podobne ako kompilátor, len neprekladá program celý naraz, ale iba to, čo je v danej chvíli potrebné. (Interpreter znamená v angličtine tlmočník, teda najskôr vypočuje jednu vetu hovorcu a tú potom preloží a vysloví. Preklad prebieha počas príhovoru, teda behu programu, po vetách/inštrukciách. Kompilátor/prekladač preloží rozhovor celý naraz a potom ho celý prečíta.) Môžeme si predstaviť, že vyššie uvedený zdrojový kód by interpreter čítal po jednotlivých riadkoch, tú časť by vždy skompiloval do strojového kódu a vykonal. Výsledok kompilácie by zahodil a presunul by sa na ďalší riadok. Možno vám to pripadá ako plytvanie výkonom procesora a je pravda, že tento spôsob behu programu tiež nie je práve najrýchlejší:

Hlavnou výhodou je prenositeľnosť medzi operačnými systémami a procesormi, ten istý program môžeme spustiť na macOS, Windows alebo Android. Interpretované jazyky sú tiež typicky jednoduchšie. Nevýhodou je potom nižšia rýchlosť programu.
Ak vás zaujímajú konkrétne výhody a nevýhody interpretácie bližšie, zhrňme si ich nižšie.
Výhody interpretera
Aké môže mať teda tento postup výhody? Je ich hneď niekoľko:
- Prenositeľnosť – Program je plne prenositeľný. Pokiaľ existuje interpreter pre danú platformu, bude sa tam dať zdrojový kód programu spustiť (a vývoj interpretera je jednoduchší ako vývoj kompilátora).
- Jednoduchší vývoj – Vo vyšších jazykoch sme odbremenení od správy pamäte, ktorú za nás robí tzv. garbage collector. Často tiež nemusíme ani zadávať dátové typy a máme k dispozícii vysoko komfortné kolekcie a ďalšie štruktúry.
- Stabilita – Vďaka tomu, že interpreter kódu rozumie, predíde chybám, ktoré by skompilovaný program inak pokojne vykonal. Beh interpretovaných programov je teda určite bezpečnejší. Umožňuje tiež zaujímavú vlastnosť, tzv. reflexiu, kedy program za behu skúma sám seba (o tom si tiež povieme neskôr).
- Jednoduchá editácia – Program môžeme vyvíjať po častiach a nahrávať na cieľové umiestnenie. Vďaka tomu, že sa nemusí kompilovať, ho môžeme jednoducho editovať "za behu".
Nevýhody interpretera
Interpreter má však tri zásadné nevýhody:
- Rýchlosť – Interpretácia môže byť často veľmi pomalá a program tak plne nevyužíva výkon počítača.
- Často ťažké hľadanie chýb – Kvôli kompilácii za behu sa chyby v kóde objavia, až keď je kód spustený. To môže byť niekedy veľmi nepríjemné.
- Zraniteľnosť – Pretože sa program šíri v podobe zdrojového kódu, každý do neho môže zasahovať, alebo dokonca kradnúť jeho časti.
Príkladom interpretovaného jazyka je práve Python alebo napr. PHP.
Prístupy kompilátora a interpretera je možné spojiť a na tomto princípe fungujú jazyky s tzv. virtuálnym strojom. Python však nie je jedným z nich. Ak vás táto problematika zaujala, môžete sa pozrieť na princípy fungovania jazyka Java.
Python
Python je dynamicky interpretovaný jazyk, kód sa teda prekladá až za behu, čím sa prípadné chyby prejavia až pri spustení. Výhodou je, že jazyk je vďaka tomuto prístupu jednoduchší.
Python 2 a 3
Začiatočníkom môže pripadať mätúce, že sa môžu stretnúť s dvoma hlavnými verziami Pythonu:
- Python 2
- Python 3
Vývojári pre Python 3 pozmenili syntax. Asi najväčším rozdielom v tejto verzii je používanie zátvoriek pri volaní funkcií. Táto zmena spôsobila, že mnoho užívateľov zostalo pri verzii 2. Existuje preto mnoho knižníc napísaných pre Python 2, ktoré stále čakajú na portovanie do Pythonu 3.
Python 3 je však modernejší! V predvolenom nastavení používa Unicode a obsahuje mnoho ďalších vylepšení. Často sa odporúča začať práve s Pythonom 3. Vracať sa k verzii 2 má zmysel snáď len kvôli nutnosti použiť z nejakého dôvodu platformu alebo knižnice dostupné iba pre Python 2.
Teraz vieme, čo Python je a na čo sa používa.
Zhrnutie lekcie
Python je moderný programovací jazyk, v ktorom sa budeme učiť od úplných základov až po pokročilejšie témy, ako sú objekty, databázy alebo webové aplikácie. Programovacie jazyky sa vyvíjali od strojového kódu cez assembler až k čitateľnejším jazykom tretej generácie. Python patrí medzi interpretované jazyky, takže sa jeho kód spracováva až pri behu programu. Vďaka tomu je prenositeľný a pohodlný na vývoj, ale býva pomalší a niektoré chyby sa môžu prejaviť až pri spustení.
V nasledujúcej lekcii, Využitie umelej inteligencie pri štúdiu programovania, sa pozrieme na využitie umelej inteligencie pri štúdiu programovania.
