Gif by FabBuilder on Giphy

Sabe aquele sentimento de “precisamos disso para segunda-feira às 8h da manhã”, quando ainda é sexta-feira à tarde e o escopo nem foi definido?

Se você é desenvolvedor, já sentiu esse frio na espinha. É o momento em que a arquitetura ideal, o código limpo e os padrões de projeto são jogados pela janela em nome da sobrevivência do negócio. A gente se sente mal por “fazer de qualquer jeito”, mas a verdade é que, às vezes, se não for feito agora, não existirá um amanhã para refatorar.

Pois bem, respire fundo. O JavaScript, a linguagem que hoje domina desde o seu navegador até o seu servidor e sua cafeteira inteligente, é o maior exemplo de “código de sexta-feira à tarde” que deu certo na história da humanidade.

Criado sob pressão, com decisões apressadas e concessões técnicas, ele não deveria ter ido tão longe. Mas foi. Cresceu, se adaptou, acumulou inconsistências, ganhou camadas de abstração e, mesmo assim, tornou-se a base da web moderna. Entre gambiarras geniais, erros históricos e soluções improvisadas, o JavaScript acabou refletindo perfeitamente a forma como software é feito no mundo real.

É exatamente essa história que você vai ler a seguir: Como um código feito às pressas se transformou em um dos pilares da tecnologia atual, e o que isso diz sobre programação, negócios e sobrevivência no caos do desenvolvimento de software.

Leitura recomendada:
Para quem lida diariamente com código JavaScript legado e precisa evoluir sistemas sem quebrar a web, o livro Refatoração JavaScript mostra técnicas práticas para melhorar código real, com segurança e clareza. Uma leitura direta para quem escreve JavaScript no mundo como ele é, não como deveria ter sido.

Daniel Tapias Morales

A Cozinha de um Restaurante em Chamas

Imagine que você é um chef de cozinha. O restaurante está lotado, a fila dobra o quarteirão e, de repente, o dono chega e diz: "O cardápio mudou. Temos 10 minutos para criar um prato novo, que nunca ninguém comeu, e ele precisa ser o favorito de todos os clientes."

Foi exatamente assim que Brendan Eich se sentiu em 1995 na Netscape.

A internet era um deserto estático. O navegador Netscape era o rei, mas a Microsoft estava chegando com o tanque de guerra chamado Internet Explorer. A Netscape precisava de uma "faísca", algo que desse vida às páginas. Eles não queriam algo complexo como o Java (que era o prato sofisticado e demorado da época). Eles queriam um tempero, algo que designers pudessem usar para validar um formulário ou mudar uma cor sem precisar recarregar a página.

Brendan teve entre 10 e 14 dias.

Pare e pense nisso. Dez dias. Eu já levei dez dias só para decidir o nome de uma tabela em um banco de dados de um projeto pequeno. Ele criou o compilador, a sintaxe, o modelo de objetos e a lógica de execução.

O JavaScript não foi "projetado" como uma catedral, com plantas e engenheiros discutindo cada pilar. Ele foi "montado" como um puxadinho de emergência durante um temporal.

Aqui entra a primeira grande confusão: o nome.

Por que JavaScript se ele não tem nada a ver com Java? Marketing. O Java era a linguagem "quente" do momento. A Netscape fez um acordo com a Sun Microsystems e decidiu pegar carona no nome.

É como se você criasse uma bebida nova chamada "Café-Cerveja". Ela não tem café, não tem o gosto do café e nem a cafeína, mas como todo mundo está comprando café, você coloca o nome no rótulo para vender mais rápido.

Essa decisão de marketing criou uma confusão que dura 30 anos. Até hoje, o iniciante confunde as duas coisas, mas elas são tão diferentes quanto um carro e um carrinho de mão. O JavaScript pegou a sintaxe do C e a cara do Java, mas o "coração" dele veio de linguagens muito mais abstratas e poderosas (como Scheme e Self).

O resultado foi um Frankenstein. Uma linguagem que parece simples, mas que por baixo do capô esconde conceitos de programação funcional avançadíssimos que a maioria de nós só foi entender de verdade dez anos depois.

A Caixa de Ferramentas Mágica (e Perigosa)

Imagine que você recebe uma caixa de ferramentas para consertar uma casa. Você pega uma chave de fenda, mas, dependendo da força que você faz, ela se transforma em um martelo por conta própria. Se você tenta parafusar algo e o parafuso é um pouco maior, a chave de fenda "decide" que agora ela é uma furadeira.

Isso é o que chamamos tecnicamente de Coerção de Tipos.

No JavaScript, se você somar o número 1 com o texto "1", ele não te dá um erro. Ele diz: "Tudo bem, eu decidi que esse número agora é um texto, o resultado é "11"!".

