Python 3: Úspěšný ponor

CZ.NIC vydalo v rámci své knižní edice třetí knihu, tentokrát o Pythonu. Editor sáhl po knize Marka Pilgrima „Dive Into Python 3“. A je na místě říct, že i tentokrát byl editorský výběr šťastný a s Dive Into Python 3 se dostává českému čtenáři do rukou kniha velmi kvalitní a poměrně nevšední.

V posledním měsíci jsem četl dvě perfektní programátorské knihy – „1001 PHP tipů“ od Jakuba Vrány a „Ponořme se do Python(u) 3“ od Marka Pilgrima, přeloženou a vydanou péčí sdružení CZ.NIC. Obě jsou v určitém slova smyslu výjimečné, a jejich výjimečnost spočívá v tom, že nejsou jen suchými seznamy informací. O té první teprve budu psát, v tomto článku se budu věnovat té druhé.

Na úvod dovolte trošku kontextu, aby čtenáři bylo jasné, z jakého hlediska knihu hodnotím. S Pythonem jsem dlouho osobně sváděl nerovný boj. Když u mne převážilo znechucení z nekonečného psaní PHP kódu nad radostí z toho, že to je všude a funguje to na 80 % hostingů, tak jsem hledal jazyk, který bych mohl použít na „malé drobné práce“ i na web. Rozhodoval jsem se mezi Pythonem a Ruby, ptal jsem se lidí z oboru, co by doporučili, a aby se mi lépe rozhodovalo, nakoupil jsem si ke každému několik dostupných knih (tehdy to byly tuším dvě pro Python a jedna pro Ruby).

Knihy o Pythonu

První kniha o Pythonu, na jejíž název si už nevzpomínám, mě zklamala a otrávila. Naprostého začátečníka, který neví, co je příkaz a co výraz a jak funguje smyčka, by možná oslovila (pokud by jej neunudila). Druhá kniha s českým názvem Začínáme programovat v jazyce Python mi byla doporučena jako „fakt dobrá“ knížka o Pythonu. Musím přiznat, byla lepší. O něco málo…

Obě knihy ale měly jednu velkou, z mého pohledu bráno, nevýhodu: byly psány takovým tím stylem, kdy je téma nejprve rozvláčně teoreticky rozpitváno („toto je řetězec… ukažme si ještě několik řetězců… toto je taky řetězec… toto je prázdný řetězec, což je taky řetězec… a toto je velmi dlouhý řetězec…“) a na konci kapitoly na vás autor vychrlí seznam nejdůležitějších funkcí a zaflekuje to tabulkou „méně důležitých nejdůležitějších funkcí“. Pokud už máte zkušenosti s nějakým programovacím jazykem, není vám tento styl výkladu nic platný; ze třiceti stránek jedné kapitoly jich dvacet osm nemusíte číst, a dvě jsou tak nabité informacemi, že jsou vlastně taky nanic, protože takto podané informace „nezažijete“.

Až jednou budu používat Python pravidelněji, pak si možná v „Začínáme programovat…“ opět zalistuju a počtu si o vytváření COM komponent, o Tk či o integraci Pythonu s JVM (opravdu takhle „začínáme programovat“?) Ale rozhodně mě ta kniha nenalákala k tomu, abych si sedl a začal dělat praktické pokusy s Pythonem. Co bych vlastně dělal? „Normalizace matic“? Tím jsem si prošel před čtvrt stoletím, kdy jsem nadšeně psal programy pro výpočet objemu a obvodu koule na programovatelné kalkulačce…

Dive into Mark

Když jsem při cestě vlakem vzal do ruky „Ponořme se do Python(u) 3“ (vydalo sdružení CZ.NIC v roce 2011), nevěděl jsem, co mám očekávat. S autorovým stylem psaní jsem se setkal už v Dive Into HTML5 a připadal mi velice příjemný a lehce stravitelný, ale to ještě nic neznamená. Otevřel jsem knihu a začetl se.

Předmluva jasně specifikuje, o čem bude řeč: Nikoli o Pythonu jako takovém, ale především o jeho třetí verzi, která je poměrně zásadně odlišná od verzí předchozích; kniha zdůrazňuje hlavně tyto odlišnosti a probírá především to, co je jiné. Paradoxně to je do určité míry výhoda pro čtenáře jako jsem já – základy Pythoní syntaxe mám, pár skriptů jsem už viděl či napsal, nemusím číst kapitoly o n-ticích a slovnících, protože vím, jak vypadají, jen se stále nemám k tomu to nějak prakticky použít, protože mě to nechytlo.

 U první (lépe řečeno „nulté“) kapitoly jsem byl trochu na rozpacích – screenshoty z instalace Pythonu 3 – ale asi tam být musí. V kapitole 1 je čtenář hozen „in medias res“ a konfrontován s Pythonským kódem. Pokud znáte, jako já, základy, bude vám po dvojím přečtení zhruba jasné, co kód dělá. Na dalších stránkách se dozvíte, že vám to bylo jasné správně, a čtenář se nenásilně přitom seznamuje se základními věcmi: Jak se deklarují funkce, jak se volají, kde se hledají soubory pro import, co jsou objekty, jak se pracuje s výjimkami, a další základní informace.

