Nã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.
Tiago Oliveira
Alguém interessado em vender ele?