Por que ele faz isso? Porque em 1995, o objetivo era não dar erro. A Netscape acreditava que, se um designer cometesse um pequeno erro de digitação, a página não deveria "explodir" ou ficar em branco. Ela deveria tentar adivinhar o que o autor queria e seguir em frente.

Para um sistema de banco em 2026, isso é um pesadelo. Para um botão de "clique aqui" em 1995, isso era o que permitia a web crescer. O JavaScript foi construído com uma "tolerância a falhas" que beira a irresponsabilidade, mas foi essa mesma frouxidão que permitiu que milhões de pessoas aprendessem a programar sem serem bloqueadas por um compilador rigoroso.

Se você for a Roma ou a Atenas, vai ver que o trânsito é horrível. As ruas são estreitas, tortas e não fazem sentido para carros modernos. Por que não derrubam tudo e fazem avenidas largas? Porque você não pode destruir a história.

O JavaScript sofre do mesmo mal. A regra de ouro da web é: Don't break the web. Um código escrito em 1996 por um estagiário na faculdade precisa continuar rodando no Google Chrome hoje. Se o comitê que cuida da linguagem decidir "corrigir" o == para que ele pare de fazer conversões malucas, metade dos sites antigos do mundo pararia de funcionar.

Diferente do PHP ou do Python, onde você pode lançar uma versão nova (como a versão 3 ou 8) e dizer "olha, agora o jeito antigo não funciona mais", o JavaScript é um acumulador. Ele só ganha coisas novas, mas nunca joga as velhas fora.

Isso cria uma carga cognitiva bizarra para nós, desenvolvedores. A gente não aprende apenas como a linguagem funciona. A gente aprende o que não usar. A gente aprende a evitar o var, a fugir do ==, a tomar cuidado com o this. É como dirigir em uma estrada cheia de buracos onde você já sabe de cor onde cada um está.

TypeScript e Frameworks: Construindo uma redoma de vidro

Hoje, a gente olha para o ecossistema moderno: React, Vue, Vite, TypeScript e se sente em um ambiente profissional. Mas, se você olhar de perto, vai perceber que todas essas ferramentas são, na verdade, tentativas de nos proteger da própria linguagem.

O TypeScript é como se colocássemos um supervisor rigoroso ao lado daquela caixa de ferramentas mágica. Ele diz: "Não, você não pode usar essa chave de fenda como martelo. Se tentar fazer isso, eu nem te deixo entrar na obra."

O TypeScript não muda o JavaScript. No final, ele desaparece e o que sobra é o bom e velho JS caótico de 1995. O TS é uma "camada de sanidade". Ele nos dá a paz de espírito que Brendan Eich não teve tempo de colocar na linguagem original.

E os frameworks? O React não tenta "consertar" o JavaScript. Ele tenta criar um universo paralelo onde as regras são mais previsíveis. Ele diz: "Esqueça como o navegador funciona, apenas me diga como você quer que a tela pareça, e eu cuido da parte bagunçada para você."

Aqui chegamos ao ponto que mais ressoa com a nossa vida de dev.

Muitas vezes, a gente se trava tentando encontrar a "arquitetura perfeita". Ficamos horas discutindo se devemos usar tal biblioteca ou tal padrão, enquanto o cliente só quer ver o botão funcionando.

O JavaScript é a prova viva de que estar presente é melhor do que ser perfeito. Se a Netscape tivesse esperado seis meses para lançar uma linguagem "limpa" e "bem projetada", a Microsoft teria dominado tudo com uma tecnologia proprietária, e talvez a web não fosse esse espaço aberto que temos hoje.

O JS venceu porque foi o "MVP" (Mínimo Produto Viável) mais resiliente da história. Ele aceitou ser motivo de piada entre os engenheiros de "linguagens sérias" por décadas, enquanto, silenciosamente, ele ia comendo o mundo.

Hoje, esses mesmos engenheiros precisam usar TypeScript para rodar suas lógicas complexas... que acabam virando JavaScript no final das contas.

Conclusão: O Caos Resiliente

No fim das contas, aprender JavaScript é aprender sobre a natureza humana. É entender que as coisas raramente saem como planejadas, que o "provisório" costuma se tornar permanente e que a flexibilidade vale mais que a rigidez no longo prazo.

Quando você estiver lá, lutando com um erro estranho de escopo ou uma coerção que não faz sentido, não fique bravo com a linguagem. Lembre-se que ela é uma sobrevivente de uma guerra comercial de 1995. Ela carrega as cicatrizes de uma entrega feita em 10 dias que acabou sustentando o mundo inteiro nas costas.

O JavaScript é o retrato da nossa profissão: um equilíbrio constante entre o fundamento que a gente gostaria de ter e a entrega rápida que a gente precisa fazer. Ele nos ensina que, às vezes, para conquistar o mundo, você não precisa ser o mais elegante. Você só precisa ser aquele que nunca para de funcionar, não importa o quão bagunçado esteja por dentro.

Comentar

or to participate