Už v této kapitole autor používá velmi pěkný styl výkladu, kdy je každá věc vysvětlena na zdrojovém kódu, který je opatřen poznámkami ([1], [2], [3], …), a ty jsou bezprostředně za kódem rozepsané, některé jen pár slovy, jiné celým odstavcem. Jsou vždy v místě, kde se „děje něco zajímavého“. Velmi rychle si na takový styl zvyknete (a velmi rychle si uvědomíte, jak v jiných obdobných knihách něco podobného chybí).

Druhá kapitola pak představuje základní datové typy, a rozsah je opět odpovídající situaci, kdy „znáte jiný jazyk a máte lehké ponětí o Pythonu“. Autor nemučí čtenáře výkladem něčeho, co čtenář zná, pouze představuje, sumarizuje a na praktických ukázkách ukazuje věci, co jsou „jinak“ či „nezvyklé“ (např. novinka Pythonu 3 – změna práce s řetězci).

Ve třetí kapitole autor skočí od teorie k praktické ukázce – totiž práci se soubory a souborovým systémem, a k tomu (možná trošku neorganicky) připasoval generátory slovníků, seznamů a množin. Další kapitoly jsou věnovány práci s řetězci a regulárními výrazy.

Šestá kapitola začíná příkladem: funkcí, která k podstatnému (anglickému) jménu vytvoří jeho množné číslo. Existuje na to sada pravidel. Autor ukázal „naivní“, doslovnou implementaci, kterou postupně refaktoruje pomocí uzávěr a postupů z funkcionálního programování (generátor funkcí). V další kapitole logicky „odskakuje“ k iterátorům, a aby je mohl vysvětlit, vysvětlí při jednom i třídy.

A v kapitole deváté…

Seznam kapitol a jejich obsahu je mor recenzí, přesto jsem si jej do jisté míry neodpustil (a proto jsem jej v půlce utnul). Bylo na místě ho tu takto zmínit, hlavně jako ilustraci neortodoxního postupu výkladu, který ignoruje klasické „skriptové“ postupy (míněno VŠ skripta) „od jednoduchého ke složitému, od částí k celku…“ Namísto toho máte dojem, že si povídáte s kamarádem nad jeho programem v Pythonu a říkáte: Hele, jak funguje tohle? A kamarád odpovídá: No, to je generátor funkcí. To je ti taková zajímavá věc, sleduj…

Tento dojem posiluje fakt, že Mark Pilgrim píše odlehčeným a snadno čitelným stylem (PHPčkaři si mohou třeba představit články Davida Grudla). Jeho výklad není suchopárný a utopený ve větách ze školních učebnic; je živý, čtivý a zábavný, aniž by sklouzával k familiernosti, bulvárnosti či křečovitosti. Takže když na konci knihy ukazuje, jak převáděl svou knihovnu z Pythonu verze 2 do Pythonu verze 3, závěrečné testy uvodí slovy „Tož možeme to otestovať?“ a (úspěšný) výsledek okomentuje slovy „No to mě podrž, ono to funguje. /me si trošku zatancuje“, tak máte dojem, jako by seděl autor vedle vás v kanceláři a ten oslavný taneček opravdu předvedl. 

Právě schopnost dobře dávkovat humor, vstupovat osobně do výkladu a vůbec psát „lehkým perem“ je na autorově stylu asi to nejcennější. Za sebe mohu říct, že jsem za poslední rok přečetl zhruba desítku odborných knih, ale žádnou tak rychle a s takovou chutí, jako Dive into Python 3. Tato kniha má totiž styl, který možná vážným lidem bude připadat nepatřičný a odborného materiálu nedůstojný, ale u mne měl jednoznačně pozitivní efekty.

