Há uma citação de uma palestra do PyCon 2011 que diz:
Pelo menos em nossa loja (Argonne National Laboratory), temos três idiomas aceitos para computação científica. Nesta ordem, eles são C / C ++, Fortran em todos os seus dialetos e Python. Você notará a absoluta e total falta de Ruby, Perl, Java.
Foi no contexto mais geral da computação de alto desempenho. A citação concedida é apenas de uma loja, mas outra pergunta sobre idiomas para o HPC também lista o Python como um a aprender (e não o Ruby).
Agora, eu posso entender o C / C ++ e o Fortran sendo usados nesse espaço de problemas (e o Perl / Java não sendo usado). Mas estou surpreso que haja uma grande diferença no uso de Python e Ruby para HPC, uma vez que eles são bastante semelhantes. (Nota - eu sou fã de Python, mas não tenho nada contra Ruby).
Existe alguma razão específica para a decolagem de um idioma? É sobre as bibliotecas disponíveis? Alguns recursos específicos de idioma? A comunidade? Ou talvez apenas contigência histórica , e poderia ter sido o contrário?
fonte
Respostas:
Vou expandir meu comentário.
Eu acho que existem alguns fatores que influenciaram o uso do Python na computação científica, embora eu não ache que haja pontos históricos definitivos nos quais você possa dizer: "Sim, essa é a razão pela qual o Python é usado sobre Ruby / qualquer outra coisa "
História antiga
Python e Ruby têm aproximadamente a mesma idade - de acordo com a Wikipedia, o Python foi oficialmente lançado pela primeira vez em 1991 e o Ruby em 1995.
No entanto, o Python ganhou destaque mais cedo do que o Ruby, pois o Google já estava usando o Python e procurando desenvolvedores de Python na virada do milênio. Como não é como se tivéssemos uma história com curadoria de usos de linguagens de programação e suas influências nas pessoas que as usam, teorizarei que essa adoção precoce do Python pelo Google foi um grande motivador para as pessoas que procuram expandir além do uso de Matlab, C ++, Fortran, Stata, Mathematica, etc.
Ou seja, quero dizer que o Google estava usando Python em um sistema onde eles tinham milhares de máquinas (pense em paralelismo e escala) e constantemente processava muitos milhões de pontos de dados (novamente, escala).
Confluência do evento
A computação científica costumava ser feita em máquinas especializadas como SGIs e Crays (lembra-se deles?), E é claro que o FORTRAN era (e ainda é) amplamente utilizado devido à sua relativa simplicidade e porque poderia ser otimizado mais facilmente.
Na última década, mais ou menos, o hardware comum (significando coisas que você ou eu podemos pagar sem ser milionários) assumiu o domínio científico e de computação em massa. Veja os 500 principais rankings atuais - muitos dos 'supercomputadores' melhores do mundo são construídos com hardware Intel / AMD normal.
O Python entrou em um bom momento, pois, novamente, o Google estava promovendo o Python, e o Google estava usando hardware comum, e eles tinham milhares de máquinas.
Além disso, se você pesquisar alguns artigos científicos antigos sobre computação, eles começaram a surgir por volta da era 2000.
Suporte anterior
Aqui está um artigo escrito para o Software e Sistemas de Análise de Dados Astronômicos , escrito em 2000, sugerindo o Python como uma linguagem para a computação científica.
O artigo tem esta citação sobre Python:
Então, você pode ver que o Python já tinha tração desde o final dos anos 90, por ser funcionalmente semelhante aos sistemas existentes na época e porque era fácil integrar o Python a coisas como C e aos programas existentes. Com base no conteúdo do artigo, o Python já estava em uso científico desde o período de 1995-1996.
Diferença no crescimento da popularidade
A popularidade de Ruby explodiu junto com o surgimento do Ruby On Rails, que foi lançado em 2004. Eu estava na faculdade quando ouvi pela primeira vez o burburinho sobre Ruby, e isso foi por volta de 2005-2006. O django para Python foi lançado no mesmo período (julho de 2005, de acordo com a Wiki), mas o foco da comunidade Ruby parecia muito centrado na promoção de seu uso em aplicativos da web.
O Python, por outro lado, já tinha bibliotecas que se encaixam na computação científica:
NumPy - NumPy começou oficialmente em 2005, mas as duas bibliotecas em que foi construída foram lançadas anteriormente: Numeric (1995) e Numarray (2001?)
BioPython - biblioteca de computação biológica para python, remonta a 2001, pelo menos
SAGE - Pacote de matemática com o primeiro lançamento público no início de 2005
E muito mais, embora eu não conheça muitas de suas linhas de tempo (além de apenas navegar nos sites de download), mas o Python também tem o SciPy (construído no NumPy, lançado em 2006), tinha ligações com R (a linguagem de estatísticas) em no início dos anos 2000, adquiriu o MatPlotLib e também obteve um ambiente de shell realmente poderoso no ipython.
O ipython foi lançado pela primeira vez no início dos anos 2000 e teve muitos recursos adicionados que o tornam muito bom para a computação científica, como gráficos integrados do matplotlib e capacidade de gerenciar clusters computacionais .
Do artigo acima:
Boa lista de pacotes científicos e numéricos para Python .
Muito disso provavelmente se deve ao início da história e à relativa obscuridade do Ruby até os anos 2000, enquanto o Python ganhou força graças ao evangelismo do Google.
Então, se você estava avaliando as linguagens de script no período de 1995 a 2000, o que realmente estava vendo? Havia o Perl, que provavelmente era diferente o suficiente sintaticamente, para que as pessoas não quisessem usá-lo, e o Python, que tinha uma sintaxe mais clara e melhor legibilidade.
E sim, provavelmente há muito auto-reforço - o Python já possui todas essas ótimas bibliotecas úteis para a computação científica, enquanto o Ruby tem uma voz minoritária defendendo seu uso na ciência, e há algumas bibliotecas surgindo , como o SciRuby , mas As ferramentas do Python amadureceram na última década.
A comunidade de Ruby em geral parece estar muito mais interessada em promover o Ruby como uma linguagem da web, pois foi isso que realmente o tornou conhecido, enquanto o Python começou em um caminho diferente e, posteriormente, tornou-se amplamente usado como uma linguagem da web.
fonte
Eu usei o Python extensivamente para aplicativos de engenharia e o Ruby para aplicativos da web.
O problema que vejo no Ruby como uma linguagem científica é que existem muitas opções de sintaxe para uma determinada operação.
O Python foi projetado com a seguinte premissa "Deve haver uma - e de preferência apenas uma - maneira óbvia de fazer isso". Isso torna MUITO mais fácil ler o código de alguém e determinar sua intenção. Isso é essencial para as análises por pares de engenharia, etc.
Eu gosto de Ruby e é ótimo para determinadas tarefas, mas meu código Ruby pode ser sintaticamente totalmente diferente de um código de programador diferente que faz exatamente a mesma coisa. Isso causa muita ambiguidade em um ambiente científico ou de engenheiro.
fonte
Em suposição, grande parte disso seria a dependência do matlab por muitos pesquisadores. Python tem alternativas, como sábio . Enquanto o rubi não, ou pelo menos não há óbvios.
Em segundo lugar, de acordo com a FAQ do Ruby , o python é orientado a procedimentos e a objetos, enquanto o ruby se disfarça como uma linguagem processual. Se você estiver escrevendo um pequeno script para fins de matemática, como o que você faria no matlab, o paradigma OO é uma dor de cabeça. Não apenas isso, mas força um salto conceitual para longe dos paradigmas funcionais / processuais que os pesquisadores usam. A matemática não é OO. A matemática é funcional, seguida de processual (pense em provas da lógica).
Por fim, observe que as Perguntas frequentes do Ruby afirmam que o ruby é mais complexo que o python. A programação vem em segundo para os pesquisadores, não como nós.
fonte
1 + 1
envia a mensagem+
ao objeto1
? Isso não altera a estrutura do seu programa nem um pouco.Quando o BDFL (Guido van Rossum) escreveu o Python pela primeira vez, o objetivo era que fosse tão compreensível quanto o inglês comum (proposta de financiamento da DARPA), o que eliminaria erros comuns de codificação.
Um problema que é altamente visível é o uso de recuo para delimitar blocos. Em idiomas que possuem delimitadores de declaração complexos e explícitos (por exemplo, chaves C, Pascal BEGIN / END), o espaço em branco seria recolhido para um único caractere de espaço antes de alimentar o código ao lexer. Isso permitiria uma grande variação na forma como o código é organizado.
Para programadores profissionais, isso não é um problema, porque eles se treinaram para lidar com isso a partir de 30 ou mais horas por semana de prática.
Para outros profissionais em que a programação é uma ferramenta, esse problema se torna um grande problema. Este grupo inclui matemáticos, físicos, químicos, engenheiros, etc.
Como o Python reduz erros para programadores não profissionais, permite que eles pensem no problema que estão tentando resolver e não precisam lidar tanto com a mecânica da linguagem.
Este é um exemplo único de por que é popular fora da profissão de programador. Existem outros exemplos que podem ser usados para ilustrar o mesmo ponto, como as baterias incluídas, The Zen of Python (
import this
), o uso do humor de Monty Python e assim por diante.fonte
Esta é uma ótima discussão aqui, acho que as postagens aqui realmente responderam por que o python é mais popular na comunidade científica. No entanto, existem alguns argumentos contrários para as ciências ruby:
O ruby pode ser codificado de maneira mais intuitiva que o python (DSL etc): considerando os pacotes corretos usados:
verifique bioruby: http://bioruby.org/ uma reserva de sequência pode ser simplesmente: s.reverse etc.
ruby permite um nível mais alto de abstrações ao mesmo tempo em que é conciso.
melhor sistema de gerenciamento de pacotes: gemas ruby são muito mais fáceis em comparação com: setuptools, pip etc
No entanto, a adoção do ruby foi / é / será prejudicada por sua complexidade. Estou pensando que o Lisp é uma linguagem ótima / poderosa, mas por que não decolou como uma linguagem geral? a situação semelhante está aqui com o ruby - ele herda muito poder do lisp, da conversa fiada e do perl !: mas apenas uma seleção de pessoas realmente o usará para obter os benefícios. No final, ele pode permanecer forte em determinadas áreas de nicho / especiais (como o trilho na rede, a configuração de marionetes), é difícil para os 'não' programadores aproveitarem totalmente, mas pode ser o bom amigo do programador (vi um computador os cientistas gostam da linguagem: http://www.cleveralgorithms.com/nature-inspired/index.html )
Algumas atualizações mais recentes: parece que o python já está assumindo a paisagem. Recentemente, livros como: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 e muitos outros livros (análise de dados, aprendizado de máquina etc.) são todos escritos com python como a linguagem usada . Se o ruby quiser recuperar o atraso, precisará de alguns esforços sérios. Considerando o matplotlib em python, provavelmente leva vários anos para chegar ao estado em que está agora. A menos que alguns esforços sérios sejam colocados em ruby, ele provavelmente não poderá acompanhar o estágio da análise de dados em python / computação científica nos próximos 2-3 anos.
fonte
Depois de usar o python para análise de dados por um tempo (proveniente de experiências trabalhando com ruby, lua e R), o pacote numpy (e muitas bibliotecas científicas relacionadas) torna 'possível' executar uma computação rápida (velocidade semelhante a C, como numpy é escrito / integrado com códigos C) com a facilidade de programação em python.
O Numpy existe há algum tempo, a disponibilidade dele ajudou muitos outros pacotes científicos relacionados a serem construídos, como scipy, pandas ... etc. A biblioteca de cálculo está sendo desenvolvida (NMtrix: https://github.com/SciRuby/nmatrix ). Essa enorme diferença de tempo faz do python a escolha óbvia para a computação científica.
fonte
Eu estive pensando a mesma coisa. Eu acho que é, como Spencer Rathbun disse, por causa do aspecto processual do Python. Sendo eu mesmo "não programador", acho lindo o modo como você pode codificar no Ruby e o framework Rails é excelente para facilitar o uso. No entanto, ao codificar para fins científicos (matemática, biologia, etc.), você normalmente pensa em uma linguagem "matemática", ou seja, não se importa com declarações como
mas você se preocupa mais
Então, eu acho que Ruby é poderoso, pois muitos de seus recursos não seriam utilizados em um programa científico. É mais fácil pensar em procedimentos.
fonte
O Python tem melhor suporte para matrizes N-dimensionais com o pacote Numpy. Não vi nada parecido com Ruby.
O Python parece ser mais rápido na computação numérica / computação científica que eu fiz. Não tenho outra prova senão quando escrevi algoritmos semelhantes em Python e Ruby, os algoritmos do Python foram mais rápidos (YMMV).
fonte
Uma razão é que o Python tem um bom suporte para usar / integrar / chamar código C / C ++, enquanto que eu saiba que Ruby não oferece o mesmo grau de (facilidade de) integração. Isso significa que você pode escrever os componentes de código de alto desempenho em C / C ++ e usar o Python (isto é, uma linguagem de alto nível / mais fácil para os olhos) para colar tudo. Imagino que esse também seja um dos motivos de sua adoção institucional antecipada pelo Google.
fonte
Acho que uma das principais razões pelas quais o Python se tornou tão popular para a ciência de dados foi por causa da quantidade de tempo / esforço (ou seja, dinheiro) que economizamos para estender nossos scripts para uma solução real (por exemplo, sistema de software). Com o Python, poderíamos criar mais facilmente uma solução de sistema com base no código que escrevemos para a ciência de dados.
Tenho experiências com a procura de um idioma para intérpretes com esse recurso há cerca de 15 anos. Na época, o Python foi escolhido para ser o único, não porque é a linguagem perfeita para a ciência de dados, mas porque era uma linguagem OOP rara com intérprete rápido / portátil que também era extensível para interagir com outras linguagens como C / C ++ / Java. Diferentemente dos dias de hoje, esses eram ótimos, mas raros, recursos para criar soluções diretamente a partir do código base já implementado para a ciência de dados.
O tempo pode ser outro fator crítico para criar uma linguagem de ciência de dados. Há 15 anos, descobrimos que já havia pacotes básicos, como numérico e scipy, para computação numérica em Python, mas nem conhecíamos a existência do Ruby como uma linguagem de programação. No final de 2018, eu pude encontrar vários projetos usando Ruby para ciência de dados. Talvez 10 anos depois, alguém possa perguntar por que Ruby é tão popular para a IA.
fonte