Neste ano, na PyCon 2017, dois keynotes foram apresentados por pessoas da comunidade científica de Python: o Dr. Jake VanderPlas falou sobre por que cientistas adotaram e devem adotar Python; e a Dra. Kathryn Huff explicou como a comunidade Python pode ajudar as comunidades científicas — e por que deve fazê-lo. Juntas, essas duas palestras oferecem uma visão coerente de como a pesquisa científica e a programação em Python se complementam, por que muitos cientistas em atividade hoje se beneficiariam ao adotar Python e como a comunidade Python pode apoiar a pesquisa científica de forma efetiva.

A surpreendente eficácia do Python na computação científica
Jake VanderPlas é astrônomo no eScience Institute da University of Washington, em Seattle. Ele também é ativo na comunidade científica de Python, tendo contribuído para SciPy, scikit-learn e altair, entre outros pacotes.
Muita gente imagina astrônomos na base de telescópios gigantes, olhando por lentes; porém, Jake garantiu que a maioria dos astrônomos nunca olhou por um telescópio na vida profissional — eles passam boa parte do tempo de coleta de dados fazendo isso por meio de consultas a bancos de dados. E banco de dados é só a ponta do iceberg quando falamos das habilidades computacionais desses profissionais, exigidas pelas tarefas que enfrentam — Jake trouxe vários exemplos esclarecedores. Veja esta visualização do sistema exoplanetário TRAPPIST-1, por exemplo:

É tentador achar que é uma imagem fotorrealista, mas na verdade é uma interpretação artística — não são os dados originais. A existência do planeta foi inferida por meio do escurecimento de uma estrela e de modelagem estatística desse sistema a partir do conjunto de dados abaixo e de medições subsequentes (imagem e dados de Ethan Kruse):

Como toda essa inferência e análise estatística foi feita? Em Python, claro. Com uma "modelagem estatística incrivelmente intrincada do sistema"; além disso, encontrar esse tipo de sistema, disse Jake, "depende de escrever código estatístico em um pipeline elaborado de análise de dados".
Esse é um de vários projetos científicos (em astronomia) que Jake mostrou e que usam Python em seus pipelines de processamento e análise de dados. Vale notar que esses projetos não só usam uma linguagem open source — seus códigos estão no GitHub, como o Kepler e o JWST. Este último busca detectar gases na atmosfera de outros planetas para identificar sua composição química e possíveis assinaturas de vida. Esses projetos são em Python, estão no GitHub e usam Jupyter Notebooks, entre outras ferramentas.
Seria tudo isso apenas anedótico — alguns projetos em Python fora da curva? Em astronomia, não. Jake analisou publicações e mostrou que o uso de Python cresce de forma constante:

Repare no hockey stick do Python! Já vimos que cientistas usam cada vez mais Python, mas por que eles usam Python?
4 argumentos para usar Python em computação científica
Jake perguntou: "Por que Python é uma ferramenta tão eficaz na ciência?"
1. Interoperabilidade com outras linguagens
Python como cola: historicamente, muitos cientistas trabalhavam com pipelines de dados complexos e engessados para ir do experimento e/ou dados até resultados comunicáveis: consultas a bancos de dados, comandos em terminal, softwares especializados ou proprietários, até chegar em ferramentas de visualização. Jake VanderPlas citou Dave Beazley, porque ele resumiu bem:
"Cientistas... trabalham com uma grande variedade de sistemas, que vão de códigos de simulação, pacotes de análise de dados, bancos de dados, ferramentas de visualização e softwares caseiros — cada um com um conjunto diferente de interfaces e formatos de arquivo. Como resultado, um cientista pode gastar muito tempo apenas tentando fazer todos esses componentes funcionarem juntos de algum modo..."
E Python consegue interoperar com praticamente todas as ferramentas que você pode querer usar em pesquisa científica: ele une tudo, faz a cola. Como disse Jake, Python é usado para "juntar o amontoado de ferramentas com as quais as pessoas trabalham; a sintaxe de alto nível do Python envolve bibliotecas de baixo nível em C/Fortran".
2. "Baterias incluídas" + módulos de terceiros
Outro motivo para a migração de pesquisadores para Python (e por que quem ainda não migrou "deveria") é que:
- ele já vem com muitas "baterias incluídas" e
- para o que não vier, existe um ecossistema gigantesco de Scientific Python (
SciPy) disponível como módulos de terceiros.
Com as "baterias incluídas" você consegue fazer scraping, subir servidores web, trabalhar com sistemas de arquivos e bancos de dados, ler JSONs e muito mais!
Já os módulos de terceiros são onde as coisas ficam realmente empolgantes. Exemplos (entre muitos):
- NumPy para computação com arrays;
- IPython e Jupyter como IDE sobre Python e também para produzir documentos científicos, comunicar e colaborar em pesquisas/resultados;
- Numba e Dask para escalabilidade e computação distribuída;
- Pandas para DataFrames;
- Matplotlib e Bokeh (por exemplo) para visualização de dados (há todo um ecossistema de bibliotecas de dataviz em Python);
- Scikit-learn para Machine Learning;
- NetworkX para criação, manipulação e estudo de redes complexas;
- Scikit-image para processamento de imagens;
- PyMC para amostragem por Cadeias de Markov Monte Carlo;
- E a lista continua.
Como disse Jake, "se você tem um problema para resolver, provavelmente existe uma biblioteca para ajudar — e ela deve estar no GitHub!"

3. Simplicidade e natureza dinâmica
Python é relativamente fácil de escrever, especialmente quando comparado a linguagens como C. Como disse Jake, "Em Python, sobretudo vindo de C, por exemplo, você escreve o que quer que aconteça — e acontece; é quase como escrever pseudocódigo executável".
Ele também citou Perry Greenfield: "Python é uma linguagem muito poderosa para desenvolvedores, mas também é acessível para astrônomos. Fazer com que esses dois públicos usem as mesmas ferramentas traz um enorme benefício que nem sempre é percebido ou mencionado".
Graças a ferramentas como IPython e Jupyter Notebooks, há um ótimo espaço para codificação dinâmica e análise exploratória e iterativa de dados em tempo real. Isso resulta em uma barreira de entrada baixa, pois a própria programação científica é não linear e exploratória. Jake observou que alguns podem reclamar que essas ferramentas são lentas, mas, para pesquisa científica, o que importa é a velocidade de desenvolvimento, não a velocidade de execução — o que as torna ideais.
4. Ética do aberto, perfeita para a ciência
Software open source tem uma ética muito alinhada com a abertura exigida pela pesquisa científica (talvez até mais do que boa parte da própria ciência praticada). Voltaremos a isso ao falar da palestra da Katy Huff, mas ciência não acontece só nos artigos publicados — ela está no resultado, nas instruções/protocolo e na capacidade de reproduzir o resultado; é exatamente isso que o desenvolvimento de software open source busca. Jake trouxe a seguinte citação de Buckheit e Donoho (1995, parafraseando Jon Claerbout):
"Um artigo sobre um resultado computacional é publicidade, não erudição. A verdadeira erudição é todo o ambiente de software, código e dados que produziu o resultado." — Buckheit e Donoho, 1995
O software open source e a ética do ecossistema Python (científico e além) oferecem uma estrutura que pode nos ajudar a sair da crise de reprodutibilidade científica: "resolver a reprodutibilidade passa por ciência aberta" — e o caráter colaborativo, com revisão por pares e publicável no GitHub da pesquisa científica no ecossistema Python é fundamental para essa abertura. Se eu quiser ver como as ondas gravitacionais (previstas por Einstein) foram detectadas em 2016, basta ir ao repositório do LIGO aqui. Ou, se você é um número cada vez maior de astrônomos que usam o pacote Astropy em suas pesquisas, encontra o código e a comunidade que o produz aqui. O fato de tudo ser tão aberto é resultado direto de uma comunidade que modela a ética do open source e da ciência aberta encontrada na comunidade Python em geral. Veja a tabela do que, na visão do Jake (adaptado de Perry Greenfield), a comunidade de astronomia aprendeu com a comunidade Python:

Faça isso pela ciência
"Estou aqui para canalizar o seu poder para os meus propósitos", disse a Dra. Kathryn Huff à comunidade da PyCon, antes de apresentar um argumento convincente de como e por que a comunidade Python pode ajudar a ciência a salvar o mundo. Seu keynote mostrou, com detalhes e paixão, por que o desenvolvimento open source em geral, e Python em particular, são tão eficazes em computação científica e na prática científica como um todo. Ela foi além e mostrou vários caminhos em que a comunidade de programação Python pode usar suas habilidades para apoiar a comunidade científica — e ajudar a salvar o mundo. Se você acredita que água, saúde ou energia são problemas críticos para a humanidade, Kathryn trouxe projetos e repositórios no GitHub com issues abertas prontos para você entrar e contribuir. Foram dezenas de exemplos de projetos e pacotes abertos com tarefas às quais você pode se somar.
Kathryn (Katy) é engenheira nuclear, contribuidora de longa data da comunidade SciPy, atua no Journal of Open Source Software e dedica muito do seu tempo ao The Hacker Within e às iniciativas Software e Data Carpentry, que ajudam cientistas a usar melhor computadores e a fazer descobertas, promovendo reprodutibilidade e facilitando o uso de computação por pesquisadores.
A missão da Katy é melhorar a forma como a energia nuclear é produzida. E qual é a ferramenta favorita dela? Python! Antes de mergulhar nas várias maneiras pelas quais a comunidade Python pode ajudar a pesquisa científica, Katy mostrou por que isso é necessário. Ela citou R. K. Merton (1945) ao descrever a ciência como algo que exige rigor, estrutura e escrutínio da comunidade (uma ótima definição prática de ceticismo organizado) — qualidades, sem dúvida, presentes na comunidade Python open source.

Katy reforçou a importância disso ao enumerar os princípios básicos da ciência e deixar claro que o desenvolvimento open source tem seguido esses princípios melhor do que qualquer outra comunidade desde a era pitagórica (século VI a.C.). Esses princípios são:
- revisão por pares
- ceticismo
- transparência
- atribuição
- responsabilização
- colaboração
- impacto
Computadores "deveriam" ajudar cientistas a fazer o seguinte:

Qual é, então, o desafio para fazer mais cientistas usarem software open source como Python, para que os computadores realmente os ajudem?
- Cientistas não são treinados para usar computadores de forma eficaz;
Daí o chamado da Katy à comunidade Python:
"Eu quero envolver você".
E esse engajamento é outro motivo para cientistas em atividade usarem Python: existe uma comunidade enorme de desenvolvedores open source à disposição. Como dito, Katy também atua em outra frente: educar cientistas sobre como usar computação no trabalho. Há várias iniciativas do tipo. Recomendo fortemente que pesquisadores conheçam a Software Carpentry e a Data Carpentry para ver se podem ajudar seu grupo, departamento ou universidade (spoiler: se você computa, provavelmente podem).
Como a Dra. Katy Huff sugere que programadores ajudem? Em quatro passos simples:
- Seja curioso;
- escolha um projeto;
- contribua com a ciência;
- salve o mundo.
Por que Python para pesquisa?
- O ecossistema Python oferece um conjunto maduro — e em constante evolução — de ferramentas computacionais para cientistas.
- Cientistas estão migrando em massa para Python por causa de sua:
- interoperabilidade com outras linguagens;
- abordagem de "baterias incluídas" e módulos de terceiros para quase tudo o que você precisa fazer;
- simplicidade e natureza dinâmica;
- ética do aberto, que combina com a ciência.
- A comunidade de Scientific Python cresce continuamente e as bibliotecas estão sempre evoluindo; a comunidade é aberta;
- A comunidade de desenvolvimento open source segue os princípios básicos da pesquisa científica mais do que qualquer outra; esses princípios são:
- revisão por pares
- ceticismo
- transparência
- atribuição
- responsabilização
- colaboração
- impacto
- Há uma comunidade ainda maior de programadores Python que não são cientistas e querem contribuir para o impacto do Python na ciência, no mundo e em causas nas quais acreditam; parafraseando levemente Perry Greenfield,
"Python é uma linguagem muito poderosa para desenvolvedores, mas também é acessível para [cientistas]. Fazer com que esses dois públicos usem as mesmas ferramentas traz um enorme benefício que nem sempre é percebido ou mencionado".
Se você tiver ideias, comentários ou reflexões, me chame no Twitter: @hugobowne.