Zaprvé: Od textu jsem se nemohl odtrhnout – půlku knihy jsem přečetl na jeden zátah při cestě vlakem, zbytek pak za jeden podvečer. Nestalo se mi, jako u „odborně suchých“ knih, že mi začaly myšlenky bloudit jinam. Zadruhé: Během čtení jsem měl čím dál větší chuť si sednout a něco v Pythonu 3 naprogramovat. Tento efekt vyzní nejlíp při srovnání s obecným stavem – posledních několik let jsem „programoval pouze pod pohrůžkou přímého násilí“, rozhodně ne s chutí a radostí. U Dive Into Python 3 jsem měl pocit, že by mě to mohlo zase bavit. No a konečně zatřetí: Při čtení jsem si uvědomoval, že mi to celé dává smysl, že tomu rozumím, že to má logiku a že se mi to takto líbí. Jinými slovy řečeno – kde u jiných knih dělám „hm…“, tam jsem u této dělal „Aha!“

Programování nespočívá v psaní příkazů…

Známý aforismus jsem si vypůjčil pro ilustraci části obsahu, kterou jsem nezmínil výš. Kniha totiž kromě informací o jazyku jako takovém přesahuje i do oblastí nad syntaxi: k čistému kódu, k testování, refaktorizaci… (a to má společné s, v úvodu zmíněnou, knihou Jakuba Vrány) Takže už na straně 51 píše autor o čistém kódu a dokumentačních řetězcích, aniž by z toho dělal cokoli navíc: „Napíšete funkci, ta má hlavičku, tělo a dokumentační řetězec“. Tak prosté a samozřejmé. Žádné „pokud chcete“, „měli byste“ a „zamyslete se“…

V půlce knihy autor plynule přejde k jednotkovému testování pomocí unittest a refaktorizaci. Opět nenuceně a samozřejmě – je to součást psaní knihoven. Testování v podání Marka Pilgrima není ani práce navíc, ani nuda, ani problém, ale samozřejmá a logická součást vývoje, a po přečtení příslušných kapitol vás ani nenapadne, že byste takovouhle (samozřejmou) věc nedělali.

Ke konci knihy autor ukazuje rozdíly mezi verzemi 2 a 3. Ilustruje je na automatizovaném převodu knihovny z Pythonu verze 2 do verze 3 pomocí nástroje 2to3, a testy jsou mu při tom neocenitelným pomocníkem. (Rozdílům mezi verzí 2 a 3 je věnována i příloha, opět koncipována nikoli jako seznam změn, ale jako seznam věcí „co se rozbije, proč a jak to vyřešit“).

A abychom měli seznam obsahu kompletní, tak si ještě v rychlosti povězme, co je v knize dál: Informace o práci se soubory, o práci s XML, o serializaci pomocí pickle či JSON, o knihovnách pro práci s internetem (httplib2 a další), jedna kapitola je věnována distutils, vytváření balíčků a jejich publikaci přes PyPI, a jedna z příloh popisuje „magické metody“ (to jsou ty s podtržítky před a za jménem).

Styl…

Možná to někomu nemusí vyhovovat. Někomu bude víc vyhovovat věcný, „školský“ výklad. Jsme lidé různí a naše paměť se liší – někdo si lépe pamatuje souvislosti, někdo si namemoruje text, někdo si vybaví, že „když si četl o téhle pasáži, tak autobus projížděl okolo takového baráku s modrými okny“. Nedá se říct, že Dive Into Python 3 je pro každého nebo že se každému bude líbit. Mně osobně nejvíc pomohla v tom, že mi dala impuls: ano, tenhle jazyk mi dává smysl. Neotrávila mi Python školometskými suchopárnými poučkami. Byla záživná, přesto informačně obsáhlá, a dobře se mi četla. A to se počítá!

Pokud tedy hledáte spíš motivaci a impuls než sumu informací, kterou si chcete natlačit do hlavy, sáhněte po této knize. Pokud váháte, jestli se učit ten či onen jazyk, sáhněte po této knize. Pokud znáte Python 2 a hodilo by se vám vědět, co všechno na vás přichystala trojka, opět mohu tuto knihu doporučit. Nedozvíte se z ní naprosto všechny informace a vše do posledního detailu, ale – od toho jsou manuály. A sáhněte po ní klidně i jen tak, když si chcete „počíst o programování“ trošku záživnější formou, než jakou nabízí man.

Zpracování českého vydání

Zpracování zaslouží pochvalu; překlad zachoval autorův originální rukopis i pěknou práci se zdrojovými kódy. Písmo mi připadalo při čtení prvních stránek poměrně drobné, ale po chvíli jsem si zvykl. Kladně hodnotím i to, že v papírové podobě zůstal seznam odkazů na doporučenou literaturu; občas ale zaúřadoval redakční šotek, a tak lze v knize narazit např. na kuriózní větu ve smyslu „… více se dozvíte v tomto dokumentu (PDF)“, z níž člověk cítí, že v originále byl „tento dokument (PDF)“ opatřen odkazem na patřičný soubor ke stažení; bohužel vypadl.

