JavaScript

28 jun, 2018

Dez perguntas com Angus Croll, autor de Se Hemingway escrevesse JavaScript

Publicidade

Eu nunca pensei que um dia saberia codificar. Embora eu seja um engenheiro de software hoje, estudei história e literatura na faculdade, e trabalhei com marketing após a formatura. Trabalhar em uma empresa de tecnologia me deixou sedento por habilidades de engenharia, então resolvi aprender programação.

Meus amigos ficaram chocados. Um deles, ao ouvir meus planos para uma transição de carreira, recomendou um livro chamado “If Hemingway wrote JavaScript“.

“Se tem um livro de programação que vai falar com um tipo humanas como você, é este”, ela prometeu.

Eu comprei.

Avanço rápido de 14 meses; acabei de começar em uma função de engenharia na Uber Eats e vejo uma mensagem de bate-papo na tela da Angus Croll. O nome toca um sino. Seria este o autor do meu primeiro e favorito livro de software?

Ele foi! Angus trabalha na equipe da Plataforma Web da Uber, onde ajudou a escrever o JavaScript que impulsiona o aplicativo móvel da web m.uber, entre outros projetos importantes. Emocionado ao perceber que éramos colegas, procurei ter uma conversa sobre código, literatura e seus cruzamentos.

Você sempre foi um leitor?

Sim, sempre gostei muito de literatura. Eu provavelmente prefiro ler do que escrever código – eu meio que acabei em software por acidente.

Como pode a sua carreira de software ser um acidente?

Eu estava trabalhando em um emprego sem futuro logo depois da faculdade. Então, um dia eu me candidatei a um emprego numa que estava disposta a contratar e treinar estagiários de programação. No começo, eu escrevia software como trabalho, para receber o pagamento – eu estava apenas seguindo o fluxo. Foi só depois que descobri o JavaScript que algo me despertou.

O que era tão encantador no JavaScript?

Eu gosto da sua flexibilidade e sua estranheza; embora a sintaxe seja realmente bastante direta, ela pode ser adaptada a várias abordagens: funcional, objetiva e procedural. É comum que um módulo combine várias abordagens. Como o inglês ou outras línguas faladas, você pode conviver com um vocabulário relativamente pequeno e, no entanto, é altamente expressivo e está em constante evolução.

JavaScript é essa linguagem não convencional que os cientistas da computação tendem a desprezar e menosprezar. Ela não tem verificação de digitação, sua verificação de igualdade é um pouco de campo à esquerda e coagirá variáveis ​​sem perguntar. Talvez esse desprezo peculiar pelas línguas tradicionais seja parte da atração para mim.

Também é muito indulgente – seu código pode parecer um jantar de cachorro, mas ainda será executado – incentivando a exploração da mecânica central da linguagem, o que, por sua vez, estimula a experimentação e o desenvolvimento de novas linguagens. Tudo isso ajuda a manter o JavaScript interessante e divertido.

Quando você começou a sentir o estilo do JavaScript?

Demorou um pouco. Quando você está aprendendo um idioma pela primeira vez, e tenho certeza de que sentiu isso, você tende a entrar em modo de pânico. Você pensa, eu realmente não entendo isso e as outras pessoas entendem, e isso é estressante, então não é hora de experimentar.

Quando você aprende um idioma pela primeira vez, só quer poder escrevê-lo da mesma maneira que outras pessoas o escrevem. É como falar uma língua estrangeira – você só quer se encaixar. Mas, depois de um ano trabalhando em um idioma, você está confortável o suficiente para começar a ser criativo.

Demorou alguns anos até o meu JavaScript começar a ser criativo. Na época, minha empresa me pediu para escrever um blog sobre JavaScript e comecei a me aprofundar na linguagem, porque não sentia que podia escrever publicamente sobre algo que não entendia completamente. Então comecei a estudar os padrões, a especificação subjacente para a linguagem JavaScript. É esse enorme documento – incrivelmente seco – e até mesmo entendendo como apenas uma operação realmente funciona, exige muita atenção.

