Brasil, TC39 e guitarras: Um brasileiro por trás da evolução do JavaScript

Cofundador da @BrazilJS e da @NascHQ, Software developer e autor/editor no portal BrazilJS.

Leonardo Balter é um grande amigo e um dos profissionais que mais admiro em nossa área. Além de tocar guitarra somente para si mesmo, Leo vive hoje nos EUA e trabalha em uma série de projetos incríveis.

Fizemos uma entrevista com o Leo e, nela falamos sobre diversos assuntos: JavaScript, TC39, jQuery, Guitarras e muito mais. Espero que gostem 🙂

1) Leo, somos amigos de longa data e acompanhei sua carreira desde o início. Desde sua mudança para os EUA, não consegui acompanhar tão de perto. Eu sei que hoje você faz muitas coisas, mas você poderia dizer – especificamente – qual sua função atual, empresa, projetos dos quais participa, etc?

Desde que vim para os EUA, trabalho na Bocoup como Open Web Engineer. A minha função continua a mesma. Apesar do nome incomum, eu trabalho dando consultoria em projetos relacionados com JS. Já passei por vários projetos diferentes. Na maioria das vezes, trabalhando junto de alguma equipe do cliente, auxiliando de forma que eles possam continuar seus projetos de forma independente, usando o que há de melhor em open source. Uma das partes mais interessantes e importantes na Bocoup é que todos podemos dedicar 25% do nosso tempo com qualquer projeto open source. Isso me permite passar um tempo significante em outros projetos como a jQuery Foundation.

2) Você é membro ativo dos projetos jQuery e QUnit. O papel dessas bibliotecas foi super importante para a evolução do ecossistema JavaScript. Em sua opinião, qual o futuro destes dois projetos, levando em conta a quantidade de novos projetos existentes?

A jQuery Foundation é uma fundação enorme com vários projetos muito importantes, entre eles o Lodash, ESLint, Grunt, Dojo, etc. O jQuery, por si só, ainda é usado em mais de metade dos top 10000 sites em todo o mundo. Existe um time de pessoas se dedicando todos os dias reportando e consertando bugs e melhorando mais e mais essa biblioteca. O jQuery foi um divisor de águas ao aproximar as pessoas ao desenvolvimento. Inclusive foi – e continua sendo – uma das influências mais importantes para os padrões web que teve como origem as comunidades de desenvolvimento.

Hoje, os padrões web tem uma participação bem maior de desenvolvedores. O primeiro marco foi o HTML5 e acredito que essa influência deve se manter a longo prazo. Os membros da jQuery Foundation estão se manifestando em muita coisa que vem por aí.

Eu sou o atual líder do QUnit há mais de um ano. O QUnit nunca foi o framework de testes mais famoso, mas por 8 anos é um dos mais consistentes, com opiniões fortes em sua API e – mesmo não tendo uma adoção popular como outros framework é utilizado em projetos bem populares. Posso listar o próprio jQuery, mas também há o Lodash, Ember, Backbone. Todos esses projetos usam o QUnit e é uma responsabilidade enorme. Seguimos um padrão estrito para lançar versões novas sem dores de cabeça. Tudo passa por revisões enormes. É claro que há uma vontade enorme de tornar o QUnit uma ferramenta amigável para usar direto via linha de comando, com um reporter out-of-the-box para usar via Node.js. Falta tempo.

Entre vários projetos que tenho trabalhado, eu passei a tocar o time de Standards no jQuery Foundation. Isso envolve a minha participação no TC39, que é o comitê técnico responsável pelo desenvolvimento do JavaScript como uma linguagem. Ao mesmo tempo, eu mantenho o test262 que contém os testes oficiais para implementação da linguagem.

3) Ainda nesta linha, atualmente existem muitas críticas relacionadas ao ecossistema JavaScript e FrontEnd. Qual seria o seu conselho para novatos que estão entrando nesse mundo agora?

Há muitas críticas, mas críticas vão existir enquanto houver popularidade. O JavaScript alcançou uma popularidade incrível onde outras linguagem nunca nem chegaram perto. Não tirando a importância de outras linguagens, mas nunca tivemos tantas pessoas capazes de criar tantas coisas incríveis.

JavaScript não é uma linguagem perfeita, longe disso, mas ainda assim é a linguagem que fez muito desenvolvedor front-end criar o impossível, quando muitas vezes deles só era esperado que criassem uma validação de formulário.

Hoje, até mesmo alguns desenvolvedores JS criticam o JS e isso também é natural. Há alguns anos atrás, eu só precisava saber um pouco de DOM e jQuery que já me tornava um profissional “completo”. O mesmo devia acontecer com um programador cobol que, há 30 anos, está vendo tudo ser desenvolvido por várias linguagens diferentes. Meu pai é analista em mainframes e já foi programador cobol. Ele, até hoje, vê um certo mistério em algumas características de linguagens orientadas a objetos. Já tivemos altos papos interessantes quando expliquei sobre objetos prototipados no JS. Imagino o dia que eu falar pra ele sobre programação funcional.

O mais importante é saber que nunca sabemos de tudo. Sempre existe algo que podemos nos focar e nos tornar experts, sempre vão ter várias partes onde somos ignorantes. Não existe nada mais nobre do que dizer que não sabe algo. Um dia eu já achei que JavaScript era Java.

4) Você faz parte do comitê responsável pela evolução do JavaScript (TC39). Você, em algum momento da vida, pensou que faria parte de algo assim? Como é para você fazer parte de algo tão grandioso?

Eu não tinha nem ideia do que era o TC39 e, até hoje, eu descubro algumas coisas novas que me impressionam mais e mais. A primeira reunião que participei foi em março deste ano. Eu já estava trabalhando no test262 há mais de 6 meses, mas era tecnicamente expert. Trabalhei durante 1 ano nesse projeto. O Google tinha contratado a Bocoup, pois o ES6 estava para ser lançado e tinha muita coisa nova nas specs e não tinha teste de quase nada.

Em um momento do projeto, eu resolvi escrever os testes para a API de TypedArrays. Achei que ia ser fácil, pois era parecido com Arrays e já tinhamos os testes para quase tudo de lá. Engano terrível. Eu passei mais de um mês inteiro – acho que 2 meses ou mais – escrevendo testes para TypedArrays. Foi quando descobri que tinha uma inconsistência grande nos construtores de TypedArrays, ArrayBuffer e DataView. Para piorar, os browsers eram mais inconsistentes ainda. Cada um tratava índices de formas totalmente diferentes. Abri um Pull Request (#410) no ecma262 (projeto no GitHub onde ficam as especificações), mas isso não era uma simples mudança editorial. Era uma mudança normativa, para buscar consistência. Me falaram que teria que ir até a reunião para pleitear essa mudança diante dos demais delegados do TC39.

Fiquei angustiado. O pior era que as recomendações eram somente: “não leve nenhuma crítica de lá do TC39 para o lado pessoal” ou “as pessoas vão falar só sobre o âmbito técnico, mas com nenhum rodeio. Se estiver uma merda, vão dizer que está uma merda. Não significa que você é um merda”.

Eu nem sabia que ia ter que falar isso diante de 50 pessoas. Tudo que pensava era aquela cena do filme Dodgeball em que o coroa diz “se você souber desviar de uma chave inglesa…”. Eu estava indo lá para dizer que toda a especificação da família de TypedArrays estava zoada e eles tinham errado. Eu estava lá pra consertar.

Não vi uma chave ser arremessada em minha direção – não significa que alguma me acertou sem eu nem perceber o que estava acontecendo. Também não tive aprovação para a minha mudança. Pediram mais informações, que eu as trouxesse para a próxima reunião. Queriam uma tabela comparativa de tudo o que acontecia nessa inconsistência. O melhor momento, com certeza, foi quando o Raphael Amorim, que também estava visitando San Francisco, apareceu no meio da reunião para falar comigo e ficou parado de pé olhando para mim em uma cara que expressava: “eu não sei o que estou fazendo aqui”. Eu não sabia se ria, muito mais do meu desconhecimento do que era permitido ou não na reunião. Eu respondi com a mesma expressão facial.

Eu teria que ir a mais uma reunião. Que era em Munique, na Alemanha. Eu pensei comigo mesmo que isso seria um compromisso que poderia durar. E fui perguntar ao David Herman – que havia conhecido no BrazilJS de 2011 – o que eu precisava para me tornar um membro do TC39. Ele me contou que a Bocoup poderia se tornar membro do ECMA, mas eu também poderia representar a jQuery Foundation, já que fazia parte.

Desde então, estou indo às reuniões representando a jQuery Foundation e, nesse meio tempo, também consegui fazer a Bocoup se tornar membro, representada pelo Rick Waldron, meu amigo e mentor em quase tudo que tenho feito no TC39.

O melhor de fazer parte da jQuery Foundation é que o nosso papel é justamente representar desenvolvedores. Eu, você, qualquer desenvolvedor JavaScript. Já tem muito acadêmico e implementadores de runtime no grupo, agora tem também os desenvolvedores.

Não vou mais para as reuniões com medo, mas é um peso enorme saber que estou participando do desenvolvimento da minha linguagem favorita e isso afeta a vida de todos na internet. Ainda assim, estou feliz que todos agora vão ter a API de TypedArrays consistente.

5) Eu acho muito importante conhecer o processo de evolução de uma linguagem. Como membro do TC-39, você poderia nos resumir qual é o processo atual de evolução do JavaScript?

O TC39 é um grupo técnico do ECMA International, que é a organização que publica as especificações como padrão. O ECMAScript é, inclusive, enviado para o ISO.

Todas as novas features da linguagem precisam passar por consenso de todo o TC39. E esse consenso é obtido, de forma pessoal, nas reuniões regularmente a cada 2 meses. Isso significa que cada proposta exige a concordância de todos os membros presentes e, que uma pessoa poderia tecnicamente vetar qualquer coisa. É claro que o comitê tem os seus meios para lidar com comportamentos tóxicos – eles existem.

Desde o ES6, features novas passam por um processo de estágios, em que agora é necessário consenso para avançar para cada novo estágio até o 4. Isso significa uma busca pela qualidade e amadurecimento, mas também, que nada vai se tornar parte das especificações com pressa. Esse processo de estágio inclui um tempo de pesquisa e especificação mínima – estágio 1 – para, então, definir alguns revisores – no estágio 2 – e inclusive há a exigência de que o responsável pela proposta – chamado de champion – forneça testes no test262 durante o estágio 3 e que haja pelo menos 2 implementações em browsers para avançar para o estágio 4.

Correções de bugs que mudam a norma da especificação ou pequenos ajustes, tipo, a remoção do Reflect.enumerate, porque abria uma falha de segurança nos browsers e ferrava com a performance, podem passar direto com um único consenso sem necessidade de utilizar o processo de estágios.

6) O JavaScript evoluiu de uma linguagem complementar para uma das linguagens mais utilizadas e mais importantes do mundo. Em sua opinião, o que ainda podemos esperar do JavaScript nos próximos anos?

Nada é feito com pressa, mas com muita responsabilidade. Tem muita coisa por vir – e os planos do TC39 são sempre pensando a longo prazo, coloca no mínimo 50 anos nessa expectativa. Mesmo que o JS não seja o mesmo, não vai ser o TC39 que vai definir prazo de validade.

Há muita coisa nova para vir, e muitas, com certeza, surgem após feedback da comunidade. O que os desenvolvedores usam, e como usam, é super importante. Arrow functions está aí por causa de CoffeeScript, vai vendo.

O que podem esperar também é que, dificilmente, algo vai quebrar por retrocompatibilidade. Isso só aumenta a responsabilidade do TC39, mas é um problema do TC39 e nunca deve ser problema dos desenvolvedores. O JS é atualizado no browser de todos e cada dia surgem coisas novas. Quebrar alguma feature é sempre chamado de quebrar a web. Não queremos isso.

Uma das coisas mais incríveis que tem acontecido nas últimas reuniões é o trabalho incrível que o John-David Dalton – autor do Lodash – tem feito para integrar o Node.js com o TC39. Eu tive a oportunidade de participar desse processo desde maio, que resultou em uma proposta para não termos a infame extensão .mjs para arquivos JS que usem ES Modules.

Com a possibilidade disso acontecer ainda presente, eu reuni nesse fim de semana todos os membros do jQuery para debatermos sobre uma saída, inclusive dar o suporte que for necessário ao Node.js Foundation para termos a melhor implementação. Temos pessoas que querem até pagar em dinheiro do próprio bolso para desenvolverem uma forma alternativa. Vamos marcar uma reunião online essa semana e, provavelmente, trazer mais membros do jQuery Foundation na próxima reunião em novembro, caso isso ainda seja um ponto a se discutir.

Aliás, a Node.js é prima da jQuery Foundation. Ambas fazem parte da Linux Foundation. Temos mais é que ajudar a nossa família, certo?

7) Nos últimos anos, tivemos uma quantidade enorme de desenvolvedores brasileiros indo trabalhar fora do país, incluindo você. Qual suas considerações relacionadas ao tema? Algum motivo especial para isso acontecer?

Cada um está correndo atrás de seus sonhos e, muitas vezes, os sonhos estão geograficamente longe, como foi o meu caso. Outras vezes, as pessoas precisam de maior estabilidade e independência financeira. Posicionamentos políticos à parte, o Brasil está em uma crise política e econômica e apesar de ter muita oportunidade de emprego no Brasil, nem todas pagam bem. Isso aumenta ainda mais com o contraste na qualidade de vida.

