## Ako sa dá s jazykom Python zvládnuť štvorročné štúdium na strednej škole
[Miroslav "mirek" Biňas](https://bletvaska.github.io)
/ [**Pycon 2022**](https://2022.pycon.sk/)
![mirek](images/mirek.na.hackathone.jpg)
[https://bletvaska.github.io](https://bletvaska.github.io)
## Prečo Python?
Notes:
* nepojdem do detailov, vyzdvihnem len dve veci
![Steep Learning Curve](images/python.learning.curve.png)
Notes:
* ma strmu krivku ucenia sa
* aj pre tuto vlastnost je Python vybornou (a castou) volbou ako prvy jazyk
## Univerzálny programovací jazyk
notes:
* skriptovanie, serverove programovanie, testovanie aplikacii, desktopove aplikacie, webové aplikácie, mikrokontroléry, hry, ...
## Prečo len jeden jazyk?
notes:
* uvediem niekoľko dôvodov
## 1. Menej je niekedy viac
notes:
* chceme ich naucit viac!
* vedia kadečo, ale nič poriadne
* slovami mojho sefa: nie je dolezite, co vsetko by mali studenti vediet, ale co nakoniec naozaj vedia
* ak vedia jazyk, mame viac casu sustredit sa na dalsie temy/technologie/pristupy
* problem - opakujeme sa
> Štandardné kurzy miesto výučby programovania učia svojich čitateľov a frekventantov len syntax preberaného jazyka.
>
> -- [Rudolf Pecinovský](https://pdfs.semanticscholar.org/d50c/fa981ded2bf03fc6e3db8e7a85e82ce75180.pdf)
| predmet |pomer | % |
|---------------------------|-------|-----|
| [Algoritmizácia](http://itakademia.sk/wp-content/uploads/2018/07/Riesenie_problemov_a_programovanie.pdf) | | |
| [Objektové programovanie](http://itakademia.sk/wp-content/uploads/2018/07/Objektovy_pristup_k_rieseniu_problemov.pdf) | 14/66 | 21% |
| [Programovanie web. stránok](http://itakademia.sk/wp-content/uploads/2018/07/Programovanie_webovych_stranok.pdf) | 18/66 | 27% |
| [IoT](http://itakademia.sk/wp-content/uploads/2018/07/Internet_veci.pdf) a [Mikrokontroléry](http://itakademia.sk/wp-content/uploads/2018/09/A-15.pdf) | 16/66 | 24% |
notes:
* opakujeme sa
* kazdy rok venujeme zhruba 1/3 kurzu opakovaniu
* to znamena, ze ak prvy rocnik ich nieco naucime a nasledujuce tri to budeme opakovat, tak jeden cely rok sme stravili len s opakovanim
$$ \frac{1}{3} + \frac{1}{3} + \frac{1}{3} = 1 $$
## 2. Jedno IDE
* nemusí byť nutne topka ([PyCharm](https://www.jetbrains.com/pycharm/))
* určite sa vyhnite IDLE!
* [Mu](https://codewith.mu) vs [Thonny](https://thonny.org)
notes:
* novy jazyk/technologia = nove IDE
* nove klavesove skratky,
* nove umiestnenia uz znamych veci,
* instalacia,
* riesenie problemov,
* ...
## 3. Bus Factor > 1
notes:
* vypadok ucitela moze viest k znefunkcneniu predmetu
* zastupitelnost ucitelov
* problem hlavne na gymnaziach
## 4. Čo najskôr umožnite študentom vytvárať kódy
notes:
* pecinovsky
## Poďme na to!
notes:
* budem trosku ohovarat
## [Špeciálna trieda](http://itakademia.sk/model-specialnej-triedy-so-zameranim-na-informatiku/)
| predmet | jazyk |
|---------------------------|-------|
| [Algoritmizácia](http://itakademia.sk/wp-content/uploads/2018/07/Riesenie_problemov_a_programovanie.pdf) | Python |
| [Objektové programovanie](http://itakademia.sk/wp-content/uploads/2018/07/Objektovy_pristup_k_rieseniu_problemov.pdf) | Java |
| [Programovanie web. stránok](http://itakademia.sk/wp-content/uploads/2018/07/Programovanie_webovych_stranok.pdf) | PHP, HTML5, MySQL, JS |
| [IoT](http://itakademia.sk/wp-content/uploads/2018/07/Internet_veci.pdf) a [Mikrokontroléry](http://itakademia.sk/wp-content/uploads/2018/09/A-15.pdf) | C, Blockly |
notes:
* vyhli sme sa mobilnym aplikaciam a UI, aj ked Python ma zastupenie aj v tejto oblasti
## Úvodné kurzy programovania
* motivačný faktor - hry
* v hrách sa riešia zaujímavé problémy
* častokrát sú herní developeri lepší programátori ako programátori IS
* podpora kreativity - projekty na GTA, OOP na TUKE
* nápady sa dajú rozvíjať
* [Reeborg](http://reeborg.ca/index_en.html),
[Pygame Zero](https://pygame-zero.readthedocs.io/en/stable/),
[Minecraft](https://github.com/martinohanlon/mcpi), ...
notes:
* Pygame Zero
* Minecraft MCPI
* vysledok
* 200 studentov na KPI = 200 jedinecnych projektov
* GTA a zaverecne projekty
* vzdy sa najde skupinka ludi, ktori to robia
## Objektovo orientované programovanie
* [Greenfoot](https://www.greenfoot.org/door) a [BlueJ](https://www.bluej.org/)
* Objects first approach
* Python je objektovo orientovaný
* obecne sa objektom nevyhnete
* OOP nie je ani tak o programovaní, ako skôr o návrhu/architektúre
## OOP ≠ GUI Prog.
notes:
* mytus: programovat objektovo neznamena vytvarat GUI
* aj moja predstava mladosti a rovnako tak predstava mnohych nasich studentov
* dizajner GUI urobi robotu za vas a vy osetrujete len udalosti
* udalost - kliknutie na tlacidlo
* pravdepodobne kopec globalnych premennych
* pre navrh GUI pouzivajte graficky dizajner
* mýtus: programovať objektovo znamená vytvárať GUI
* predstava mnohých našich študentov
* (aj moja už od strednej školy)
* dizajnér GUI urobí robotu za vás a vy (ako programátor) už len ošetrujete udalosti
* udalosť - kliknutie na tlačidlo
* pravdepodobnosť používania globálnych premenných je veľmi vysoká
* pre návrh GUI používajte grafický dizajnér
## Webové stránky
* najhorší možný výber - PHP
* určený **len** na tvorbu dynamických webov
* ([vraj skritpy a UI](https://www.php.net/manual/en/intro-whatcando.php))
* v školách je štýl programovania v PHP ako pred 20 rokmi
* žiadne MVC/MTV
* žiadne rámce
* Jiří Kosek: [PHP - Tvorba interaktivních internetových aplikací](https://www.martinus.sk/?uItem=1) (1999)
## Python a dynamické webové stránky
* dva typy webových rámcov
* micro webové rámce
* plnohodnotné webové rámce
![Flask vs Django](images/flask.vs.django.jpeg)
[Flask](https://palletsprojects.com/p/flask/) vs [Django](https://www.djangoproject.com)
[![FastAPI](images/logo-fastapi.png)](https://fastapi.tiangolo.com/)
[![Pokedex Workshop](https://cdn.vox-cdn.com/uploads/chorus_image/image/53254027/who_pokemon.0.jpg)](https://github.com/namakanyden/workshop-pokedex)
[https://github.com/namakanyden/workshop-pokedex](https://github.com/namakanyden/workshop-pokedex)
## IoT a Mikrokontroléry
![](https://static1.makeuseofimages.com/wordpress/wp-content/uploads/2022/08/arduino_ide_and_parts.jpg)
notes:
* Arduino a jazyk C
* dlho topka
* od roku 2005
## Mikrokontroléry a Python
* špeciálne verzie Python-u
* [MicroPython](http://micropython.org) - ESP32, micro:bit, RP2040, ...
* [CircuitPython](https://circuitpython.org) - ESP32, RP2040, ...
* [GPIO Zero](https://gpiozero.readthedocs.io/en/stable/) - RPi
* [Snek](https://github.com/keith-packard/snek) - Arduino ;)
## Demo
[![ESP32 and MicroPython](https://www.usinainfo.com.br/blog/wp-content/uploads/2019/06/IMG_2897-ok-1920x1080.jpg)](https://github.com/namakanyden/workshop-esp32)
[https://github.com/namakanyden/workshop-esp32](https://github.com/namakanyden/workshop-esp32)
![Sense HAT Assembly](https://projects-static.raspberrypi.org/projects/rpi-sensehat-attach/a180c64ad52670ac0df6a15e334499b683e65708/en/images/animated_sense_hat.gif)
Sense HAT je rozširujúca doska pre Raspberry Pi vytvorená špeciálne pre súťaž [Astro Pi](https://astro-pi.org).
# Použitie
* ako HAT na RPi (cena okolo 40 Eur)
* ako [online Sense Hat emulátor](https://trinket.io/sense-hat)
* ako [desktop Sense Hat emulátor](https://sense-emu.readthedocs.io/en/v1.1/install.html)
![Desktop SenseHat Emulator](images/sensehat.emulator.png)
## Hello world!
```python
from sense_emu import SenseHat
# from sense_hat import SenseHat
sense = SenseHat()
sense.show_message('Hello world!')
```
![Raspberry Pi Pico W](https://www.jeffgeerling.com/sites/default/files/images/raspberry-pi-pico-w.jpeg)
## 5. Vzájomné prepojenie tém
* hra s herným ovládačom, diaľkový ovládač, ovládanie hw cez webovú stránku, ...
* diaľkový detonátor v _Minecraft_-e
* alebo...
![Excel Shit](https://embed-ssl.wistia.com/deliveries/4a67919e0368e6d5ef4b3b7570baba221fcd8114.jpg)
[![Pandas](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Pandas_logo.svg/2560px-Pandas_logo.svg.png)](https://pandas.pydata.org/)
## Namakaný deň
* [http://namakanyden.sk](http://namakanyden.sk)
* podujatie Namakaný deň
* z angl. _Makers day_
* covid naštartoval [Namakané webináre](http://namakanyden.sk/webinare/)
* ftipné projekty - Vianočný stromček
* plán - Code Week 2022
[![Follow us on Facebook](images/follow.us.on.facebook.png)](https://www.facebook.com/namakanyden)
[www.facebook.com/namakanyden](https://www.facebook.com/namakanyden)
## Otázky?
## Odkazy
* [zborník](http://www.didinfo.net/images/DidInfo/files/Didinfo_2020.pdf) z konferencie [Didinfo 2020](http://www.didinfo.net/sk/)
* [Namakaný deň](http://namakanyden.sk/)
![qr code](https://api.qrserver.com/v1/create-qr-code/?data=https://bit.ly/3x0kHCq&size=300x300)
(**https://bit.ly/3x0kHCq**)