Práticas de programação em um ambiente científico? [fechadas]

91

fundo

No ano passado, fiz estágio em um grupo de pesquisa em física em uma universidade. Neste grupo, usamos principalmente o LabVIEW para escrever programas para controlar nossas configurações, fazer aquisição de dados e analisar nossos dados. Para os dois primeiros propósitos, isso funciona bem, mas para a análise de dados, é uma verdadeira dor. Além disso, todos eram autodidatas em sua maioria, então o código que era escrito era geralmente uma bagunça (não é de se admirar que todo PhD rapidamente decidisse reescrever tudo do zero). O controle de versão era desconhecido e impossível de configurar devido aos rígidos regulamentos de software e rede do departamento de TI.

Agora, as coisas realmente funcionaram surpreendentemente bem, mas como as pessoas nas ciências naturais fazem seu desenvolvimento de software?

Questões

Algumas questões concretas:

  • Quais linguagens / ambientes você usou para desenvolver software científico, especialmente análise de dados? Quais bibliotecas? (por exemplo, o que você usa para plotar?)
  • Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?
  • Você tinha algo como controle de versão e rastreamento de bugs?
  • Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Resumo das respostas até agora

As respostas (ou minha interpretação delas) até agora: (2008-10-11)

  • Idiomas / pacotes que parecem ser os mais usados:
  • O controle de versão é usado por quase todos os entrevistados; rastreamento de bugs e outros processos são muito menos comuns.
  • O curso de Carpintaria de Software é uma boa maneira de ensinar técnicas de programação e desenvolvimento para cientistas.
  • Como melhorar as coisas?
    • Não force as pessoas a seguir protocolos rígidos.
    • Configure você mesmo um ambiente e mostre os benefícios aos outros. Ajude-os a começar a trabalhar com controle de versão, rastreamento de bugs, etc. por conta própria.
    • Rever o código de outras pessoas pode ajudar, mas esteja ciente de que nem todos podem apreciar isso.
onnodb
fonte
2
leitura relacionada: nature.com/news/2010/101013/full/467775a.html
Tobias Kienzler

Respostas:

27

Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Eu costumava trabalhar para a Enthought , a principal patrocinadora corporativa da SciPy . Colaboramos com cientistas de empresas que contrataram a Enthought para o desenvolvimento de software personalizado. Python / SciPy parecia ser um ambiente confortável para os cientistas. É muito menos intimidante para começar do que C ++ ou Java, se você for um cientista sem experiência em software.

A distribuição Enthought Python vem com todas as bibliotecas de computação científica, incluindo análise, plotagem, visualização 3D, etc.

Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?

A Enthought oferece treinamento em SciPy e a comunidade SciPy é muito boa em responder a perguntas nas listas de discussão.

Você tinha algo como controle de versão, rastreamento de bugs?

Sim e sim (Subversion e Trac). Como estávamos trabalhando em colaboração com os cientistas (e normalmente remotamente deles), o controle de versão e o rastreamento de bugs eram essenciais. Demorou algum treinamento para que alguns cientistas internalizassem os benefícios do controle de versão.

Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Certifique-se de que eles estejam familiarizados com a corrente de ferramentas. É necessário um investimento inicial, mas fará com que eles se sintam menos inclinados a rejeitá-lo em favor de algo mais familiar (Excel). Quando as ferramentas falharem (e falharão), certifique-se de que eles tenham um lugar onde ir para obter ajuda - listas de e-mail, grupos de usuários, outros cientistas e desenvolvedores de software na organização. Quanto mais ajuda houver para fazê-los voltar a fazer física, melhor.

Brandon DuRette
fonte
21

O curso Carpintaria de Software é voltado especificamente para pessoas que fazem computação científica e tem como objetivo ensinar os fundamentos e lições de engenharia de software, e a melhor forma de aplicá-los em projetos.

Abrange tópicos como controle de versão, depuração, teste, script e vários outros problemas.

