\


 Wednesday, November 23, 2022
Kniha o Pythonu pro začátečníky?

Pythonista, který čte knihy pro začátečníky a dokáže poznat, která je dobrá. Najde se tu někdo takový? Asi ne, ale přesto se zkusím zeptat.
Pro synka Míšu (13 let) bych chtěl doporučit nějakou pěknou knihu o Pythonu. Asi raději v češtině, čímž se výběr dost zužuje.

Kniha by měla nenásilně vysvětlit.
1) Základy programování v Pythonu.
2) Základní datové struktury a kdy je použít.

A jniha by měla fungovat jako základní referenční příručka, která je vždy po ruce. I Míša ví, že na webu je dost tutorialů, ale nějaká kniha s výkladem, kde zazní "proč", a ne jen "jak", by pro něj mohla být přínosná.
Míša se naučil v Pythonu "nějak" programovat a s pomocí knihovny PyGame napsal pár her. Létající objekty, raketky, autíčka.

Programuje dost živelně a rychle, což není na škodu, ale přišla doba, kdy:
1) Bylo by dobré, aby viděl i někde jinde, že není nejlepší pokaždé celý kód narvat do jedné funkce. Výkřik "Tak jsem něco napsal. Pojď se, taťko, podívat, jak jsem to zase naprasil." sice výborně utužuje naše vzájemné vztahy, ale z posledního proifovaného kódu mě už přece jen bolely oči. Příklady v knize by ale neměly působit uměle - refaktorizace už tak malé funkce do ještě menších funkcí jen kvůli tomu, že to tak autorovi přijde správné a nepoučený čtenář snese hodně.

2) Nějaký základní výklad datových struktur. Posledně Míša vytvořil piškvorky na ploše 3x3, ale jak jsem později zjistil, plocha 3x3 byla v malování vytvořený statický obrázek :), na který potom vykresloval kolečka/křížky, příznak, jaký čtverec je aktivní atd. Když jsem po něm chtěl, aby vykresloval "nekonečnou" plochu, nebo alespoň čtvercovou plochu o velikosti zadané uživatelem, dostali jsme se právě k tomu, proč je pro reprezentaci stavu tohoto typu hry vhodné (dvourozměrné) pole a proč se nedá vše v programu řešit konečným množstvím ifů, několika tucty špatně pojmenovaných proměnných a enumerací fixního počtu "vítězných" stavů.

3) Výklad by neměl svou suchopárností potlačovat právě tu radost z "prasení" kódu a objevování. Neměl by dogmaticky tvrdit, že se pokaždé programuje právě jen takto a nikdy jinak. Naopak, měl by ukazovat, že k výsledku vede mnoho cest a že programování je aktivita v otevřeném světě, kde jen úplní hlupáci postupují po vyznačených cestičkách a v ruce nesou bibli momentálně platných zásad, pravidel a konvencí, protože se bojí, aby je kolegové-inkvizitoři při code review nezačali křižovat, místo toho, aby dodali po všech stránkách originální, problém skutečně řešící a technicky brilantní řešení. Výklad by ale měl nenásilně sugerovat, že je dobré pravidla perfektně znát, než je začnu z důvodu vyššího projektového dobra porušovat. Výklad by neměl ukazovat OOP/FP na místech, kde OOP/FP ničemu neposlouží a jde jen o samoúčelné hrátky typu "júúú dekorátor a heč, znám i monády a chrstnu ti je do tváře v každé kapitole, i když jsem jejich princip sám nepochopil".

4) A kdyby v průběhu výkladu autor vytvářel nějakou hru, bylo by to ideální, ale to už bych chtěl asi moc.

5) Kniha musí být pro novější verzi Pythonu.

V Pythonu nedělám. V ČJ jsem našel jen dvě knihy, které vypadají zajímavě.

Pecinovský, Rudolf: Začínáme programovat v jazyku Python 2., přepracované a rozšířené vydání. Grada.
Nejsem úplně nadšený z toho, že jde o Pecinovského, který asi přesedlal z Javy, ale třeba mám jen (odůvodněné) předsudky.

Summerfield, Mark: Python 3: Výukový kurz. Computer Press 2021.
Bohužel jde o překlad a už jsem zase narazil na to, že tyhle překlady stále dělají individua, evidentně blbější než DeepL i Google Translate, která přeloží klíčová slova jazyka ve výpisech zdrojového kódu. A neotřelý český překlad, ve kterém se objevuje slovo "madlo" a znamená Win handle, mě ve snech straší pořád.

Nemáte někdo tip? Díky.



Wednesday, November 23, 2022 1:40:11 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Ostatní


All comments require the approval of the site owner before being displayed.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview