Programování v kostce
Programování je poměrně široká oblast, která zažila boom hlavně během pandemie. Pokusím je shrnout a kdyžtak k nim přidat nějaký svý rady.
O čem je programování?
O tom, jak převést řešení problému do co nejefektivnější podoby pro počítač, aby ho vyřešil. Záleží, v jakém rozsahu chcete programování porozumět, ale tak či tak si pravděpodobně nevystačíte jen s programováním samotným. Bude výhodné si osvojit i např. elektrotechniku, jelikož hlavně jazyky nižší úrovně jsou silně ovlivněné tím, jak funguje hardware.
Základní dělení: Praktická vs technická zaměření
Hodně se odvíjí od toho, jakým směrem se chcete vydat. Pokud vás zajímá spíš praktická stránka programování, kdy s málem můžete dělat divy, budete se spíš ubírat směrem vysokoúrovňových jazyků. Mezi praktické směry patří např. web development, automatizace, vytváření různých skriptů atp.
Mezi praktickým a technickým uplatněním se nachází např. vývoj výkonově kritických aplikací, které jsou obvykle naprogramované v C/++ nebo v podobných nízkoúrovňových jazycích. Sice si tady nevystačíte s "pouhou myšlenkou a drivem", ale zároveň není až tak těžké po určité době svůj nápad realizovat. Často si vystačíte pouze se znalostí algoritmů atp. a se základní znalostí principů počítače. Sem lze zařadit např. programování webových prohlížečů nebo grafických programů.
Pro některá uplatnění je ale potřeba obsáhnout programování komplexně. Např. vývoj her je náročný, je k němu potřeba spoustu znalostí a vytrvalosti. Není výjimkou, že si herní studia vyvíjí svůj vlastní engine. Vývoj enginu vyžaduje dobré znalosti vysokoškolské matematiky, jelikož každá část, od propočítávání pohybu a pozic bodů až po převedení do 2D obrazu, musí operovat jen v rámci čísel. Náročný je také vývoj operačního systému, jelikož je těsně navázaný na hardware.
Hobby vs práce
Proč (ne)programovat?
Pro
- Máte zájem řešit problémy
- Máte zájem o tvoření
- Nabízí spoustu oblastí s různou mírou obtížnosti
- Open source je populární
- Rádi se konzistentně učíte nové věci
Proti
- Chcete mít jen dobrý peníze
- Předvídatelnost je pro vás důležitá
- Nechcete se pořád učit a přizpůsobovat se nové době
- Sedavá práce
Mýty vs realita programování
Mýtus: Programování je jednoduchý
Hodně lidí je v přesvědčení, že programování je intuitivní. A mají i pravdu, začátky v programování bývají intuitivní, hlavně s vysokoúrovňovými jazyky, jako je např. Python. To stejné se dá říct o dělání her v herních enginech, které cílí na jednoduchost.
Realita: Programování je těžký
Brzy ale tyhle "růžové brýle" opadnou a člověk se začně topit. Čím hlouběji totiž člověk jde, tím méně intuitivní programování je. Jinak by tomu snad ani nemohlo být. Člověk nemůže očekávat, že naprogramovat stroj, který pracuje na binárním podkladu, bude jednoduché.
V celém programování platí obvykle nepřímá úměra obtížnosti a moci. Čím méně toho má člověk na starost, tím má menší moc nad počítačem. Aby mohl člověk využít plný potenciál hardwaru, potřebuje k tomu spoustu znalostí ohledně jeho fungování. Potřebuje vědět, jak nejlépe abstrahovat komplexní myšlenku do sady jednoduchých příkazů, kterým počítač rozumí. Pro spoustu oblastí je výkonový faktor víceméně irelevantní, žijeme už v době "výpočetního blahobytu", kdy si můžeme dovolit oželit výkon na úkor jednoduchosti, ale všechny tyto technologie staví pořád na podobných principech jako počítače v 80. letech. Neodpustím si srovnání s tím, jak se vyvíjí společnost. V dnešní době je spoustu lidí ve vyspělých zemích distancovaná od "tvrdé práce", ale pořád tu jsou lidé, kteří tuto tvrdou práci musí dělat.
Mýtus: Programování je o hlavně o vytváření programů, her, webových stránek atp.
Je taky poměrně rozšířené přesvědčení, že hlavní náplň programování je vytváření nového. Programování nových funkcí, učení se nového, tu a tam se něco rozbije, ale v hlavní režii zůstává tvoření.
Realita: Programování je většinu času vytváření konceptu, hledání chyb a údržba kódu
Další mýtus, který se sice drží o něco déle, než první, ale i tak se brzo hodně lidí zbaví "iluzí". Je to jako láska: nejdřív se zamilujete a všechno je fajn, ale po chvíli si začnete všímat stinných stránek a následně propadnete větší či menší depce. Po téhle fázi to buď vzdáte, nebo pokračujete dál, a začnete se postupně učit, až se při troše štěstí naučíte doopravdy programovat. A jak možná víte, většina času v dlouhodobém vztahu není nijak vzrušující, spíš se snažíte ho udržet, opravovat a občas se zadaří i něco navíc. Stejně funguje i programování. Většinu času nevytváříte nové a zajímavé věci, ale investujete do toho, aby byl kód spolehlivý a pracovalo se s ním dobře, protože ho v praxi nemůžete celý zahodit a napsat ho znovu. V určité fázi je to už neudržitelné.
- Poměrně nevděčný v některejch ohledech
- Psát funkční kód je lehký, psát dobrej kód ne
- Většinu času člověk čte kód, ne píše
- Jde jak o "hard" skills, tak hlavně i o "soft" skills
- Dokumentace je v praxi důležitější než kód
- "Nejefektivnější" kód není často žádoucí, když je na úkor čitelnosti
Oblasti
High-level <-> low-level spektrum
High level
- Víc tvůrčí
- Rychlý trendy
- Lehčí a rychlejší na vývoj
- Často neefektivní
Low level
- Víc "vědecký", "inženýrský"
- Pomalý trendy
- Potřeba větší specifičnosti a znalostí
- Poskytuje vysoký výkon a kontrolu -> náchylnější na chyby
Obojí
- Znalost algoritmů, postupů atd.
- Znalost počítače - jak funguje
Související dovednosti
- Psaní - psaní dokumentace
- Grafika
- Komunikace
Konkrétní oblasti
- Web development - výkon není až tak důležitý, hlavně vizuální stránka
- Front-end - výhradně high-level
- Back-end - oba levely
- Hry - důležitý výkon
- low level jazyky - C rodina (C, C#, C++)
- Operační systémy
- Embedded (vestavěné) systémy