Eu ouvi cerca de 8 ou 9 palestras e acho que é altamente recomendado.

Edit: Os MP3s das palestras também estão disponíveis .

Kaybenleroll
fonte
16

Física nuclear / de partículas aqui.

  • O trabalho de programação principal costumava ser feito principalmente em Fortran usando CERNLIB (PAW, MINUIT, ...) e GEANT3 , recentemente foi feito principalmente em C ++ com ROOT e Geant4 . Existem várias outras bibliotecas e ferramentas em uso especializado, e o LabVIEW vê algum uso aqui e ali.
  • A aquisição de dados na minha área de negócios muitas vezes significa um trabalho de nível bastante baixo. Freqüentemente em C, às vezes até em montagem, mas isso está morrendo à medida que o hardware fica mais capaz. Por outro lado, muitas das placas agora são construídas com FPGA s que precisam de giro de porta ...
  • One-offs, interfaces gráficas, etc. usam quase tudo ( Tcl / Tk costumava ser grande, e tenho visto mais Perl / Tk e Python / Tk ultimamente) incluindo uma série de pacotes que existem principalmente dentro da comunidade de física de partículas .
  • Muitas pessoas que escrevem código têm pouco ou nenhum treinamento formal, e o processo é transmitido de forma muito desigual pela tradição oral, mas a maioria dos líderes de grupos de software leva o processo a sério e lê o quanto necessário para compensar suas deficiências nessa área.
  • O controle de versão das principais ferramentas é onipresente. Mas muitos programadores individuais o negligenciam em suas tarefas menores. Ferramentas formais de rastreamento de bugs são menos comuns, assim como compilações noturnas, testes de unidade e testes de regressão.

Para melhorar as coisas:

  1. Obtenha o lado bom dos líderes locais de software
  2. Implemente o processo que deseja usar em sua própria área e incentive aqueles que você permite que o usem também.
  3. Esperar. Os físicos são pessoas empíricas. Se ajudar, eles notarão (eventualmente!).

Mais uma sugestão para melhorar as coisas.

  1. Dedique algum tempo para ajudar qualquer pessoa com quem você trabalha diretamente. Revise seu código. Conte a eles sobre complexidade algorítmica / geração de código / DRY ou qualquer coisa básica que eles nunca aprenderam porque algum professor jogou um livro de Fortran neles uma vez e disse "faça funcionar". Doutrine-os nas questões do processo. Eles são pessoas inteligentes e aprenderão se você lhes der uma chance.
dmckee --- gatinho ex-moderador
fonte
11

Isso pode ser ligeiramente tangencial, mas esperançosamente relevante.

Eu trabalhava para a National Instruments, R&D, onde escrevia software para os kits de ferramentas de RF e comunicação da NI. Usamos o LabVIEW bastante, e aqui estão as práticas que seguimos:

  1. Fonte de controle. A NI usa o Perforce. Fizemos a coisa normal - ramificações dev / trunk, integração contínua, os trabalhos.
  2. Escrevemos suítes de testes automatizados.
  3. Algumas pessoas vieram com experiência em processamento de sinais e comunicação. Costumávamos ter revisões de código regulares e documentos de práticas recomendadas para garantir que seu código estava à altura.
  4. Apesar das revisões de código, houve algumas ocasiões em que "caras do software", como eu, tiveram que reescrever parte desse código para eficiência.
  5. Eu sei exatamente o que você quer dizer com pessoas teimosas! Tínhamos pessoas que costumavam pensar que apontar uma melhoria potencial de desempenho em seu código era um insulto pessoal direto! Nem é preciso dizer que isso exige uma boa gestão. Achei que a melhor maneira de lidar com essas pessoas é ir devagar, não pressionar muito por mudanças e, se necessário, estar preparado para fazer o trabalho sujo. [Exemplo: escreva um conjunto de testes para seu código].
Pramod
fonte
9