Lentamente, peça por peça, ganhei uma compreensão do mecanismo JavaScript e percebi que o JavaScript fazia mais do que eu pensava. Havia mais casos extremos e coisas incomuns do que eu imaginara. Pense em procurar um dicionário e encontrar todas essas palavras interessantes que você nunca ouviu falar antes – era assim. Então isso foi legal, e enquanto o blog foi se desenvolvendo, comecei a enviar limites e começar a fazer coisas com JavaScript que outras pessoas não tinham feito antes.

Como outras pessoas estavam usando JavaScript no momento?

Bem, como o JavaScript é flexível e permite fazer muitas coisas, você pode se meter em problemas se não for cuidadoso; você pode escrever um código realmente ruim. Havia pessoas que se definiam como líderes da comunidade JavaScript e argumentaram que deveríamos usar apenas um subconjunto da linguagem, porque metade da linguagem era peculiar ou difícil de entender e poderia causar problemas. Eu não gostei disso. Eu pensei: “Ei, você está descartando algumas ferramentas realmente poderosas. Em vez de ignorá-las, você deveria entendê-las (e depois de entendê-las, você pode usá-las).

Para 90% dos programas em JavaScript, você provavelmente pode conseguir a metade da linguagem amplamente aceita. Mas é muito satisfatório quando você descobre uma utilidade da outra metade da linguagem e é exatamente a ferramenta que você precisa para o trabalho. Eu dei uma palestra na conferência de Berlim em 2012 chamada “Break All The Rules/Quebre todas as regras”.

Foi controverso: eu explorei os recursos do JavaScript que haviam sido declarados inseguros e mostrei como, se bem utilizados​, não eram apenas seguros, mas muito úteis e, além disso, eram a base de algumas das bibliotecas mais populares. A conversa acabou sendo realmente bem sucedida.

Então, essas duas coisas, mergulhando fundo na linguagem e aprendendo a pensar sobre isso por mim mesmo, me fizeram perceber que há um vocabulário rico por lá e que não está sendo usado ao máximo.

Como essas experiências levaram ao livro?

Eu estava constantemente pensando sobre as possibilidades expressivas de JavaScript e seus paralelos com a literatura. Eu estava em um grupo de bate-papo do IRC com outros programadores que amavam literatura e outras formas criativas, e um dia um dos membros do grupo (Jacob Thornton, que escreveu o prefácio do livro) perguntou o que eu estava fazendo e eu disse:

“Estou tentando escrever JavaScript no estilo de Hemingway”

Eu não estava realmente fazendo isso – era apenas uma ideia que eu estava pensando no caminho para o trabalho, imaginando se era factível. Mas Jacob amou a ideia e me incentivou a escrever um artigo sobre isso. Nos dias que se seguiram, escrevi e reescrevi o algoritmo de Fibonacci até ter algo parecido com o estilo de Hemingway e vários outros autores, principalmente os do primeiro capítulo do livro, e o publiquei como um portal. O artigo foi muito popular e até mesmo foi mencionado no The New Yorker.

Na época, eu já estava escrevendo um livro sério de JavaScript para o No Starch Press, uma referência completa para a linguagem. Eu estava ficando esgotada, então eu perguntei se eu poderia dar um tempo e seguir neste novo livro. A editora ficou cética: “Isso não funcionará, onde é que isso vai ficar na livraria mesmo? Na parte de literatura? Na parte de software?” Eu disse,“ não demorará muito – me dê seis meses”. Ele concordou.

Na verdade, acabou me levando cerca de um ano, mas isso incluía edição, produção, etc. O livro apresenta algoritmos canônicos, como se tivessem sido escritos por grandes nomes literários.

Quem foram os autores cujos estilos foram os mais agradáveis de escrever?

Eu realmente gostei de escrever Virginia Woolf – ela é uma das minhas autoras favoritas. Eu costumava achar que ela escrevia de forma difícil até que aprendi a lê-la: não pare, não pense muito, apenas continue lendo. É como um fluxo de consciência; caótico, assim como na vida real, e isso ficará sob sua pele se você deixá-lo entrar. Suas sentenças são tão ricas e bem compactadas, muitas vezes correndo, que elas podem parecer declarações em formato de código.

E embora Woolf não tenha escrito muita poesia, sua prosa é naturalmente poética; você pode organizar o JavaScript para imitar alguns desses padrões. As abordagens ousadas e distintas de Vladimir Nabokov, Jorge Luis Borges e Lewis Carroll (para citar apenas alguns) também foram muito divertidas de imitar.

Houve autores cujos estilos simplesmente não funcionaram?

Os russos: Tolstoy, Chekhov e Gogol. Eu realmente amo a escrita deles, mas eles eram muito difíceis porque são bem sutis. É mais fácil imitar autores com estilos altamente distintos. Tolstoy e Chekhov definitivamente têm seus próprios estilos, mas eles são mais difíceis de entender, e eu senti que não tinha a habilidade de traduzi-los em código. Toni Morrison foi outro autor que passei muito tempo tentando acertar, mas falhei.

Quais recursos do JavaScript você achou que poderia ajustar para alcançar um estilo distinto?

Eu brinquei com nomeação, comentários, diferentes maneiras de expressar funções. Diferentes paradigmas de codificação, como funcionais, objetivos e processuais, naturalmente se encaixam em alguns autores mais do que em outros. Além disso, o fato é que muitos dos melhores autores não ficam presos às regras; eles quebram as regras o tempo todo. Arundhati Roy quebra as regras constantemente e é por isso que ela é tão boa.

Ela vai capitalizar palavras em todo o lugar e criar novas palavras e apenas brincar com a prosa, e isso me faz sorrir porque as pessoas dizem: “Oh, você nunca será uma ótima programadora de JavaScript se não seguir as regras”, e acho que os melhores autores quebram regras o tempo todo.

Um boa parte da escrita deste livro foi sobre como quebrar as regras do JavaScript, e é por isso que eu não recomendaria que as pessoas usassem a maior parte do código do livro em seu trabalho diário. Quebrar regras é o que os autores fazem, e eu me propus a quebrar as regras do JavaScript da maneira como esses autores gostavam de quebrar as regras da literatura.

Como é a recepção do seu livro? Quem você viu que ficou mais animado com isso?

Eu pensei que o interesse viria principalmente da comunidade de codificação, então foi empolgante gerar tanto entusiasmo de pessoas que não têm experiência em codificação, como as muitas pessoas com um histórico de humanas que se sentiram excluídas de toda essa coisa de tecnologia.

Há esse excepcionalismo tecnológico em que as pessoas da área de tecnologia acham que podemos usar algoritmos e dados para resolver tudo e não precisamos de ciências humanas. Isso me incomoda muito! E uma grande parte de escrever este livro diz sobre estender a mão para pessoas nas ciências humanas, dizendo: “Você tem um papel importante aqui”.

Em geral, a diversidade de pessoas que ou tuitou para mim ou me enviou um e-mail sobre o livro, é muito mais alta do que a diversidade de funcionários da maioria das empresas de tecnologia. Mesmo que este livro seja apenas um pequeno passo para ampliar a diversidade de pessoas e abordagem em software, basta dizer “Ei, sabe, há outra maneira de abordar isso”, isso é algo de que me orgulho.

Assine nossa newsletter para acompanhar as mais recentes inovações da Engenharia da Uber.

***

Este artigo é do Uber Engineering. Ele foi escrito por Ginny Fahs. A tradução foi feita pela Redação iMasters com autorização. Você pode conferir o original em: https://eng.uber.com/hemingway-javascript/