Eloquent JavaScript 4ª edição (2024)

Recepção geral e impacto

  • Amplamente elogiado como o livro de JavaScript favorito de muitos comentaristas; vários dizem que ele “me ensinou JavaScript” ou foi sua primeira verdadeira introdução à ciência da computação.
  • Visto como مناسب para pessoas que já sabem um pouco de programação e querem se aprofundar em JS, em vez de ser um livro ideal para um primeiro contato absoluto com programação.
  • Frequentemente recomendado junto com outros recursos como “You Don’t Know JS”, JavaScript.info e vários livros de JS “impatient” / “deep”.
  • Alguns leitores não gostam particularmente do estilo pessoal do autor, mas ainda assim consideram o livro extremamente valioso.

JavaScript vs TypeScript para aprendizes

  • Uma corrente argumenta que iniciantes devem começar com JS puro:
    • Evita confusão sobre o que é linguagem central versus ferramentas.
    • Reflete problemas passados em que pessoas culpavam o “JavaScript” por peculiaridades do DOM/navegador.
    • O TS pode eventualmente mudar ou desaparecer; JS é a base estável.
  • Outra corrente recomenda começar diretamente com TypeScript:
    • Descrito como o padrão de facto em grande parte da indústria.
    • Qualquer JS é TS válido, e a inferência de tipos mantém a sobrecarga de sintaxe baixa.
    • Forte benefício para refatoração e projetos grandes.
  • Foram levantadas preocupações de que o TS pode induzir iniciantes ao erro sobre tipos em runtime; bibliotecas de validação em runtime (por exemplo, libs de schema/parse) são mencionadas como complementos importantes.

Atualizações e formato da quarta edição

  • Descrita como “ajustada às realidades de 2024” e, de modo geral, polida.
  • Atualizações técnicas notadas incluem: campos privados (#), imports ESM no Node, Object.hasOwn, ** em vez de Math.pow, e mais cobertura de generators e async.
  • Várias pessoas pedem um changelog claro; outras apontam diffs no GitHub entre a 3ª e a 4ª edições.
  • A versão online é gratuita e open source; a edição impressa está planejada, mas ainda não disponível.

Explicações conceituais: variáveis, async, erros

  • Longo subthread sobre explicar variáveis como “bindings” (nomes apontando para valores) versus “caixas”:
    • Os defensores dizem que “binding” corresponde à especificação, funciona de forma uniforme para primitivos e objetos, e é uma abstração melhor.
    • Os céticos temem que a terminologia e a metáfora dos “tentáculos” confundam iniciantes e que o modelo de “caixa” seja mais simples no início.
  • O capítulo de async é destacado como especialmente bom na nova edição; a antiga analogia do “corvo” numa edição anterior foi considerada confusa por alguns.
  • Um comentarista critica um exemplo que lança exceções para condições esperadas de entrada do usuário, defendendo objetos de retorno explícitos no estilo Result com códigos de erro; outros defendem exceções com códigos e bubbling como padrões aceitáveis.

Detalhes da linguagem JavaScript discutidos

  • Múltiplos comentários sobre números e matemática inteira:
    • Esclarecimento de que o tradicional Number do JS é um float; BigInt e typed arrays agora existem para casos de uso com inteiros.
    • Alguns observam que implementações de BigInt podem ser assintoticamente rápidas.
  • Discussões paralelas sobre tipagem forte vs fraca, garantias de runtime vs compile-time e os limites dos sistemas de tipos nas fronteiras de APIs.

Recursos de aprendizado e hábitos de estudo

  • Muitos leitores compartilham estratégias para aprender com livros técnicos: anotações ativas, resolver exercícios, escrever os exemplos, repetição espaçada e tratar a versão interativa online como um fluxo “ler–codar–ler–codar”.