Não sou exatamente um cientista "natural" (estudo transporte), mas sou um acadêmico que escreve muito do meu próprio software para análise de dados. Tento escrever o máximo que posso em Python, mas às vezes sou forçado a usar outras linguagens quando estou trabalhando para estender ou personalizar uma ferramenta de software existente. Há muito pouco treinamento em programação na minha área. A maioria das pessoas é autodidata ou aprendeu suas habilidades de programação em aulas anteriores ou fora da disciplina.

Sou um grande fã de controle de versão. Usei o Vault em execução no meu servidor doméstico para todo o código da minha dissertação. No momento, estou tentando fazer com que o departamento configure um servidor Subversion, mas acho que serei o único a usá-lo, pelo menos no início. Eu brinquei um pouco com FogBugs, mas ao contrário do controle de versão, não acho que seja tão útil para uma equipe de um homem só.

Quanto a encorajar outros a usar o controle de versão e coisas do gênero, esse é realmente o problema que estou enfrentando agora. Estou planejando forçar meus alunos de graduação a usá-lo em projetos de pesquisa que estão fazendo para mim e incentivá-los a usá-lo em suas próprias pesquisas. Se eu ensinar uma aula envolvendo programação, provavelmente forçarei os alunos a usar o controle de versão lá também (classificando-os com base no que está no repositório). No que diz respeito aos meus colegas e seus alunos de pós-graduação, tudo o que posso realmente fazer é disponibilizar um servidor e confiar na persuasão gentil e em dar um bom exemplo. Francamente, neste ponto, acho mais importante fazer com que eles façam backups regulares do que colocá-los no controle de origem (algumas pessoas estão carregando a única cópia de seus dados de pesquisa em unidades flash USB).

Chris Upchurch
fonte
7

1.) As linguagens de script são populares hoje em dia para a maioria das coisas devido a um hardware melhor. Perl / Python / Lisp são predominantes para aplicativos leves (automação, computação leve); Vejo muito Perl no meu trabalho (EM computacional), pois gostamos de Unix / Linux. Para questões de desempenho, C / C ++ / Fortran são normalmente usados. Para a computação paralela, bem, normalmente paralelizamos manualmente as execuções em EM em vez de ter um programa implicitamente (isto é, dividir as tarefas por ângulo de visão ao calcular seções transversais de radar).

2.) Nós meio que colocamos as pessoas na mistura aqui. Grande parte do código que temos é muito confuso, mas os cientistas costumam ser um bando disperso que não se importa com esse tipo de coisa. Não é o ideal, mas temos coisas para entregar e estamos com falta de pessoal. Estamos melhorando lentamente.

3.) Usamos SVN; no entanto, não temos software de rastreamento de bugs. O melhor que pode ser para nós é um arquivo txt que informa onde os bugs estão.

4.) Minha sugestão para implementar as melhores práticas para cientistas: faça isso devagar . Como cientistas, normalmente não enviamos produtos. Ninguém na ciência se destaca por ter um código limpo e sustentável . Eles obtêm reconhecimento dos resultados desse código, normalmente. Eles precisam ver a justificativa para gastar tempo aprendendo práticas de software. Lentamente, introduza novos conceitos e tente fazer com que os sigam; eles são cientistas, então depois que suas próprias evidências empíricas confirmarem a utilidade de coisas como controle de versão, eles começarão a usá-lo o tempo todo!

temp2290
fonte
5

Sou um físico que trabalha na área de física da matéria condensada, construindo modelos clássicos e quânticos.

Línguas:

  • C ++ - muito versátil: pode ser usado para qualquer coisa, boa velocidade, mas pode ser um pouco inconveniente quando se trata de MPI
  • Octave - bom para alguns cálculos suplementares, muito conveniente e produtivo