Se o mercado melhorar algum dia nesses aspectos, com certeza, vai ter gente querendo voltar. Morar fora não é fácil. Meu salário é bom, mas não é ótimo. O custo de vida aqui é muito alto e, principalmente nos EUA, a minha esposa não pode trabalhar enquanto não estivermos próximos a terminar o processo do Green Card, que dura alguns anos. Serviços básicos existem em abundância no Brasil e aqui é cada um que faz o seu. Recomendo sempre ler aquele artigo que fala sobre lavar a privada para usar o notebook no ônibus. Tem que ralar muito e sempre longe da família, dos amigos e da comunidade.

8) Ainda neste assunto, qual dica você daria para desenvolvedores que desejam trabalhar fora do Brasil?

Ensinem todos os seus amigos e familiares mais próximos a usarem o FaceTime ou algum app de comunicação. Instale todos. Há um mundo novo a se descobrir, inclusive o quanto podemos sentir saudades.

Não tenham medo. Tem muita coisa boa e muita coisa nova pra se aprender. Às vezes, até detalhes como comer comida com as mãos, ou descobrir como brasileiro acha ok se atrasar para reuniões – ou até adiar sem aviso – e em outras culturas isso é uma tremenda falta de respeito.

Sempre vai haver uma troca, de coisas que vão amar e coisas que vão odiar. Já dizia o Tom Jobim, que morou alguns anos em NY: “Morar nos Estados Unidos é bom, mas é uma merda. Morar no Brasil é uma merda, mas é bom”.

9) Eu sei que você toca guitarra. Continua com esse hobby morando nos EUA? Adquiriu algum outro?

Eu trouxe 4 guitarras do Brasil. deixei uma para quando vou visitar. O violão ficou também. Dá muito trabalho. Eu toco guitarra sempre e só pra mim, ninguém mais ouve. Minha música não é open source, haha, eu morro de vergonha. Eu comprei um contrabaixo barato e já mandei a minha Fender para revisão. Estou com um amp valvulado aqui que faz um som lindo. Meu apartamento é pequeno, mas ainda tenho um projeto de ter um quarto só com guitarras.

Enquanto eu curto muito tocar sozinho – às vezes jogando o Rocksmith – eu curto muito ir para shows por aqui. O meu bar favorito é o Toad, em Cambridge, com shows de graça todos os fins de semana e o Ben Alman as vezes vai lá tocar Funky Music com a sua banda (Big Ben Hillman, tem no Spotify). Não sou muito de ir em shows pagos, por causa de grana, mas já fui a um show do The Who aqui e outros de bandas independentes.

A música é a minha inspiração pra tudo o que eu faço, até programar. Todo código que escrevo tem alguma música na minha cabeça me ajudando a resolver algum problema.

10) Sinto saudade de te encontrar em eventos aqui no Brasil e, muitos desenvolvedores brasileiros também. Alguma última mensagem para todos nós?

A saudade está em um aumento constante por aqui e parte dela é não poder ir para eventos no Brasil como eu ia antes. Agora envolve ficar pendurado em um avião por mais de 10 horas. Se não for Rio ou São Paulo, pode significar ficar por 20 horas ou até mais por causa de conexões, etc. Isso só de ida, tem a volta, que eu me sinto um bagaço. Isso, sem contar que, cada viagem dessas custam cerca de $1000. Isso é muita grana. É muito tempo viajando e normalmente não tem tanta folga no trabalho, a menos que eu use o tempo das minhas férias ou sacrifique alguns finais de semana sem descanso.

Considerando os outros expats brasileiros, eu até vou bastante para o Brasil, mas já perdi vários casamentos, conferências, oportunidades de ir palestrar, nascimentos de bebês de amigos e até pessoas super próximas que vieram a falecer.

Tem gente que entende isso fácil, mas tem algumas pessoas que acham que é charme. Já recebi tweets de pessoas perguntando porque eu deixei de fazer coisas para as comunidades de desenvolvimento ou porque não ligo mais para quem está no Rio. Eu faço o que posso. Eu estou em três grupos do Telegram sobre desenvolvimento para manter o contato. Ao mesmo tempo, essa distância faz as pessoas esquecerem de quem está longe, isso é natural. Ser chamado para participar de eventos é muito mais difícil no Brasil e, já tive convites cancelados por causa do custo. Outros que cancelei por não poder tirar férias na data em específico.

Ao mesmo tempo, estamos aí, quero fazer do JavaScript uma linguagem sempre melhor e que tenha a representação de todos. Sou só mais um programador com medos e incertezas no TC39, esperando desviar da chave inglesa a cada dia.

Se eu não posso trazer a mim mesmo para as comunidades do Brasil, eu tento trazer a comunidade brasileira para o TC39.


BrazilJS é uma iniciativa NASC