Dia 4 de Dezembro de 1995 foi um dia especial porque foi o lançamento da linguagem que todos amam odiar! Vamos mergulhar na história do JavaScript!
29 anos de JavaScript
O dia 4 de dezembro de 1995 foi um dia muito especial. Não só porque foi o ano em que eu nasci, mas também porque foi o lançamento da linguagem que, hoje, todo mundo ama odiar! O JavaScript.
Como todo mundo que me acompanha sabe, eu sou um grande fã de JavaScript e TypeScript, e gosto ainda mais de mostrar qual é a história dessa linguagem, não só porque a linguagem evoluiu muito e tem um dos arcos de superação mais incríveis da computação, mas também porque a história dessa linguagem é muito interessante. Então pra essa edição do backlog eu quero trazer, em comemoração dos 29 anos de JavaScript:
A história da linguagem que dominou o mundo.
Essa edição é baseada nesse paper de 189 páginas, escrito pelo próprio Brendan Eich sobre os primeiros 20 anos de JavaScript.
De um “hack” a um ecossistema global
A história resumida do JavaScript é o que muita gente vê por ai. Em 1995, por volta de 10 de Maio, Brendan Eich, um jovem programador para a Netscape Corporation passava da metade da sua sprint de 10 dias para criar uma linguagem que servisse como um apoio ao Netscape Navigator, criando mais interação com a página e possibilitando uma Web (ainda muito recente) mais animada
No tweet acima, Brendan Eich diz que nessa época (em 2020, no caso) ele já tinha passado mais da metade do período da sua “sprint de 10 dias” para criar o JavaScript, que na época era chamado de Mocha. Ele iria ter uma demonstração na segunda seguinte para mostrar a integração com o browser versus a tecnologia que dominava que eram os Java Applets.
E hoje, 29 anos depois, o JavaScript é a linguagem que marcou a fundação do desenvolvimento Web moderno, uma linguagem que, hoje em dia, está presente em 98% da Internet. Hoje, a gente não só celebra o JavaScript como linguagem, mas também como um movimento que moldou a Internet como a gente conhece.
Pausa para um aviso!
Esse conteúdo só é possível através da ajuda da comunidade e dos patrocinadores!
Esse em particular é patrocinado pela Remessa Online! Se você trabalha com tecnologia, com certeza já precisou trazer algum dinheiro de fora para o Brasil, e as taxas são SUPER ALTAS 😭 Por isso a Remessa é a melhor forma de fazer isso com a menor taxa do mercado!
Se você já teve que passar por isso, então segura aí porque a Remessa Online tem um desconto de 15% pra você com o cupom LSANTOSDEV! Ele é válido pra qualquer recebimento ou envio na conta global e você economiza MUITO! Então aproveita o dólar/euro alto pra fazer a grana render mais!
Muito obrigado à Remessa pelo apoio!
👉 Clica aqui pra transferir com a menor taxa do mercado!
🌟 Quer fazer parte desse sonho comigo?
Trazer essa newsletter ao mundo é algo que sempre quis fazer, e ver o projeto crescer com seu apoio seria incrível! Se você tem uma marca ou produto que se conecta com essa comunidade, manda um e-mail para hello@lsantos.dev. Vou adorar conversar!
💙 Apoie o meu trabalho:
Se você gosta do conteúdo e quer dar uma força, mesmo com apenas R$1, isso já faz toda a diferença! Clique aqui para contribuir mensalmente ou fazer uma doação única. Cada apoio me ajuda a manter essa newsletter viva e a fazer dela algo especial. Muito obrigado por estar aqui e por acreditar nesse sonho comigo!
Um mosaico de possibilidades
A história do JS começa com a história da Web. Desenvolvida entre 1989-1991 por Tim Berners-Lee no CERN, a World Wide Web foi primeiramente mais aceita na comunidade de físicos e cientistas, já que era feita para compartilhar papers. Mas não era muito vista fora dessa comunidade.
Um dos maiores motivos pelo qual a Web era muito fechada nesta comunidade era porque o seu uso era bastante complicado, baseado em protocolos de texto e não era muito intuitivo. Isso mudou quando Marc Andreessen e Eric Bina criaram o Mosaic em 1992 enquanto trabalhavam na NCSA.
O Mosaic foi o primeiro Web Browser do mundo, essencialmente o que criou a categoria de “Browsers” que a gente tem hoje. Ele quem popularizou o conceito da Web fora da comunidade de cientistas do CERN. Claramente, depois que o Mosaic ganhou fama e notoriedade, muita gente se perguntava se era possível fazer disso algo comercial, na maioria tentando licenciar o próprio Mosaic ou então criando variações dele. Até que um cara chamado Jim Clark, que fundou a Silicon Graphics (uma empresa extremamente importante de hardware) conseguiu um investimento e recrutou os dois estudantes, Marc e Eric, para fundar uma empresa chamada Netscape Communications Corporation (NCC) em 1994.
A ideia da NCC era substituir o Mosaic pelo Netscape, uma versão mais robusta e fácil de utilizar. No final de 1994 e início de 1995, o Netscape Navigator já era o browser mais utilizado de todos. E o que isso tem a ver com JavaScript? Tudo!
Uma Web morta
Originalmente, a Web era centrada em texto plano através de uma linguagem de marcação, o HTML, que era declarativa e estática e representava a estrutura e conteúdo de uma página da Web. O problema era que essas páginas eram estáticas, para criar conteúdo dinâmico você precisava requisitar uma outra página, então qual seria a utilidade para, por exemplo, servir bancos de dados? Pesquisas? Relatórios?
Existia um interesse considerável da indústria em criar uma linguagem de scripting pra poder fazer par com o HTML, dando mais “vida” a ele, e permitindo que as páginas pudessem ser mais dinâmicas. Da mesma forma como o VBA do Excel e o AppleScript fizeram com o Windows e Mac. Essas linguagens não eram focadas em criar sistemas complexos, mas sim “colar” partes de vários sistemas para criar uma integração melhor e novas oportunidades.
Em 1995, Brendan Eich foi recrutado para ser um dos programadores da NCC. Já tendo trabalhado em grandes empresas como a própria Silicon Graphics e MicroUnity, em ambas implementando linguagens específicas para suportar funções definidas, então ele já tinha o conhecimento necessário para criar uma outra linguagem que seria a “cola” entre o HTML e o resto dos sistemas.
Originalmente, ele foi contratado para “implementar o Scheme no browser”. (Scheme era uma linguagem funcional, um dialeto do LISP, usada principalmente em áreas acadêmicas) porém, quando ele chegou lá, se deparou com um produto muito mais complicado do que esperava, além de que havia um outro perigo no ar, e ele chamava Microsoft.
A guerra dos browsers
Quando o Netscape foi lançado, a Microsoft, ainda bem jovem, tinha um projeto chamado “Projeto Blackbird”, que era um conjunto de programas de gerenciamento de informação e troca de dados para empresas, uma versão da Web da Microsoft, chamada de Microsoft Network (MSN, familiar?).
A ideia era ter uma aplicação que iria servir conteúdo dinâmico, audio e vídeo sem necessidade de outros plugins. Ela seria construída usando tecnologias como Object Linking and Embedding (OLE) e outras que estavam sendo desenvolvidas naquela época.
Mas, com a popularização rápida da Web, a Microsoft viu esse projeto ser esquecido e mudou de foco para as tecnologias voltadas para essa nova “Web” que todo mundo estava falando. Em 1994, ela tentou comprar a NCC, mas foi recusada pelo valor ser baixo demais. Com isso, os fundadores da NCC já esperavam uma retaliação na forma do famoso Embrace Extend Extinguish, onde a Microsoft pretenderia adotar o padrão, estender com suas tecnologias e depois matar o padrão em favor ao seu. Com isso, a Microsoft começou o desenvolvimento do que seria chamado de Internet Explorer.
Com isso, a Netscape precisava correr com a implementação de uma linguagem de scripting, porque a Microsoft chegaria com tudo. As candidatas cotadas eram: Perl, Python, TCL e até mesmo o Visual Basic da Microsoft, além do Scheme. Porém tudo mudou quando o Java chegou.
Java (sem script)
No início de 1995, a Sun Microsystems começou uma campanha pesada de marketing para divulgar a sua, então não lançada, linguagem chamada Java. A Netscape logo viu uma oportunidade de negócio, visto que o Java também queria derrubar o monopólio da Microsoft sobre o Windows, que já era o SO mais usado em todas as máquinas, com a JVM e a sua proposta de rodar em qualquer lugar.
Para você entender a importância da Microsoft naquela época, ela não era só a dona do maior (e quase único) SO usado em mais de 90% dos computadores, mas também dona de quase todas as linguagens que criavam programas para esses computadores.
Logo que a Netscape e a Sun fizeram um acordo onde a linguagem escolhida não seria nenhuma das anteriores, mas sim o Java! E isso se tornou público no dia 23 de Maio de 1995 (eu tinha 1 mês de idade 👶).
Agora com tudo decidido, todas as demais linguagens foram descartadas por interesses comerciais, ou então pela dificuldade que seria integrar uma linguagem completa no navegador. Não haveria tempo suficiente para terminar a implementação e lançar no mercado antes da Microsoft lançar seu navegador. E a linguagem que a Microsoft escolhesse para ser o par do Internet Explorer seria o que iria definir todo o padrão dali para frente.
A Microsoft tinha a faca e o queijo na mão, eles tinham o VBA que já era uma linguagem de scripting usada no Excel, tinham o conhecimento de como criar um browser e como criar uma linguagem, já tinham mercado, só faltava o produto. Então, Bill Joy (olha ele aparecendo de novo), o fundador da Sun sugeriu que a saída seria implementar uma “pequena linguagem” que faria par com o Java e complementaria a funcionalidade.
As principais dúvidas que surgiam na Netscape eram se o Java em si já não era uma linguagem que poderia ser integrada, algo que claramente não era possível já que, para criar um programa em Java, você precisava
- Colocar o corpo do programa em um método estático chamado
main
- Dentro de uma declaração de classe
- Dentro de um pacote
- Declarar tipos para todas as variáveis e retornos
Isso não era a experiência que a Netscape estava buscando para aquela galera que seria um “scripter”. A linguagem deveria ser muito mais simples, não podia ser baseada em classes, nem ter tipos. Foi assim que Marc Andreessen propôs o codinome Mocha para a futura linguagem, na esperança que ela fosse chamada “JavaScript” no futuro. Ela teria que “se parecer com Java”, ser fácil de user e “baseada em objetos” e não em classes.
Mocha
O Java estava para ser lançado, então o tempo era importante nesse contexto. Por isso que o mocha foi implementado em 10 dias contínuos em Maio de 1995. O fato mais famoso do JavaScript que, na verdade, é distorcido, porque o Mocha era uma linguagem bem diferente do que o JavaScript se tornou. A implementação em 10 dias foi o início do que seria o JS, mas a implementação no final desses dias era uma versão crua, básica e simples do que essa integração poderia ser.
Tecnicamente, o Mocha continha um lexer escrito a mão e um parser recursivo. Esse parser emitia bytecodes, algo que era necessário para que o servidor do Netscape (chamado de LiveWire) pudesse entender as instruções. O resultado final era uma linguagem simples e muito lenta, mas factível.
Foi aqui que a maioria das escolhas que todo mundo adora odiar foram feitas. Como a linguagem tinha que parecer com Java, tudo que era mais parecido com VB foi removido, mas ao mesmo tempo “parecer com Java” fazia com que ela “parece que funcionava como Java”, o que não era verdade.
A outra definição explicita era que a linguagem tinha que ser tão fácil de usar, que ela poderia ser escrita diretamente no HTML. E a partir daí, Eich começou a trabalhar nos outros pontos que tornariam o JS o que ele é hoje, por exemplo:
- Herança prototípica veio de uma linguagem chamada Self
- A ideia de High Order Functions e funções como tipos de primeira classe veio do Lisp
this
veio diretamente do Java (que pegou do C++)- A ideia de criação dinâmica de propriedades
- O
Object
global de onde todos os demais tipos herdam - O
eval
- O
var
- Controles de fluxo emprestados do C
A apresentação do Mocha foi um sucesso e todos estavam otimistas com o lançamento de uma versão mais completa e integrada do Mocha no Netscape 2, agendado para ser lançado em Setembro daquele ano.
O código fonte do Mocha está disponível no GitHub com detalhe especial à nomenclatura “JavaScript” que o Netscape esperava que fosse adotado
Java (com script)
O JavaScript foi lançado no dia 4 de dezembro (após mais ou menos 7 meses de desenvolvimento) em uma conferência de imprensa como sendo uma “linguagem de scripting com objetos” que seria usada para escrever scripts que iriam “modificar dinamicamente as propriedades e objetos Java” e serviria como um complemento ao Java na Web.
Antes de o JavaScript ser chamado de JavaScript, ele foi aberto ao público em um beta aberto do Netscape 2 sob o nome de LiveScript (por conta do LiveWire) em Setembro de 95, e 1 mês depois transformado em JavaScript para criar uma marca forte entre o Java e a Netscape.
O JavaScript não era para ser nenhum tipo de grande linguagem, nem ter muitas features lançadas, tanto que as funcionalidades da linguagem foram severamente cortadas e o JavaScript 1.0 foi lançado com todas as funcionalidades que estavam “praticamente prontas”, inclusive com muitos bugs que foram corrigidos durante o desenvolvimento.
Quando ele foi entrevistado em 1996, Brendan Eich disse que ele queria que a a linguagem continuasse pequena e continuasse ubíqua na Web como a melhor forma de “grudar” elementos HTML e ações uns nos outros e também conectar esses componentes com Java Applets, que seria o resto do ecossistema. Tanto que ele falava que um dos exemplos de uso do JS era “criar um link que mudava de acordo com a hora do dia”.
O JavaScript teve um rival chamado JScript, a versão do JavaScript da Microsoft, que começou com Robert Welland no time do IE, mas antes trabalhou na Apple com o suporte para o Apple Newton (um tipo de PalmTop) com o NewtonScript, que era uma linguagem também baseada em objetos também influenciada pelo Self.
E a Microsoft teve uma sacada interessante que foi criar um debugger para JavaScript embutido no IE, algo que o próprio Netscape não tinha. Além de que eles perceberam que o IE não seria nada se ele não tivesse compatibilidade completa com os sites que o Netscape apresentava. E isso levou o JScript e o IE a fazer uma engenharia reversa do Netscape para tentar fazer com que ambos estejam mais ou menos parecidos.
ECMAScript e atualidade
O JavaScript estava claramente ganhando a corrida dos browsers, e ter duas linguagens diferentes não era uma coisa legal. A falta de uma especificação, de um padrão, era um grande problema. Além disso, quando o projeto do Mocha começou em 1995 já era claro que uma especificação iria precisar ser feita para que fosse possível a interoperabilidade com toda a Web.
Por isso tanto a Sun quanto a Netscape planejaram propor uma especificação para o W3C e a IETF. Mas nem uma nem a outra eram boas para ter uma especificação independente de uma marca, a IETF focava em protocolos, a W3C não queria ter uma linguagem própria porque isso ia contra os propósitos da organização. Mas a necessidade não era só para ter um padrão, mas também porque a Microsoft estava pressionando para ter o VB como linguagem padrão, então ter uma especificação formal iria ajudar o JavaScript a se estabelecer como uma linguagem séria.
Foi ai que Carl Cargill, um especialista em especificações trabalhando para Netscape, colocou a empresa em contato com a ECMA International e propôs que a ECMA tomasse o controle da especificação. Então, no dia 4 de Novembro de 1996 a ECMA montou uma reunião para definir o comitê técnico (Technical Committee, ou TC) de número 39, o TC39. Se houvesse interesse suficiente, esse comitê seria efetivado. O que aconteceu, e a primeira reunião do TC39 aconteceu no dia 21 de Novembro do mesmo ano.
Eu tenho um vídeo explicando como o TC39 funciona se você estiver interessado!
O resto dessa história é bastante conhecida, mas existem muitos detalhes interessantes que, infelizmente, vão ficar de fora desse texto. Mas, a partir daí, o JavaScript teve várias evoluções desde a primeira especificação, mas o que fez do JS a linguagem mais conhecida foi a chegada do Node em 2009 que transformou o ecossistema da Web e fez com que o JavaScript tivesse uma adoção astronômica, incluindo novas especificações e evoluções da linguagem que transformaram o JavaScript no que a gente conhece hoje.
Mas essa é uma história para outro Backlog!
Muito obrigado por chegar até aqui, e te vejo na próxima edição!