Bill Mills, físico e programador interdisciplinar

Foto de Bill Mills
Olá, eu sou Bill Mills!

Com o que você trabalha?

Atualmente, meu trabalho é relacionado às diversas formas com as quais a programação, as interfaces do usuário, e a experiência dos usuários com programação, ajudam a ciência a evoluir de forma rápida e divertida! Eu trabalho para o TRIUMF, o laboratório nacional do Canadá para física nuclear, como um especialista em tecnologia web e gerente de projeto de software para o experimento GRIFFIN. GRIFFIN é um espectrômetro de raios gama inovador que estará disponível online no TRIUMF até o final de 2014, projetado para registrar dados sobre partículas radioativas de maneira mais eficiente e a velocidades muito mais altas que as de qualquer outro experimento anterior, o que nos permite obter uma imagem mais detalhada do núcleo do átomo.
No caso do GRIFFIN, meu trabalho se concentra na modernização do modo como os cientistas interagem com seus experimentos. Os experimentos anteriores da minha área contaram com exibições rudimentares para comunicar aos cientistas o que estava acontecendo naquele momento com seu experimento. Imagine listas imensas com números organizados em tabelas inseridas em outras tabelas, dispersas por inúmeros lugares diferentes. Isso foi há décadas, quando um experimento deveria envolver apenas um número relativamente pequeno de dispositivos simples. Mas os experimentos modernos podem ter milhares de detectores e fluxos de dados (Apenas o GRIFFIN produzirá 200 TB de dados por semana) e, além disso, uma gigantesca infraestrutura de suporte.
Nossos experimentos cresceram muito e ficaram muito complexos para serem gerenciados com interfaces desorganizadas e relatórios simplistas. E, como se isso não fosse ruim o bastante, diferentes equipes de cientistas virão até aqui para usar o GRIFFIN o tempo todo. Eles não têm condições para aprender a usar uma interface de usuário complexa e, ao mesmo tempo, conduzir seus experimentos. Portanto, o GRIFFIN precisa ter uma interface de usuário intuitiva e extremamente fácil de usar, sem sacrificar os detalhes ou a potência. É por isso que, desde o ano passado, eu tenho usado todas as ideias e tecnologias legais que a comunidade do JavaScript elaborou para produzir uma interface de usuário que permitirá que os cientistas comecem a atuar o mais rápido possível, assim que chegarem ao laboratório.
Uma versão de desenvolvimento do painel que eu criei para o GRIFFIN, a partir do primeiro teste online do detector SPICE.
Calculadora de eficiência do detector baseada na web para o GRIFFIN e suas detectoras irmãs, que substituíram os cálculos de papel e caneta (!).
Além do meu trabalho com a interface de usuário, também estou tentando ajudar os cientistas a modernizar o modo como eles programam, fazendo-os usar as ferramentas usadas por desenvolvedores de software de verdade. A computação se tornou tão essencial para nossa metodologia, que você simplesmente não pode ser um físico sério hoje em dia sem escrever diversos códigos. Mas até o momento, a comunidade da física ainda precisa se atualizar no que diz respeito às técnicas de computação. A maioria dos físicos aprende a programar usando apenas o método de tentativa e erro, até obter algo que (quase) dê certo. Estratégias como controle de versão e colaboração de software de código aberto foram desenvolvidos por programadores para aprimorar o processo de desenvolvimento. Se os cientistas pudessem aprender com essas estratégias, poderíamos não apenas potencializar o modo como fazemos ciência, mas também torná-lo mais aberto e reproduzível. Os laboratórios de todas as áreas precisam de pessoas que possam colaborar com ideias inovadoras de fora de suas esferas comuns, de modo que as técnicas científicas possam continuar crescendo e evoluindo, e é exatamente isso que estou tentando fazer hoje, entre a física e a computação.

Como você aprendeu a programar?