Bibliotecas:

  • Armadillo / Blitz ++ - abstrações rápidas de matriz / matriz / cubo para C ++
  • Eigen / Armadillo - álgebra linear
  • GSL - para usar com C
  • LAPACK / BLAS / ATLAS - extremamente grande e rápido, mas menos conveniente (e escrito em FORTRAN)

Gráficos:

  • GNUPlot - tem uma saída muito limpa e organizada, mas às vezes não é tão produtivo
  • Origem - muito conveniente para plotagem

Ferramentas de desenvolvimento:

  • VimPlug-ins + - funciona muito bem para mim
  • GDB - uma ótima ferramenta de depuração ao trabalhar com C / C ++
  • Code :: Blocks - Usei por um tempo e achei bastante confortável, mas o Vim ainda é melhor na minha opinião.
romanos
fonte
Se o seu c ++ está rodando mais devagar do que o seu c, você está usando errado. Claro, isso é fácil de fazer, mas isso é outra questão. :: trabalhando com c ++ por cerca de 7 anos agora, e ainda aprendendo coisas novas o tempo todo ::
dmckee --- ex-moderador gatinho
Eu realmente sou um grande fã de C ++, mas é difícil ver como poderia ser "muito mais lento" do que C ou Fortran. A menos que você inclua variantes C para HPC, como UPC e C para CUDA.
Suugaku 01 de
4

Eu trabalho como físico em uma universidade do Reino Unido.

Talvez eu deva enfatizar que diferentes áreas de pesquisa têm diferentes ênfases na programação. Físicos de partículas (como dmckee) fazem modelagem computacional quase exclusivamente e podem colaborar em grandes projetos de software, enquanto pessoas em campos como o meu (matéria condensada) escrevem código com pouca frequência. Suspeito que a maioria dos cientistas se enquadra no último campo. Eu diria que habilidades de codificação são geralmente vistas como úteis em física, mas não essenciais, assim como habilidades de física / matemática são vistas como úteis para programadores, mas não essenciais. Com isso em mente...

  • Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Normalmente, a análise e plotagem de dados são feitas usando pacotes de análise de dados genéricos, como IGOR Pro , ORIGIN , Kaleidegraph , que podem ser considerados 'Excel plus'. Esses pacotes geralmente têm uma linguagem de script que pode ser usada para automatizar. Uma análise mais especializada pode ter um utilitário dedicado para o trabalho que geralmente terá sido escrito há muito tempo, ninguém tem a fonte e é bastante problemático. Alguns tipos mais técnicos podem usar as linguagens que foram mencionadas (Python, R, MatLab com Gnuplot para plotagem).

O software de controle é comumente feito no LabVIEW, embora usemos Delphi, o que é um tanto incomum.

  • Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?

Já participei de seminários sobre computação em grade, visualização 3D, reforço de aprendizagem etc. ministrados pelas duas universidades em que estive. Na graduação, aprendemos VBA para Excel e MatLab, mas C / MatLab / LabVIEW é mais comum.

  • Você tinha algo como controle de versão, rastreamento de bugs?

Não, embora as pessoas tenham configurações de desenvolvimento pessoal. Nossa base de código está em uma pasta compartilhada em um 'servidor' que é mantida atualizada com uma ferramenta de sincronização.

  • Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Um passo de cada vez! Estou tentando substituir a pasta compartilhada por algo um pouco mais sólido, talvez encontrar um cliente SVN que imita o comportamento das ferramentas de sincronização atuais ajude.

Eu diria que, no geral, para a maioria dos projetos de ciências naturais, o tempo é geralmente mais bem gasto em pesquisas!

Brendan
fonte
Obrigado por compartilhar suas idéias! Eu concordo que "o tempo geralmente é mais bem gasto em pesquisa", mas vendo quanto tempo é freqüentemente perdido devido à falta de coisas como controle de versão e treinamento básico em programação, eu diria que os cientistas subestimam essa questão.
onnodb,
4

Ex-físico acadêmico e agora físico industrial do Reino Unido aqui:

Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Eu uso principalmente o MATLAB hoje em dia (fácil acesso às funções de visualização e matemática). Eu costumava usar muito Fortran e IDL . Usei C (mas sou mais leitor do que escritor de C), macros do Excel (feio e confuso). Atualmente, estou precisando ser capaz de ler Java e C ++ (mas não consigo programar neles) e também hackeei Python. Para meu próprio entretenimento, agora estou fazendo alguma programação em C # (principalmente para obter portabilidade / baixo custo / interfaces bonitas). Posso escrever Fortran com praticamente qualquer linguagem que me seja apresentada ;-)

Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?

A maioria (todos?) Do curso de graduação em física terá um pequeno curso de programação, geralmente em C, Fortran ou MATLAB, mas é o básico real. Eu realmente gostaria de ter algum treinamento em engenharia de software em algum ponto (controle de revisão / teste / projeto de sistemas de média escala)

Você tinha algo como controle de versão, rastreamento de bugs?

Comecei a usar Subversion / TortoiseSVN relativamente recentemente. Grupos com os quais trabalhei no passado usaram controle de revisão. Não conheço nenhum grupo acadêmico que use software formal de rastreamento de bugs. Ainda não uso nenhum tipo de teste sistemático.

Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Eu tentaria introduzir algumas idéias de engenharia de software em nível de graduação e então reforçá-las com a prática em nível de pós-graduação, também fornecer dicas para recursos como o curso de Carpintaria de Software mencionado acima.

Eu esperaria que uma fração significativa dos físicos acadêmicos estaria escrevendo software (não necessariamente todos) e eles precisam urgentemente de pelo menos uma introdução às idéias em engenharia de software.

Ian Hopkinson
fonte
4

Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Python, NumPy e pylab (plotagem).

Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?

Não, mas eu estava trabalhando em um laboratório de pesquisa multimídia, então quase todo mundo tinha formação em ciência da computação.

Você tinha algo como controle de versão, rastreamento de bugs?

Sim, Subversion para controle de versão, Trac para rastreamento de bugs e wiki. Você pode obter hospedagem gratuita de controle de versão / bug tracker em http://www.assembla.com/ se o TOS deles se adequar ao seu projeto.

Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!).

Certifique-se de que a infraestrutura esteja configurada e bem mantida e tente vender os benefícios do controle de origem.

Aaron Maenpaa
fonte
3

Sou estatístico em uma universidade no Reino Unido. Geralmente as pessoas aqui usam R para análise de dados, é bastante fácil aprender se você conhece C / Perl. Seu verdadeiro poder está na maneira como você pode importar e modificar dados interativamente. É muito fácil pegar vários, digamos, arquivos CSV (ou Excel) e mesclá-los, criar novas colunas com base em outras e depois jogá-las em um GLM, GAM ou algum outro modelo. Plotar também é trivial e não requer conhecimento de uma linguagem totalmente nova (como PGPLOT ou GNUPLOT). Claro, você também tem a vantagem de ter um monte de recursos embutidos (desde coisas simples como média, desvio padrão, etc. o caminho para redes neurais, splines e plotagem GL.)

Dito isso, há alguns problemas. Com conjuntos de dados muito grandes, R pode se tornar muito lento (só vi isso com conjuntos de dados> 50.000 x 30) e, como é interpretado, você não obtém a vantagem do Fortran / C nesse aspecto. Mas, você pode (muito facilmente) fazer com que R chame as bibliotecas compartilhadas C e Fortran (de algo como netlib ou aquelas que você mesmo escreveu). Portanto, um fluxo de trabalho normal seria:

  • Descubra o que fazer.
  • Faça um protótipo do código em R.
  • Execute algumas análises preliminares.
  • Reescreva o código lento em C ou Fortran e chame-o de R.

O que funciona muito bem para mim.

Eu sou uma das únicas pessoas em meu departamento (de> 100 pessoas) usando controle de versão (no meu caso usando git com githuib.com). Isso é bastante preocupante, mas eles simplesmente não parecem estar interessados ​​em tentar e se contentam em distribuir arquivos zip (eca).

Minha sugestão seria continuar usando o LabView para a aquisição (e talvez tentando fazer seus colegas de trabalho concordarem sobre um conjunto de ferramentas para aquisição e disponibilização para todos) e, em seguida, passar a exportar os dados para um CSV (ou similar) e fazendo a análise em R. Realmente, há muito pouco sentido em reinventar a roda a esse respeito.

David Lawrence Miller
fonte
2

Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Meu departamento de física de graduação ministrava aulas de LabVIEW e o usava extensivamente em seus projetos de pesquisa.

A outra alternativa é o MATLAB , no qual não tenho experiência. Existem campos para ambos os produtos; cada um tem suas próprias vantagens / desvantagens. Dependendo do tipo de problema que você precisa resolver, um pacote pode ser mais preferível do que o outro.

Com relação à análise de dados, você pode usar qualquer tipo de processador de números que desejar. Idealmente, você pode fazer os cálculos difíceis na linguagem X e formatar a saída para representar bem no Excel, Mathcad , Mathematica ou qualquer que seja o sistema de plotagem do tipo du jour. Não espere padronização aqui.

Você tinha algo como controle de versão, rastreamento de bugs?

Olhando para trás, não o fizemos, e teria sido mais fácil para todos nós se o fizéssemos. Nada como quebrar tudo e lutar por horas para consertar!

Definitivamente, use o controle de origem para qualquer código comum. Incentive as pessoas a escrever seu código de uma maneira que possa se tornar mais genérica. Na verdade, trata-se apenas de práticas recomendadas de codificação. Na verdade, você deve fazer com que eles ensinem (ou façam) aulas de ciência da computação para que possam aprender o básico.

Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Há uma divisão clara entre aquisição de dados (DAQ) e análise de dados. Ou seja, é possível padronizar no DAQ e então permitir que os cientistas brinquem com os dados no programa de sua escolha.

Arc the Crazy
fonte
2

Outra boa opção é o Scilab . Possui módulos gráficos à la LabVIEW , possui linguagem de programação própria e você também pode embutir código Fortran e C, por exemplo. Está sendo usado nos setores público e privado, incluindo grandes empresas industriais. E é grátis.

Sobre versionamento, alguns preferem Mercurial , pois dá mais liberdade de gerenciamento e definição de repositórios. Não tenho experiência com isso, no entanto.

Para plotagem, uso Matplotlib . Em breve terei que fazer animações e tenho visto bons resultados com o MEncoder . Aqui está um exemplo incluindo uma faixa de áudio.

Finalmente, sugiro ir modular, isto é, tentar manter as partes principais do código em arquivos diferentes, para que a revisão, compreensão, manutenção e melhoria do código sejam mais fáceis. Escrevi, por exemplo, um módulo Python para teste de integridade de arquivo, outro para sequências de processamento de imagem etc.

Você também deve considerar o desenvolvimento com o uso de um depurador que permite verificar o conteúdo da variável em pontos de interrupção configuráveis ​​no código, em vez de usar linhas de impressão. Eu usei o Eclipse para Python e desenvolvimento em Fortran (embora eu tenha um erro falso ao compilar um programa curto em Fortran com ele, mas pode ter sido uma configuração ruim) e estou começando a usar o IDE Eric para Python. Ele permite que você depure, gerencie versões com SVN , tem um console embutido, pode fazer refatoração com o Bicycle Repair Man (pode usar outro também), você tem Unittest, etc. Uma alternativa mais leve para Python é o IDLE , incluído com Python desde a versão 2.3.

Como algumas dicas, também sugiro:

  • Não usando variáveis ​​de um único caractere. Quando você deseja pesquisar aparências, obterá resultados em todos os lugares. Alguns argumentam que um IDE decente torna isso mais fácil, mas você dependerá de ter acesso permanente ao IDE. Mesmo usar ii, jj e kk podem ser suficientes, embora esta escolha dependa do seu idioma. (Vogais duplas seriam menos úteis se comentários de código fossem feitos em estoniano, por exemplo).

  • Comentando o código desde o início.

  • Para aplicativos críticos, às vezes é melhor contar com versões mais antigas de linguagem / compilador (versões principais), mais estáveis ​​e com melhor depuração. Claro que você pode ter um código mais otimizado em versões posteriores, bugs corrigidos, etc, mas estou falando sobre o uso de Fortran 95 em vez de 2003, Python 2.5.4 em vez de 3.0 ou assim. (Especialmente quando uma nova versão quebra a compatibilidade com versões anteriores.) Muitas melhorias geralmente introduzem muitos bugs. Ainda assim, isso dependerá de casos de aplicação específicos! Observe que esta é uma escolha pessoal, muitas pessoas podem argumentar contra isso.

  • Use backup redundante e automatizado! (Com controle de versão).

David
fonte
2

Definitivamente, use o Subversion para manter cópias atuais, de trabalho em andamento e estáveis ​​de instantâneos do código-fonte. Isso inclui C ++, Java etc. para ferramentas de software desenvolvidas internamente e scripts rápidos para processamento único.

Com a forte inclinação para a ciência e a engenharia aplicada em direção à metodologia de desenvolvimento do "cowboy solitário", a prática usual de organizar o repositório em trunk, tag e tudo o mais - não se preocupe! Os cientistas e seus técnicos de laboratório gostam de girar botões, mexer eletrodos e perseguir vazamentos de vácuo. É bastante trabalhoso fazer com que todos concordem, digamos Python / NumPy ou sigam alguma convenção de nomenclatura; esqueça de tentar fazê-los seguir práticas e convenções misteriosas de desenvolvedores de software.

DarenW
fonte
2

Para gerenciamento de código-fonte, sistemas centralizados como Subversion são superiores para uso científico devido ao ponto único claro da verdade (SPOT). O registro de alterações e a capacidade de recuperar versões de qualquer arquivo, sem precisar procurar onde encontrar algo, tem enormes vantagens na manutenção de registros. Ferramentas como Git e Monotone : oh meu Deus, o caos que posso imaginar que se seguiria! Ter registros claros de qual versão dos scripts de hack-job foram usados ​​enquanto brincava com o novo sensor quando aquele bóson de Higgs passou ou aquela supernova explodiu, levará à felicidade.

DarenW
fonte
Você já tentou usar um sistema de controle de versão distribuído?
Andrew Grimm
1
Quase todos os sistemas distribuídos tornam isso tão fácil quanto os centralizados. Você apenas registra um ID de confirmação (nos termos do Git) em vez de um número de revisão (como no SVN).
Phil Miller
2

Quais linguagens / ambientes você usou para desenvolver software científico, esp. análise de dados? Quais bibliotecas? (Por exemplo, o que você usa para plotagem?)

