Reflexões

Pesquisadores: do Open Access ao Open Source

Dia desses estive pensando sobre o que fazer com códigos que produzimos em algumas publicações. Para quem nunca trabalhou com estatística/bioinformática/filogenética a situação é mais ou menos assim: durante o trabalho você acaba escrevendo um o outro programa/script só que as revistas não publicam este tipo de material que, de certa forma, é necessário para repetir os mesmos resultados que você. Agora que estou começando a trabalhar com filogenética de crocodilos, nas minhas leituras iniciais, notei que muitos dos trabalhos dependem de algum algorítimo de computação. Gostaria de dar uma olhada em alguns deles e creio que produzirei alguma coisa do tipo durante a minha dissertação, então, onde consigo os códigos já escritos e o que faço com os meus depois de terminado o mestrado?

A questão tem se tornado um problema sério. Conforme o tempo passa, cada vez mais e mais recursos computacionais são demandados para os artigos. Programas são escritos, às vezes curtos e às vezes nem tanto. Em filogenética, por exemplo, as tabelas de dados geralmente são publicadas, mas os códigos não. As revistas provavelmente estão sem interesse em publicar códigos e devem permanecer assim (e com razão pois é alheio ao escopo das mesmas). Os códigos curtos até poderiam ser distribuídos como anexos (cada vez mais comuns nas revistas também), mas nem sempre esta opção está disponível. Neste artigo, o autor discute esta mesma questão e coloca à disposição alguns de seus códigos, mas é uma iniciativa dele e uma vez que seu blog/site pessoal saia do ar os códigos somem junto. Foi lendo este post que notei não ser o único preocupado com o destino dos scripts dos artigos.

Felizmente existe uma solução para isso e já está em funcionamento. Já faz algum tempo que o movimento Open Access vem lutando para tornar os artigos científicos um bem público e gratuito com excelentes resultados. Com o crescimento do uso de códigos em diversas áreas da pesquisa um novo movimento se faz necessário na ciência, o dos “artigos Open Source”.

Para quem desconhece o Open Source é um movimento de desenvolvedores que prega que os códigos e especificações de programas e sistemas sejam abertos, ou seja, sejam acessíveis para consulta e estudo para outros desenvolvedores e usuários. Um dos benefícios do modelo Open Source é que ele acelera o desenvolvimento dos aplicativos bem como correção de problemas através da formação de comunidades e de contribuições de voluntários. Além disto, é perfeitamente compatível com o software comercial. Posso citar inúmeros projetos bem sucedidos como o kernel Linux, o Drupal, WordPress, Joomla, LibreOffice, Gimp, MySQL, PHP, Perl…

É bom lembrar que OpenSource e Software Livre são coisas diferentes (com algo em comum). Caso se interesse pelo assunto sugiro uma leitura no BR-Linux. E só para constar, a definição que dei acima é uma interpretação beeeem genérica.

Basicamente a ideia dos artigos Open Source seria tornar público todo o código fonte (e outros dados, se possível) usado durante a pesquisa. Isso facilitaria que os dados fossem testados e retestados por outros, também ajudaria outros pesquisadores em busca de ferramentas e estudantes querendo desenvolver. A abertura do código também o tornaria passível de otimizações já que cada novo usuário/pesquisador/desenvolvedor agregaria mais recursos, robustez e confiabilidade. Agora vem o problema, como iniciar um artigo Open Source? Como eu disse antes o problema está praticamente resolvido pois já existe toda uma comunidade em torno do Open Source que pode fazer o trabalho de publicar os códigos dos artigos paralelamente às revistas.

Para quem trabalha com programação, tanto de sistemas quanto para a web, é comum conhecer ou fazer parte de uma comunidade de desenvolvedores. A maioria destas comunidades são apoiadoras do Open Source e portanto possuem repositórios de códigos já prontos para várias aplicações. Um caso de referência é o Drupal.org.

O projeto Drupal é mantido por uma comunidade de desenvolvedores e entusiastas. Enquanto o cerne da comunidade foca no melhoramento do sistema, iniciativas da comunidade criam códigos, frameworks, módulos e traduções que expandem funcionalidades do sistema. Esta mesma comunidade se organiza para manter os seus respectivos subprojetos com controles de versão, suporte online e etc. O Drupal nada tem haver com pesquisa acadêmica, mas é um ótimo exemplo de um coletivo de desenvolvedores muito bem organizados.

