chester's blog

technology, travel, comics, books, math, web, software and random thoughts

JavaScript: The Good Parts (O Melhor do JavaScript)

27 Sep 2010

Douglas Crockford, autor de JavaScript: The Good PartsNão ia escrever sobre esse livro, simplesmente porque não teria muito a acrescentar, mas o Lucas me convenceu de que valeria a pena nem que fosse só pra convocar as pessoas a ler. Se você programa em JavaScript (mais ainda: se não programa ou não gosta dela por ter tido experiências ruins), preste atenção:

Douglas Crockford é possivelmente um dos caras que mais manjam de JavaScript do mundo: um dos responsáveis pela padronização e disseminação do JSON, ele teve papel fundamental nos comitês que deram (e ainda dão) o rumo da linguagem – quem foi ao QCon teve a oportunidade de ouvir algumas histórias “do front” em primeira mão.

Ele começa desmontando o primeiro mito comum sobre a linguagem: revela que JavaScript não é um mero subset de Java (embora esse fosse o “argumento de venda” nos seus primórdios), e sim algo mais parecido com Lisp ou Scheme: uma linguagem funcional extremamente poderosa, que permite escrever código muito elegante – se for usada corretamente.

Muitos dos problemas que eu tive no passado com JavaScript eram causados por desconhecer este aspecto da linguagem. Ao tratá-la como uma linguagem script qualquer, não apenas eu escrevia muito mais código do que o necessário, mas também encontrava erros difíceis de debugar porque a abstração de Java/C que eu projetava nela simplesemente não correspondia à realidade. Como disse o Crockford no já mencionado QCon, “programar em JavaScript sem entender closures é como programar em Java sem entender classes”.

Com esse elefante fora da sala, o livro começa a mostrar como as coisas realmente funcionam na linguagem. E nesse ponto vem a explicação do título original: ele argumenta que algumas partes da linguagem simplesmente não se prestam à construção de código de qualidade, convidando o leitor a esquecê-las sem cerimônia! O livro se concentra nos construtos e conceitos que você precisa entender para escrever código que adere à característica funcional e prototípica da linguagem, em detrimento de tentar emular o que se faz em outros ambientes (em particular em linguagens OO como SmallTalk e Java).

No final ele lista as “partes ruins” (bem como as “partes péssimas”), detalhando em cada caso se a questão é conceitual (como no caso das variáveis globais), de implementação (o suporte a Unicode limitado em 16 bits é um exemplo) ou um conflito entre escolhas de design (ex.: ter um tipo único obriga a aritmética a trabalhar sempre com ponto flutante, o que nem sempre é uma boa idéia). Temas correlatos como JSLint e o já mencionado JSON encerram a exposição com chave de ouro.

É uma leitura excelente, mesmo para veteranos em JavaScript – desde que estejam abertos a uma revisão de conceitos. Ganharão em troca uma relação renovada com a linguagem, e entenderão porque seu uso pipoca até além das barreiras do browser – não que o uso neste já não fosse o bastante para torná-la uma das linguagens mais usadas da atualidade e justificar um carinho especial para com ela.

Optei pela edição nacional (“O Melhor do JavaScript“) pelo preço e disponibilidade, e me surpreendi com a qualidade da tradução. Os códigos têm seus comentários traduzidos, mas variáveis e todo o resto ficam intactos (isso é importante quando o autor começa a viajar, ex.: definindo “that” como complemento a “this”). Tirando e pequenos detalhes de editoração (ex.: o uso de aspas simples que “abrem e fecham” no código, coisa que não rolaria na vida real), a adaptação é bastante competente.

Comments


Luca Bastos

Pena que parei no capítulo 5. O livro realmente é excelente.

JavaScript é uma espécie de quebra cabeça e muito divertido. Em (quase) todas as linguagens que estudei, sempre ficou claro a ordem em que a CPU executa as instruções. Confesso que em JavaScript às vezes fico na dúvida e que o que dá mais dúvida é justamente o conceito de closures.

Espero ter tempo para voltar breve ao The Good Parts que considero um ótimo complemento ao OOJS do Stoyan Stefanov que li antes.