Idiomas que usei para assuntos numéricos e relacionados a ciências:

  • C (desenvolvimento lento, muita depuração, quase impossível de escrever código reutilizável)
  • C ++ (e aprendi a odiá-lo - o desenvolvimento não é tão lento quanto o C, mas pode ser uma dor. Os modelos e as classes eram legais no início, mas depois de um tempo percebi que estava lutando contra eles o tempo todo e encontrando soluções para problemas de design de linguagem
  • Common Lisp, que era OK, mas não amplamente usado para computação Sci. Não é fácil de integrar com C (se comparado a outras linguagens), mas funciona
  • Esquema. Este se tornou minha escolha pessoal.

Meu editor é o Emacs, embora eu use o vim para coisas rápidas como editar arquivos de configuração.

Para plotagem, geralmente gero um arquivo de texto e o coloco no gnuplot.

Para análise de dados, geralmente gero um arquivo de texto e uso GNU R.

Vejo muitas pessoas aqui usando FORTRAN (principalmente 77, mas cerca de 90), muito Java e um pouco de Python. Eu não gosto deles, então não os uso.

Houve algum treinamento para pessoas sem qualquer experiência significativa em programação?

Acho que isso não se aplica a mim, já que me formei em Ciência da Computação - mas onde trabalho não há formação formal, mas as pessoas (Engenheiros, Físicos, Matemáticos) ajudam uns aos outros.

Você tinha algo como controle de versão, rastreamento de bugs?

O controle de versão é absolutamente importante! Eu mantenho meu código e dados em três máquinas diferentes, em dois lados diferentes do mundo - em repositórios Git. Eu os sincronizo o tempo todo (então tenho controle de versão e backups!) Não faço controle de bug, embora possa começar a fazer isso. Mas meus colegas não BTS ou VCS.

Como você tentaria criar um ambiente decente para a programação, sem atrapalhar os cientistas individualmente (especialmente os físicos são pessoas teimosas!)

Primeiro, eu daria a eles o máximo de liberdade possível. (Na universidade onde trabalho, posso escolher entre instalar o Ubuntu ou o Windows ou o meu próprio sistema operacional - escolhi instalar o meu próprio. Não tenho suporte deles e sou responsável por tudo o que acontece com minhas máquinas, incluindo questões de segurança, mas faço o que quero com a máquina).

Em segundo lugar, veria a que eles estão acostumados e faria funcionar (precisa do FORTRAN? Vamos configurar. Precisa do C ++? Sem problemas. Mathematica? OK, vamos comprar uma licença). Em seguida, veja quantos deles gostariam de aprender "ferramentas adicionais" para ajudá-los a serem mais produtivos (não diga ferramentas "diferentes". Diga "adicionais", para que não pareça que alguém "perderá" ou "deixará vá "ou qualquer outra coisa). Comece com os editores, veja se há grupos que gostariam de usar o VCS para sincronizar seu trabalho (ei, você pode ficar em casa e enviar seu código pelo SVN ou GIT - não seria ótimo?) E assim por diante. Não imponha - mostre exemplos de como essas ferramentas são legais. Faça análises de dados usando R e mostre como foi fácil. Mostre bons gráficos e explique como você os criou (mas comece com exemplos simples,

Jay
fonte
2

Eu sugeriria o F # como um candidato potencial para realizar manipulações relacionadas à ciência, dados seus fortes laços semânticos com construções matemáticas.

Além disso, seu suporte para unidades de medida, conforme descrito aqui, faz muito sentido para garantir a tradução adequada entre o modelo matemático e o código-fonte de implementação.

Norman H
fonte
1

Em primeiro lugar, eu definitivamente escolheria uma linguagem de script para evitar ter que explicar muitas coisas extras (por exemplo, gerenciamento de memória manual é - principalmente - ok se você estiver escrevendo coisas sensíveis ao desempenho de baixo nível, mas para alguém que apenas quer usar um computador como uma calculadora científica atualizada, é definitivamente um exagero). Além disso, verifique se há algo específico para o seu domínio (como R para estatísticas). Tem a vantagem de já trabalhar com os conceitos com os quais os utilizadores estão habituados e de dispor de código especializado para situações específicas (por exemplo, cálculo de desvios-padrão, aplicação de testes estatísticos, etc. no caso de R).

Se você deseja usar uma linguagem de script mais genérica, eu escolheria Python. Duas coisas que tem a seu favor são:

  • O shell interativo onde você pode experimentar
  • Sua sintaxe clara (embora às vezes longa)

Como uma vantagem adicional, ele possui bibliotecas para a maioria das coisas que você gostaria de fazer com ele.

Pantera Cinzenta
fonte