Eu comecei minha vida na programação quando era aluno da pós-graduação e trabalhava no experimento ATLAS, no LHC (Grande Colisor de Hádrons), no CERN - e foi um desastre! Eu tinha assistido a exatamente uma aula sobre programação quando era aluno da graduação - e eu fui reprovado. Eu não sabia absolutamente nada sobre programação, e estava convencido de que eu era péssimo nisso, então, de repente, quando eu já era um aluno do doutorado, eu comecei a escrever códigos o tempo todo. Durante cinco anos, eu fiz o que pude para escrever uma análise sofisticada que formava o núcleo da minha dissertação, mas, na verdade, não foi nessa época que eu realmente aprendi a programar. O que eu aprendi com as minhas experiências durante a pós-graduação foi o quão perdida e sem propósito a ciência profissional era em termos de cultura no que diz respeito à programação - e quão imenso era o salto que poderíamos dar se aprendêssemos a fazer isso da forma correta.
Eu realmente aprendi a programar somente depois da pós-graduação. Igual ao caso de muitos profissionais acadêmicos, os trabalhos de ciência eram escassos e bem distantes da pós-graduação. Enquanto eu procurava trabalho, meu parceiro, um notável desenvolvedor web do cenário de desenvolvimento web de Vancouver, sugeriu que eu aprendesse um pouco sobre JavaScript e começasse a frequentar os grupos locais de encontro sobre software de várias partes da cidade. Esse foi um ótimo conselho, uma vez que Vancouver tinha (e ainda tem) um cenário de inicialização de software vibrante que me recebeu de braços abertos, me apoiando enquanto eu aprendia o básico sobre design e desenvolvimento web. Interagindo com o cenário de Vancouver, eu percebi que havia uma cultura muito rica, não só da tecnologia da computação, mas também da técnica. Era este refinado conjunto de conhecimentos e habilidades da computação que faltavam na ciência e, desde então, eu tenho trabalhado para unir esses dois mundos.

O que você faz quando não está trabalhando?

When I’m not programming, I’m probably teaching about programming! I’ve mentored for Ladies Learning Code, an educational outreach program to help break down barriers for women interested in learning to code, and I’m very excited to be almost finished my certification to teach for Software Carpentry, a bootcamp workshop program designed to teach coding to scientists. I’m also currently building InterdisciplinaryProgramming.com, a free service to match volunteer developers with scientists looking for coding mentorship, and am exploring the possibility of bringing the maker movement to lab by helping my colleagues in ecology and agriculture learn about Arduino electronics prototyping and other open hardware options for modernizing their experiments.
Eu também tento ir a todas as conferências que posso para falar aos programadores sobre o trabalho em equipe, a fim de tornar a ciência mais rápida e ainda melhor. Aqui sou eu na LXJS, em Lisboa, Portugal, em 2013, com a brilhante Angelina Fabbro, falando sobre a possibilidade de cientistas e programadores trabalharem em equipe:
Quando eu realmente estou longe do computador, tento encontrar tempo para trabalhar como voluntário juntos aos grupos ambientais da minha comunidade. Eu sou apaixonado por corrigir nossa relação com a natureza e já escrevi conteúdos e desenvolvi uma pesquisa para SPEC, em Vancouver, por um certo tempo.

Qual é o seu conselho para novos programadores?

Nunca se esqueçam de que não existe isso de habilidade inata. É muito fácil ver os grandes programadores e se sentir realmente despreparado, como se você nunca fosse chegar à altura deles ou até mesmo como se nunca fosse se tornar um programador de ‘verdade’. Mas eu tive o privilégio de encontrar alguns dos melhores programadores da atualidade, e todos eles tiveram a mesma experiência: eles se sentiram falsos e impostores quando começaram, e nenhum deles pensou que era fácil no início, independentemente do quanto eles fazem isso parecer fácil hoje. Se você já conseguiu escrever uma única linha de código, então você é um programador de verdade. E se você continuar codificando e aprendendo, um dia você também será um mestre.