JavaScript: The Good Parts – dvě až tři hvězdičky z pěti

JavaScript: The Good PartsNedávno jsem dočetl slavnou knížku JavaScript: The Good Parts od Douglase Crockforda a toto je rychlá recenze. Ve zkratce: zajímavých informací je v ní dost, ale kvůli formě bych ji nedoporučil. Hlavně pokud to má být první knížka pro vážnější ponoření do JavaScriptu.

Jak jsem znal JavaScript předtím

Poslední roky se moje práce motala a stále motá kolem technologie Adobe Flex, která se v mnoha ohledech frontendovému vývoji na webu podobá: značkovací jazyk pro UI, CSS pro styly a jazyk odvozený z ECMAScriptu pro kód. Všechno je událostní programování plné callbacků, takže jsem myslel, že přechod z Flexu na webový stack bude snadný. To jsem se ale mýlil.

JavaScript je totiž, no, prostě, svůj. Vypadá jako céčkový jazyk, ale to jen mate tělem (na rozdíl od ActionScriptu, který se sice JavaScriptu vizuálně podobá, ale chová se daleko víc jako C# / Java). Když jsem tak začal koukat na různé úryvky kódů a nebo chtěl něco sám napsat, zjistil jsem, že tomu jazyku vlastně vůbec nerozumím. Bylo to trochu podobné, jako když jsem prvně koukal na Ruby nebo na PowerShell – to základní v nich přečtu (příkazy, funkce, větvení, cykly, přiřazení apod.), ale pak je tam plno znamének a speciálních znaků, které je prostě potřeba znát. Podobné jsem to měl s JavaScriptem, jen tam to nebylo o speciálních znacích, ale o enormním počtu závorek a dalších mně nesrozumitelných konstruktů.

Takže jsem si potřeboval o JavaScriptu udělat lepší představu a pořádně poznat všechna zákoutí. Prošel jsem několik webů a dvě nejdoporučovanější knížky jsou JavaScript: The Good Parts a JavaScript: The Definitive Guide. Po zjištění, jak hezky krátká knížka The Good Parts je, a taky kvůli jejím věhlasu, bylo rozhodnuto.

Co se mi líbilo

Douglas Crockford má silné názory a líbilo se mi, že chyby v návrhu JavaScriptu nijak nehájí, naopak se do nich bez okolků opírá. Vůbec celková message knížky se mi moc líbí: JavaScript je něco, co má své hodně špatné stránky, ale taky pár světlých a my jako programátoři si můžeme vybrat, že budeme používat jen ty dobré.

V některých věcech taky může knížka sloužit skoro jako referenční materiál, ale to mi upřímně spíš vadilo – na co např. kolejnicový graf různých cyklů, když pro cílovou skupinu stačí příklad a upozornit na případné zvláštnosti chování? Nebo takovým regulárním výrazům, které v podstatě s JavaScriptem jako jazykem souvisí jen okrajově, je věnovaná víc než desetina (!) celé knížky.

Knížka: The Bad Parts

Asi největším zklamáním z knížky bylo, že jsem ani po jejím přečtení neměl moc jasno, proč se některé konstrukty používají a co přesně dělají nebo znamenají. Jako příklad pro někoho, kdo čte tenhle blog post, JavaScript už důvěrně zná a nechápe, co na tomto jazyku může být k nepochopení, můžu uvést jednoduchý příklad s kostrou “třídy”, kterou vytvoří kompilátor CoffeeScriptu z kódu “class MyClass”. Výsledný JavaScript, a na tomto místě je irelevantní, jestli překlad proběhl optimálně či nikoliv, je tento:

(function() {
  var MyClass;

  MyClass = (function() {

    function MyClass() {}

    return MyClass;

  })();

}).call(this);

Jako začátečníkovi se mi začne honit hlavou mnoho otázek:

  • Co by se stalo, kdyby to celé nebylo obalené ve funkci?
  • Co přesně dělá call() na konci, jak se liší od prostého zavolání funkce závorkami? Hraje předávané this roli? Co je vlastně v tomto případě this?
  • Je z nějakého důvodu důležité oddělit deklaraci proměnné MyClass a její inicializaci?
  • Proč je vnitřek přiřazení obalen do další anonymní funkce? Jak by se chování změnilo, kdyby ta funkce nebyla zavolaná (předposlední řádek)?

Z pohledu někoho, kdo už JavaScript zná, jsou tyto otázky ne příliš složité, ale vysvětlit je začátečníkovi je docela výzva.

A tady Crockford podle mě selhává. Kdyby v psaní existovaly patterny a antipatterny, tak bych jeho styl označil jako “sobecké psaní”, tj. autor při psaní víc myslí na to, jak by chtěl text sám napsat, než na užitečnost pro čtenáře. Ve vzácných případech, kdy se silný osobní styl a maximální užitečnost pro čtenáře protnou, vznikají nejlepší kousky technické literatury, ale tady k tomu to, aspoň z mého pohledu, absolutně nedošlo.

Namísto praktických ukázek kolejnicové grafy. Namísto prostoru pro složitá témata mnoho zbytečných stránek o regulárních výrazech. Namísto popisu Good Parts neustálé narážky na Bad Parts (paradoxně, přílohy, kde se Crockford systematicky věnuje Awful Parts a Bad Parts, jsou možná to nejužitečnější z knížky). Navíc mi místy vadily vyloženě subjektivní názory, vydávané za univerzální pravdy (např. že pole by měly mít metody pro práci s maticemi a že je to opomenutí jazyka).

Prostě mi to trochu připomínalo některá skripta z vysoké školy, kde autoři / učitelé často nejsou žádnými génii na psaní, dokáží dát materiál dohromady tak tak na hranici pochopitelnosti a s velkými mezerami v uspořádání, konzistenci a formě. Crockford je, aspoň stylisticky, rozhodně lepší autor, text je nepochybně napsaný čtivě, ale že bych JavaScriptu nějak zásadně líp po přečtení jeho knížky rozuměl, to říct nemůžu. Holt napsat technickou knížku dobře je umění.

Závěr

Lákadlem této knížky je její nadpis a příslib, že vás Crockford naučí ty dobré věci na JavaScriptu. Knížka ale o oněch Good Parts příliš není. Je to především referenční popis syntaktických věcí s důrazem na “Awful Parts” a “Bad Parts” (takto se přímo jmenují kapitoly). V upozornění na různá nebezpeční JavaScriptu je hodnota této knížky a rovněž je bezva, že když už se příliš těch Good Parts nenaučíte, aspoň čtením neztratíte moc času, ale pokud hledáte první knížku na skutečné porozumění JavaScriptu, hledejte jinde. (Například se mi líbila JavaScript Pattens, její rychlou recenzi sem časem hodím.)

7 thoughts on “JavaScript: The Good Parts – dvě až tři hvězdičky z pěti
  1. Jen mala poznamka. Kodu class MyClass v Coffee skriptu odpovida pouze kod

    var MyClass;
    MyClass = (function() {
        function MyClass() {}
        return MyClass;
    })();
    

    Nekoho by to mohlo asi trochu zmast a mohlo by ho napadnout, ze takova deklarace funkce/tridy, prece neni z te anonymni funkce, ktera je volana pomoci call, viditelna:)

  2. ToM: Kód v článku skutečně vypadne z command-line kompilátoru (Node.js coffee). Je fakt, že na CoffeeScript webu na záložce Try je výstup takový, jak píšeš ty.

  3. Borek Bernard: Jasne, me jen slo o to, ze tride odpovida jen vnitrek te anonymni fce. Protoze kdyby kazdy preklad tridy vypadal tim zpusobem co mas v clanku, tak bys nikdy tu tridu nemohl instanciovat, protoze jeji predpis je dofinovan pouze v kontextu te anonymni fce. Jinak rozumna kniha co me v posleni dobe zaujala je Eloquent Javascript .

  4. ToM: Eloquent JS mám v “read it later”, je to dobré? Z těch pár stránek, co jsem zatím četl, mi přišlo, že se tam hodně času tráví vysvětlováním věcí pro programátory-začátečníky (pro ně patrně kniha primárně je).

  5. Mas pravdu, ze je to spis pro zacatecniky. Ja to necetl uplne cely, ale treba kapitola o objektech, prototypech, atd. neni vubec spatna( nezabredava teda uplne do detailu, ale staci to ). Me se na ni hlavne libil vyklad a v html verzi knihy jak pekne slo vse zkouset ihned v te jejich konzoli.

  6. Pingback: Recenze knížky: JavaScript Patterns | DevBlog

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax