Tenho certeza que você notou, mas o "JS" como título da série não é uma abreviação de palavras usadas para falar mal de JavaScript, embora xingar sobre as peculiaridades da linguagem é algo que todos nós podemos provavelmente nos identificar.
Desde os primórdios da web, o JavaScript tem sido a fundação de tecnologias que determinam a experiência interativa através do conteúdo que consumimos. Apesar de efeitos nos traçados do mouse e perturbadores pop-ups com prompts terem sido a forma que o JavaScript começou, quase duas décadas depois, as capacidades do JavaScript cresceram em muitas ordens de magnitude, e poucos duvidam de sua importância como coração da plataforma de software mais acessível do mundo: a web.
Mas como uma linguagem, vem perpetuando-se como alvo de grande quantidade de críticas provenientes de sua herança, mas muito mais de sua filosofia de design. Até o seu nome evoca um status de, como Brendan Eich uma vez colocou, "irmão mais novo bobinho" ou mais maturo se comparado ao seu irmão mais velho "Java". Apesar disso, o nome é um mero acidente relacionado à políticas e marketing. As duas linguagens são bem diferentes em muitos pontos importantes. "JavaScript" está tão relacionado à "Java" como "Carnaval" é para "Carro".
Pelo fato do JavaScript adotar conceitos e sintaxe idiomática de diversas linguagens, incluindo orgulhosas raízes procedurais ao estilo de C, assim como sutis e menos óbvias raízes funcionais ao estilo de Scheme/Lisp, é bastante acessível para uma larga audiência de desenvolvedores e até mesmo aqueles com pouca ou nenhuma experiência com programação. O exemplo de "Hello World" do JavaScript é tão simples que a linguagem é convidativa e fácil de se sentir confortável logo nas primeiras impressões.
Apesar do JavaScript ser talvez uma das linguagens mais fáceis de se começar, suas excentricidades fazem o domínio sólido da linguagem muito menos comum do que outras linguagens. Enquanto se precisa um conhecimento aprofundado em linguagens como C ou C++ para escrever um programa em grande escala, um produto em grande escala no JavaScript pode ser feito, e muitas vezes é, apenas arranhando parte do que a linguagem pode fazer de verdade.
Conceitos sofisticados que são profundamente enraizados na linguagem tendem a ser utilizados superficialmente de modo aparentemente simples, como utilizar callbacks para funções, o que encoraja o desenvolvedor JavaScript a usar a linguagem apenas como forma de alcançar um objetivo, sem se preocupar muito sobre o que está acontecendo nos bastidores.
É simultaneamente uma linguagem simples, fácil de usar e que tem uma forte demanda, como uma coleção complexa e cheia de nuances sobre mecanismos de linguagem que podem, sem um estudo cuidadoso, mascarar um entendimento verdadeiro até mesmo para os mais experientes desenvolvedores JavaScript.
É aí que se esconde o paradoxo do JavaSript, o tendão de Aquiles da linguagem, o desafio que estamos nos referindo. Por conta da possibilidade do JavaScript poder ser usado sem ser bem entendido, o verdadeiro conhecimento sobre a linguagem geralmente nunca é alcançado.
Se a cada ponto que você encontrar uma surpresa ou se sentir frustrado com JavaScript, sua resposta for adicionar mais um item à sua lista negra, como alguns estão acostumados a fazer, você em breve entrará em uma penumbra cinzenta que irá te afastar de toda a riqueza da linguagem.
A ideia de aprender JavaScript separando todas as partes frustrantes da linguagem foi famosamente apelidada de "A parte boa". Eu vou implorar à você, querido leitor, para ao invés disso, considerar essa parte como "A Parte Fácil" ou "A Parte Segura", ou até mesmo "A Parte Incompleta".
Essa série de livros, You Don't Know JavaScript oferece um desafio inverso: aprender e entender profundamente tudo sobre JavaScript, até mesmo "As Partes Difíceis".
Aqui nós abordamos a cabeça e a tendência dos desenvolvedores de JS em aprender "apenas o suficiente" para alcançar seus objetivos, sem se forçarem a entender o que a linguagem faz e o porquê dela se comportar dessa maneira. Além disso, evitamos o senso comum de recuar quando a estrada fica irregular ou perigosa.
Eu não fico feliz, nem você deveria ficar, em parar uma vez que algo funciona, e não entender o porquê. Eu gentilmente desafio você à viajar para a parte da estrada "menos acessada" e se envolver com tudo que o JavaScript pode fazer. Com esse conhecimento, nenhuma técnica, nenhum framework, nenhum nome que vira modinha na semana estará além da sua compreensão.
Cada um desses livros tem um enfoque específico em partes da linguagem que em geral são compreendidas de maneira incorreta ou mal compreendidas, e mergulha a fundo nelas. Você pode prosseguir sua leitura confiante no seu entendimento, tanto teórico quanto prático (as partes do "o que você precisa saber").
O JavaScript que você conhece agora é um provável conjunto de partes ensinadas à você por outros que também tiveram um conhecimento incompleto. Esse JavaScript não é nada além de uma sombra da verdadeira linguagem. Você não sabe realmente o JavaScript, ainda, mas se você caminhar por esta série você saberá. Continuem lendo, meus amigos. O JavaScript aguarda vocês.
JavaScript é incrível! É fácil para aprendê-lo parcialmente, e muito difícil para aprendê-lo completamente (ou até mesmo suficientemente). Quando os desenvolvedores se sentem confusos, eles em geral culpam a linguagem ao invés de sua falta de conhecimento. Esses livros têm a finalidade de corrigir isso, inspirando uma apreciação forte da linguagem você pode agora (e deve), conhecê-la a fundo.
Nota: Muitos dos exemplos desse livro supõem que você dispõe de ambientes modernos (e de futuro próximo) de JavaScript, como o ES6. Alguns códigos podem não funcionar como descrito se você estiver utilizando ambientes mais antigos (pre-ES6).