Programação
-
Luiz Carlos Estraviz Rodriguez
(em construção)
-
Vídeo - Palestras
Parte I:
Parte II:
Síntese do conteúdo apresentado e
sugestão de leitura complementar(partes deste bloco reproduzem material disponibilizado pelo Earth Lab da Universidade do Colorado, EUA)
O que é ciência reproduzível aberta, e qual a importância para a automação, robótica e desenvolvimento tecnológico?
A ciência aberta envolve a disponibilização de métodos, dados e resultados para todos. A importância para a automação, robótica e desenvolvimento tecnológico em geral, é que os avanços dependem e podem ser acelerados pelo livre acesso aos resultados científicos, e pelo livre acesso aos procedimentos usados por cientistas e pesquisadores para obter esses resultados. A ciência aberta precisa ser, segundo Gezelter (2009) :
- Transparente
- na coleta de dados,
- nos métodos de processamento e análise e
- na derivação de resultados
- Pública em termos de dados e métodos de processamento associados
- Irrestrita na comunicação de resultados
- Apoiada frequentemente pela colaboração
A ciência reproduzível é aquela que permite a qualquer pessoa (inclusive o próprio autor)
- compreender as etapas da análise
- replicar as etapas da análise
- reaplicar as etapas da análise aos mesmos dados ou até a dados novos
Resultados científicos reproduzíveis abertos e fluxos de trabalho facilmente compartilháveis permitem a colaboração com outras pessoas, bem como a publicação aberta de dados e fluxos de trabalho que efetivamente contribuam para um maior conhecimento científico. Na prática, segundo o OpenScience project (que se dedica à produção de software científico de código aberto) fazer ciência aberta significa produzir código aberto, manter os dados abertos, disponibilizar acesso aberto ao código e aos dados, e disponibilizar blocos de notas abertos. Dessa forma, promove-se a transparência
- da metodologia experimental,
- das observações e
- da coleta de dados,
ao mesmo tempo que se oferece
- disponibilidade pública,
- reutilização de dados científicos,
- acessibilidade pública,
- transparência na comunicação científica, e
- uso de ferramentas web para colaboração científica.
Na área de automação e robótica, a pesquisa envolve frequentemente o desenvolvimento de simulações e experimentos numéricos. Portanto, conceder acesso ao código-fonte equivale à publicação detalhada da metodologia. Sem acesso ao código fonte dos programas usados, teríamos que confiar nas habilidades de programação de outras pessoas para realizar os nossos experimentos numéricos. Quando os códigos de simulação ou arquivos de parâmetro estão ocultos, faltará rigor na experimentação numérica e o exercício não poderá passar pelo crivo da ciência verossímil. É necessário dar aos céticos a capacidade de repetir o seu experimento. A ciência tem que ser verificável na prática e por princípio.
A rotina científica, portanto, precisa ser revisada e transitar de trabalhar, terminar e publicar para trabalhar, terminar, publicar e liberar. Ou seja, a pesquisa não deve ser considerada completa enquanto:
- os dados e metadados não forem colocados na web para outras pessoas usarem,
- o código não for adequadamente documentado e liberado, e
- os comentários não começarem a surgir citando o trabalho.
Justificativa
A ciência reproduzível aberta se justifica pelo que vem sendo chamado de crise da reprodutibilidade da ciência.
O que torna a
ciência verdadeira?Em uma das edições do programa NOVA, o episódio What Makes Science True? (O que torna a ciência verdadeira?) exibido no dia 01/Set/2017, afirma que a ciência pode estar passando pelo que alguns chamam de crise de reprodutibilidade. NOVA é um dos programas de divulgação da ciência mais assistidos na televisão americana, e se propõe a produzir programação científica aprofundada na forma de documentários e minisséries. NOVA é produzido pela WGBH em Boston (EUA) desde 1974 e é semanalmente e transmitido pela rede PBS de televisão pública norte-americana.
O episódio exibido em 2017 apresenta a questão: o que torna a ciência confiável? E a resposta é: a ciência é confiável quando a reprodução dos resultados de um experimento é possível. A reprodução dos resultados de um experimento é uma das marcas de um achado científico válido. Entretanto, parece que muitas vezes, afirmações científicas têm sido feitas sem a possibilidade de replicar resultados, levando inclusive a ensaios clínicos falhos. O citado vídeo examina a crise de reprodutibilidade e relata o resultado de cinco experimentos projetados para testar a reprodutibilidade de estudos da biologia do câncer.
As virtudes do uso de software aberto, como estratégia para tornar a ciência mais confiável, também são mencionadas na palestra oferecida por Joseph J. Allaire (criador da interface RStudio para R). Um dos pontos mais enfatizados nessa palestra é a reprodutibilidade, garantida pelo fato de que open software é mais resiliente, participatório e acessível.
Segundo J.J. Allaire,
vantagens do uso de software aberto
para a Ciência AbertaVantagens
Existem fortes razões para tornar a ciência aberta a norma aceita. A principal razão é a crescente sensação de que a ciência atingiu uma crise de reprodutibilidade, onde vários cientistas admitem que suas próprias organizações têm tido dificuldade em reproduzir os resultados de publicações anteriores. A crise de reprodutibilidade é atribuída a vários fatores: ênfase exagerada na novidade como um requisito para publicação, análises estatísticas deficientes, perda de experiência laboratorial conforme se graduam os alunos e pós doutorandos, atualizações de versões de software e dados, e a inadequação das seções de metodologia em descrever todas as etapas necessárias para realização do trabalho.
Um dos fundamentos da ciência é que os cientistas sejam capazes de, independentemente, submeter teorias e modelos a testes semelhantes em locais diferentes, em equipamentos diferentes, em momentos diferentes e obter respostas semelhantes. A razão pela qual os artigos científicos precisam ser detalhados nas seções de metodologia é para permitir que outros pesquisadores verifiquem os resultados experimentais por si próprios. Como grande parte da ciência moderna depende de experimentos numéricos e simulações de computador, devemos também prestar muita atenção à reprodutibilidade na modelagem e da simulação. Experimentos numéricos em modelos simples e pequenos conjuntos de dados podem ser reproduzíveis tanto em princípio quanto na prática com pouco esforço por parte dos pesquisadores. No entanto, conforme os experimentos numéricos se tornam mais complexos e os conjuntos de dados tornam-se maiores, os cálculos que são reproduzíveis em princípio não são mais reproduzíveis na prática sem acesso ao código, aos dados e aos meta dados que descrevem como os dados foram organizados.
As vantagens do código aberto estão na redução de custos gerada pela possibilidade de reutilização de componentes de software desenvolvidos de forma comunitária. Ser capaz de acessar o código-fonte que gerou os resultados em um artigo permite que os cientistas que estão aprendendo o tópico “enxerguem os bastidores” e recriem esses cálculos sem ter que reinventar cada parte de um código complexo. Esta é uma enorme economia de eficiência. Ter o código-fonte disponível publicamente também traz oportunidades de colaboração inesperadas. Muitos grupos que lançaram códigos científicos de código aberto relatam histórias semelhantes de pesquisadores em todo o mundo enviando relatórios de bugs, correções de bugs, aprimoramentos de código ou documentação para um projeto simplesmente porque estava disponível para eles usarem e modificarem. Colaborações inesperadas às vezes podem render resultados científicos reais.
Como o código-fonte aberto se tornou comum no setor de tecnologia, as ferramentas para disponibilizar código se tornaram mais populares. Por exemplo, são dois os serviços mais populares de compartilhamento de código: GitHub e GitLab (para entender as diferença entre os dois, clique aqui).
Esses serviços, além de fornecerem controle de revisão, mantém um histórico de cada modificação efetuada no código. Isso aumenta a reprodutibilidade, fornecendo informações exatas da versão usada para gerar uma publicação específica. O código escrito para ser lançado publicamente geralmente acaba sendo mais limpo (e menos cheio de erros) do que o script rápido que nunca verá a luz do dia. Uma vez concluída uma etapa, fica registrado um repositório de conhecimento para quem assumir a tarefa em seguida. O código-fonte aberto publicamente acessível, portanto, fornece um repositório contínuo de conhecimento que o código fechado não oferece.
Uma das recomendações do padrão de pesquisa reproduzível é que os componentes do código usado durante a pesquisa seja liberado sob uma licença de código aberto, enquanto os dados (que são cobertos por um conjunto diferente de leis de direitos autorais) sejam liberados sob uma licença CC0. Licenças de código aberto são licenças que estão em conformidade com a Definição de código aberto. Elas permitem que o software seja usado, modificado e compartilhado livremente. Existem diferentes categorias de código aberto. As mais comuns são GNU General Public License e MIT License.
Às estratégias de licenciamento de código aberto se somam as iniciativas de compartilhamento de conhecimento e criatividade. O Creative Commons (CC) é uma organização mundial sem fins lucrativos que visa promover o compartilhamento do conhecimento e da criatividade como forma de transformação social. O Creative Commons se notabiliza pelas suas licenças de direito autoral, que ajudam: 1) aqueles que buscam incentivar a reutilização de suas obras, oferecendo-as para uso público sob condições generosas e padronizadas; 2) aqueles que querem fazer uso criativo de obras alheias; e 3) aqueles que desejam se beneficiar dessa simbiose. O CC possui afiliados ao redor do mundo, inclusive no Brasil, que ajudam a garantir que as licenças funcionem internacionalmente e a aumentar a conscientização de compartilhamento.
Ferramentas para fluxos de trabalho que permitem a ciência reproduzível aberta
A ciência aberta envolve a disponibilização de métodos, dados e resultados científicos para todos. A ciência aberta usa preferencialmente computadores com acesso a consagrados programas de domínio público como o Shell (Bash) para gestão de arquivos, git/GitHub para versionamento, Python e R para desenvolvimento de código de programação e Jupyter ou Google Colab como plataforma web de computação interativa.
Como tornar o seu trabalho mais aberto e reproduzível?
Estas são algumas sugestões:
Uso de linguagens de programação aberta
A programação automatiza tarefas, o que facilita que seus fluxos de trabalho sejam executados e replicados rapidamente. Evite o uso de interfaces gráficas que requerem etapas manuais interativas para preparar os seus fluxos. O uso de linguagens de programação de código aberto como Python ou R permite que qualquer pessoa tenha acesso aos seus métodos. Caso contrário, o uso de ferramenta que exija licença exclui da reprodução total do seu fluxo de trabalho as pessoas que não tenham recursos para comprá-la.
Use nomes expressivos para arquivos e diretórios
Nomes expressivos de arquivos e diretórios permitem que sejam rapidamente encontrados. Isso promove a reprodutibilidade, facilita a que outras pessoas compreendam o conteúdo dos seus arquivos e dos seus fluxos de trabalho. Certifique-se de organizar os arquivos relacionados em pastas que podem ajudá-lo a categorizar e encontrar facilmente o que você precisa (por exemplo, dados brutos, scripts, resultados).
Use dados FAIR
Certifique-se de que os dados usados em seu projeto estejam de acordo com os princípios FAIR: localizáveis, acessíveis, interoperáveis e reutilizáveis (findable, accessible, interoperable, e re-usable). O acrônimo, formado por essas quatro qualidades, quando expressas em inglês, forma a palavra "justo(a)" nessa mesma língua. Forneça documentação suficiente sobre como acessá-los e o que eles contêm. Os princípios FAIR também vão além dos dados brutos para se aplicar às ferramentas e fluxos de trabalho usados para processar e criar novos dados. Os princípios FAIR aumentam a reprodutibilidade dos projetos, apoiando a reutilização e expansão dos seus dados e fluxos de trabalho, o que contribui para uma maior descoberta na comunidade científica.
Proteja seus dados brutos
Não modifique (ou substitua) os dados brutos. Mantenha as saídas de dados separadas das entradas, para que você possa facilmente executar novamente o seu fluxo de trabalho conforme necessário. Isso é feito facilmente se você organizar seus dados em diretórios que separam os dados brutos de seus resultados, etc.
Use versionamento e compartilhe seu código
O versionamento permite que você gerencie e rastreie as alterações em seus arquivos (e até mesmo desfaze-las!). Se você o seu código puder ser compartilhado abertamente, implemente o controle de versão e, em seguida, publique o seu código e fluxos de trabalho na nuvem. Existem muitas ferramentas gratuitas para fazer isso, incluindo Git/GitHub.
Documente os seus fluxos de trabalho
A documentação pode significar muitas coisas diferentes. Pode ser tão básico quanto incluir (cuidadosamente elaborados e diretos) comentários em todo o código para explicar as etapas específicas do seu fluxo de trabalho. A documentação também pode significar o uso de ferramentas como Jupyter Notebooks, Google Colab ou arquivos RMarkdown para incluir uma narrativa de texto no formato Markdown intercalada com o código para fornecer uma explicação de alto nível de um fluxo de trabalho. A documentação também pode incluir docstrings, que fornecem documentação padronizada de funções Python, ou mesmo arquivos README que descrevem o quadro geral de seu fluxo de trabalho, estrutura de diretório, dados, processamento e saídas.
Desenhe fluxos de trabalho recriáveis
Crie fluxos de trabalho que possam ser facilmente recriados e reproduzidos por outras pessoas,
- listando todos os pacotes e dependências necessárias para executar um fluxo de trabalho na parte superior do arquivo de código (por exemplo, Jupyter Notebook ou arquivos R Markdown);
- organizando o seu código em seções, ou blocos de código, de código relacionado e incluir comentários para explicar o código;
- criando ambientes reutilizáveis para fluxos de trabalho Python ou R usando ferramentas como docker containers, ambientes conda e cadernos interativos binder.
Como a FAPESP enxerga a ciência reproduzível aberta?
A FAPESP vem trabalhando há anos no sentido de promover a ciência aberta (Open Science), e disponibiliza no seu site um texto sobre o assunto.
Ciência aberta, para a FAPESP, é o conjunto de políticas e ações de disseminação do conhecimento, em geral por meios digitais, para que todos os resultados de uma pesquisa sejam acessíveis a todos, passíveis de reutilização e de reprodução. Tais resultados incluem, dentre outros, publicações, dados, metodologias e processos computacionais usados no desenvolvimento da pesquisa. O objetivo da Ciência Aberta é promover a inovação e o avanço do conhecimento por meio de colaboração entre cientistas e reuso dos resultados, com consequente aceleração do progresso científico, tecnológico, econômico, social e cultural.
Segundo a FAPESP, a disseminação pode ocorrer via repositórios digitais públicos, de conjuntos de arquivos que contenham os três elementos básicos da ciência aberta:
- Acesso Aberto (publicações)
- Dados Abertos (incluindo dados brutos, modelos, especificações e documentação) e
- Processos Computacionais Abertos (como software e algoritmos) (ver Open Science by Design, da Academia Americana de Ciências).
A ciência aberta representa, assim, para a FAPESP, uma mudança na forma de desenvolver pesquisas, com forte ênfase na disseminação do conhecimento, usando as facilidades de comunicação trazidas pelas tecnologias digitais. Para além das práticas usuais de publicar resultados da pesquisa em artigos científicos, busca-se também, e ativamente, o compartilhamento e uso de todo o conhecimento disponível desde os estágios iniciais de uma pesquisa.
Bibliografia e material complementar
Creative Commons
Figshare
Github
Gitlab
Impactstory
Open Science by Design - Realizing a Vision for 21st Century Research
Open Source Initiative
Sourceforge - Transparente
-