Výhradu mám k překladu názvu knihy. Originál „Dive into Python 3“ byl přeložen jako „Ponořme se do Python(u) 3“. Zde mám dojem, že překladatel vybíral ze dvou ošklivě znějících variant „… do Python 3“ a „… do Pythonu 3“, až nakonec editor zvolil kompromis, který má z obou variant to horší. Závorka v titulu knihy mi připadá jako hodně nešťastná věc, ale možná jde pouze o můj dojem, podpořený asociací s „Dějinami VKS(b)“.

Distribuce

CZ.NIC i u této knihy zůstal věrný svému přístupu „digitálně ke stažení zdarma“. Takže pokud chcete, můžete si knihu stáhnout ve formátu PDF (např. i z naší knihovničky). Pokud chcete přeci jen papírovou, můžete si ji koupit přímo na stránce CZ.NIC (a zaplatit buď 459 nebo 399 Kč, to podle toho, zda jste připojeni přes IPv4 nebo IPv6). Další možností je číst Zdroják – pro pět z vás máme tuto knihu připravenou, stačí se zapojit do soutěže (pokud vám utekla soutěž na Rootu). 

Soutěž o knihy Ponořme se do Pythonu 3

Jak můžete získat jednu z pěti knih?

Dvě knihy získají (navíc k honoráři) autoři, kteří v průběhu března napíšou původní článek o nějaké zajímavosti v Pythonu pro Zdroják (viz Jak psát pro Zdroják), pošlou ho a článek bude schválen k vydání. Bude-li jich víc, dostanou knihu první dva autoři; rozhodující bude den schválení. (Témat je více než dost, od seznamu hostingů s Pythonem přes vytváření nativních aplikací s Pythonem až např. po porovnání instalačních nástrojů – pip, setuptools atd…)

Dvě knihy jsou připravené pro ty uživatele, kteří přes webové rozhraní vloží největší počet (schválených) Zpráviček.

Jedna kniha je vyhrazena pro zaregistrovaného autora nejzajímavějšího komentáře na téma „proč, jak, odkud… bych přešel na Python?“ Nabídka platí pouze pro zaregistrované, na které máme v systému kontakt, komentáře od neregistrovaných čtenářů nebudou do soutěže zařazeny. Výherce bude vybrán na základě „pochvalných“ reakcí ostatních uživatelů; při podezření na manipulaci vybereme v redakci.

Redakce si vyhrazuje právo knihy, které nebudou použity jako odměna (např. nikdo nenapíše článek), rozdělit komentujícím registrovaným čtenářům dle vlastního uvážení.

Uzávěrka soutěže je 31.3. 2011

Knihy do soutěže poskytl správce národní domény CZ.NIC. Děkujeme.

Na samotný závěr dovolte jednu poznámku, směřovanou na vydavatele, kteří brojí proti elektronickým knihám argumentem „pokud to bude zdarma na webu, tak si knížku už nikdo nekoupí“ – podle vyjádření CZ.NIC se všechny knihy prodávají v papírové podobě velmi dobře, i když jsou na webu legálně ke stažení, a konstantní zájem o tištěnou verzi překvapil i samotného vydavatele

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 29

Přehled komentářů

Čelo kniha
corwin78 Re: Python 3: Úspěšný ponor
Rubysta Dnešní PHP
Martin Malý Re: Dnešní PHP
Rubysta Re: Dnešní PHP
Mennion Re: Dnešní PHP
Rubysta Re: Dnešní PHP
Martin Malý Re: Dnešní PHP
plistiak Re: Dnešní PHP
srigi Re: Dnešní PHP
Mennion Re: Dnešní PHP
Mennion Re: Dnešní PHP
v2kt0r Re: Dnešní PHP
Mennion Re: Dnešní PHP
blizzboz Re: Dnešní PHP
Twiguard Python +1
tdvorak Re: Python +1
Jiří Kosek Re: Python +1
tdvorak Re: Python +1
Mintaka Re: Python +1
Turnovec Jiné formáty než PDF, sazba
Martin Malý Re: Jiné formáty než PDF, sazba
Turnovec Re: Jiné formáty než PDF, sazba
helb Re: Jiné formáty než PDF, sazba
Draho Python a databáze ?
sputnikone Re: Python a databáze ?
r Re: Python a databáze ?
Mintaka Re: Python a databáze ?
Honza ad font
Zdroj: https://www.zdrojak.cz/?p=3449