Joshua Bloch: A consciência da plataforma Java
"A linguagem de programação Java esgotou o seu orçamento de complexidade com as mudanças introduzidas na versão 5.0". É uma frase surpreendente, principalmente por causa de quem a disse. Joshua Bloch passou anos na Sun Microsystems a conceber as adições em questão, e a versão JDK 5.0 que ajudou a moldar foi a expansão mais ambiciosa que a linguagem alguma vez teve. Depois, disse ao mundo que era suficiente. Esse instinto — de vigiar um sistema que ele próprio tinha alargado, e de pensar em orçamentos em vez de funcionalidades — é todo ele numa única linha.
Southampton, Columbia, Pittsburgh
Bloch nasceu a 28 de agosto de 1961 em Southampton, Nova Iorque. Obteve um bacharelato em informática na Escola de Engenharia e Ciências Aplicadas da Universidade de Columbia, e depois foi para a Carnegie Mellon para um doutoramento, concluído em 1990. A sua tese, "Uma abordagem prática à replicação de objetos de dados abstratos", foi nomeada para o Prémio ACM de Dissertação de Doutoramento Distinta.
O título merece ser lido duas vezes. Mesmo como estudante de pós-graduação, a palavra operativa no trabalho de Bloch era prático. Ele não estava a atacar a replicação como um problema teórico em sistemas distribuídos; ele procurava uma versão que os engenheiros pudessem realmente implementar contra objetos de dados abstratos. Passou o resto da sua carreira nessa mesma lacuna estreita e pouco convencional entre o que é comprovadamente correto e o que se pode confiar que um programador em atividade utilize.
Sun e o Collections Framework
Após um período na Transarc como designer sénior de sistemas, Bloch juntou-se à Sun Microsystems, onde se tornou Engenheiro Distinto e liderou o design e a implementação de várias das peças que tornam o Java reconhecivelmente Java. O Java Collections Framework é a maior delas: o conjunto de interfaces e implementações — listas, conjuntos, mapas e os algoritmos que operam sobre eles — sobre os quais cada programa Java tem sido construído desde então. Também liderou o pacote java.math e o mecanismo de asserção da linguagem, e impulsionou melhorias importantes no JDK 5.0.
Este é um tipo peculiar de autoria. Uma biblioteca de coleções não é uma aplicação; é um vocabulário. Milhões de programadores que nunca ouviram o nome de Bloch passam as suas vidas profissionais dentro dos substantivos e verbos que ele escolheu, e a forma do seu pensamento é limitada pela forma das suas interfaces. Fazer isto mal não teria produzido um mau programa; teria produzido uma má linguagem para escrever programas, permanentemente.
Vinte perguntas, oito minutos no relógio e um percentil medido contra todos os que já fizeram. Sem cadastro.
Fazer o teste de QI →Effective Java
Em 2001, publicou Effective Java, e fez algo que os livros sobre linguagens de programação raramente fazem: tornou-se a autoridade moral de uma comunidade. Estruturado como uma série numerada de itens independentes, cada um estabelecendo uma regra e depois argumentando a partir de modos de falha reais, ganhou o prémio Jolt em 2001. A segunda edição, em 2008, cresceu de cinquenta e sete itens para setenta e oito sem se tornar mais difícil de ler; uma terceira chegou em 2017.
Escreveu mais dois livros com colaboradores. Java Puzzlers, com Neal Gafter em 2005, é uma antologia das armadilhas da linguagem — código que se comporta corretamente segundo a especificação e insensatamente segundo a intuição — apresentado como um exercício de diagnóstico. Java Concurrency in Practice, em 2006, foi escrito com cinco colaboradores, incluindo Doug Lea, e tornou-se a referência padrão sobre a coisa mais difícil que a plataforma pede aos seus utilizadores.
Google e o design de API
Bloch foi o arquiteto Java chefe da Google de junho de 2004 a agosto de 2012. Foi lá que a sua preocupação central se cristalizou num argumento público. O seu artigo de conferência de 2006, "Como desenhar uma boa API e porque é que isso importa", trata o design de interfaces como uma disciplina com riscos em vez de uma questão de gosto, com base no facto de que uma API é um contrato que não se pode renegociar. Descreveu a frustração de forma concreta: na Google, não podia fornecer implementações alternativas para certas classes porque tinham sido declaradas como tipos concretos em vez de interfaces — uma decisão tomada anos antes por outra pessoa, o que, como ele disse, é o tipo de limitação que "os programadores comuns sentem todos os dias".
O seu conselho tem um sabor constante: humildade sobre o próprio julgamento. Não se repita; procure uma biblioteca estabelecida, particularmente para concorrência, em vez de escrever a sua própria. Desconfie da sensação de que os avisos gerais sobre a otimização prematura não se aplicam a outras pessoas — "é fácil sentir que os avisos gerais sobre a otimização prematura não se aplicam a si, porque simplesmente sabe que código é crítico em termos de tempo". E leia The Elements of Style, porque "a boa programação e a boa escrita têm ambas a ver com clareza e economia de expressão".
Porque é que Joshua é chamado de génio
A faculdade em questão não é a invenção pura, mas algo mais raro: a capacidade de ver uma peça de software a partir da posição do estranho que a terá de usar, e de desenhar para os erros prováveis desse estranho em vez de para a própria competência. Uma API, no quadro de Bloch, é uma linguagem imposta a pessoas que nunca consentiram nela e não a podem alterar, o que faz com que desenhar uma seja um exercício de antecipação do uso indevido à escala, décadas antes. O Collections Framework é a prova: um vocabulário usado por uma enorme fração de todos os programadores em atividade, suficientemente correto para ter sobrevivido em grande parte inalterado. A segunda peça é a codificação: Effective Java pegou na experiência tácita que anteriormente vivia apenas nas cabeças de alguns engenheiros de plataforma e transformou-a em regras transferíveis e discutíveis.
O contra-argumento merece ser exposto. Bloch não produziu nova ciência informática. A sua tese foi nomeada para um prémio de dissertação distinta, não recebeu um; o seu trabalho mais conhecido é um livro de melhores práticas, que é curadoria e julgamento em vez de descoberta. As honras registadas são um prémio de publicação comercial e uma lista de revistas, não os principais prémios de investigação do campo, e nenhuma fonte consultada aqui regista alguém a chamá-lo de génio. O Collections Framework foi um grande esforço de equipa que ele liderou, não uma composição a solo. O veredito justo é que Bloch é um praticante e professor supremo do julgamento de engenharia — uma disciplina que importa mais do que a novidade no software e recebe muito menos crédito.
Legado
Continuou a moldar a linguagem depois de deixar a Sun, co-propondo blocos de Gestão Automática de Recursos e Expressões de Criação de Instâncias Concisas como abordagens para fechos; os blocos ARM chegaram ao JDK 7. Em dezembro de 2004, o Java Developer's Journal nomeou-o entre as quarenta pessoas de software mais importantes do mundo. Desde então, regressou à Carnegie Mellon, onde é professor de prática no Departamento de Sistemas de Software e Societais — um título que se lê como um resumo da sua carreira, uma vez que a prática foi sempre o ponto principal.
A medida do trabalho é que a sua influência não é atribuída. Algures hoje, um programador que nunca leu uma linha da prosa de Bloch procurará uma interface em vez de uma classe concreta, ou recusará criar manualmente uma primitiva de concorrência, porque um colega lhe disse uma vez para não o fazer, depois de o ter lido num item numerado num livro.