Um exemplo mais próximo do que estamos procurando é o CPAN. Esta sigla significa “Rede Compreensível de Arquivos do Perl” (em uma tradução livre), basicamente é uma enorme biblioteca de códigos mantida por desenvolvedores Perl onde vários códigos prontos podem ser encontrados. A ideia é simples, cada vez que um desenvolvedor cria um módulo (uma funcionalidade, script, biblioteca e etc…) em Perl, ele publica o código e a documentação do mesmo no CPAN e esta passa a ser publicamente disponível para toda a comunidade que pode contribuir ou mesmo assumir o desenvolvimento posterior do código. Uma pesquisa rápida por “bioinformatics” revelou vários módulos para processamento de dados genômicos, isso  porque na bioinformática este tipo de recurso já é conhecido e usado.

Além do CPAN a comunidade Perl possui outros recursos como o Perldoc que busca divulgar a documentação para fins de aprendizado.

No Brasil também temos outras comunidades bem menos especializadas e como exemplo cito o Viva o Linux. Basicamente o VOL é uma comunidade de usuários Linux onde eventualmente escrevo tutoriais sobre algumas soluções Open Source que uso para trabalhar. O que é interessante é que além de ser uma comunidade em português ela é diversificada. Existem repositórios para scripts de diversas linguagens (C, HTML, PHP, Python, Perl), fóruns, artigos, tutoriais, dicas, arquivos de configuração e etc. Ainda tem pouca coisa sobre ciência, mas já é um começo.

O R, agora tão usado em estatística, além de ser um programa Open Source também possui uma comunidade de desenvolvedores independentes nos moldes do CPAN (CRAN é o nome, por acaso). Em alguns artigos que li, os pesquisadores postaram seus algorítimos filogenéticos na comunidade e fizeram a devida citação no artigo. O R também é uma linguagem por si o que permite que códigos sejam desenvolvidos diretamente para ele de uma forma semelhante ao que é feito em programas comerciais como o MATLAB.

Em muitos casos os pesquisadores usam aplicativos de código fechado como o Statistica para processarem seus dados. Como a matemática por trás disto é bem conhecida, podemos deixar esse caso de lado. Em outros trabalhos códigos são escritos para pré-processamento, como em algorítimos de filogenética e em alguns testes estatísticos. Para estes casos uma boa pesquisa nos repositórios pode revelar que já existe o código para esta ou aquela tarefa. Isto, além de poupar tempo do pesquisador, divulga o código e o torna alvo de novas utilizações e melhoramentos.

Para quem está começando a programar ou está pensando em escrever alguma coisa no campo eu particularmente recomendo o Perl. Primeiro porque possui uma comunidade muito bem estabelecida e com projetos diversificados. Segundo porque é uma linguagem fácil de aprender (embora muitos critiquem, usuários do Python principalmente). Terceiro, o Perl possui muitas relações e afinidades com outras linguagens populares como C, Python e PHP o que o torna uma porta de entrada para níveis mais avançados da programação. Por fim, é uma das linguagens mais usadas da Bioinformática (junto com o Python).

Existe uma discussão interminável e infrutífera sobre qual seria a melhor linguagem: Perl ou Python. A maioria dos argumentos são em torno do desempenho, questões sintáticas e picuinhas irrelevantes.  Minha sincera opinião é a seguinte: se você é completamente analfabeto em programação, precisa muito de orientação a objetos, está com pressa ou já conheceu o Java/JavaScript use Python. Se você pretende aprender outras linguagens no longo prazo, já possui alguma experiência ou tempo para estudar e precisa muito de expressões regulares use o Perl.

Ainda estamos no começo desta questão, mas acredito que tudo irá se resolver com o tempo. Notem que muitos pesquisadores que usam aplicativos/scripts não fazem a menor ideia de como eles realmente funcionam, estão tão perdidos quanto aquele aluno de graduação que usa o Statisitca para fazer análise multivariada e mal sabe interpretar os resultados. Isso é um problema pois acredito que para o avanço da pesquisa multidisciplinar precisamos de mais pesquisadores-desenvolvedores que além de saberem programar estejam dispostos a investir algum tempo nisto de forma mais consistente. Conforme este grupo de profissionais crescer naturalmente haverá mais integração e formação de comunidades e soluções como as que apresentei acima serão mais comuns e mais conhecidas e a questão “do que fazer com o código” logo será esquecida (espero). O que é importante agora é planejar antes de iniciar um projeto que envolva programação. Na hora de escolher a linguagem, o sistema, versões e formatos temos que ter em mente questões como escalabilidade, compatibilidade e suporte, coisas que tiram o sono dos desenvolvedores e que nem passam pela cabeça de um pesquisador.