Pergunta suave: Onde o Python se encaixa na imagem?

9

Então, eu estou debatendo se devo ou não aprender o Python. Ao falar com meus professores, o Matlab parece ser a linguagem comum usada na matemática aplicada / ciência da computação no que diz respeito à academia ; enquanto na indústria , meus professores (especialmente aqueles que trabalharam na indústria) disseram que aprender c ++ é a rota mais segura.

Eu gostaria de ouvir de vocês, tanto na academia quanto na indústria, se eu deveria me preocupar com Python, ou apenas ficar realmente bom com o que eu sei (MATLAB e C ++) por enquanto.

Atualização : Geoff traz um bom argumento, eu provavelmente deveria dar mais alguns detalhes:

Atualmente, sou estudante de graduação no meu último ano, estudando matemática com especialização em computação. Eu gostaria de seguir uma faculdade e continuar pesquisando (nunca me vi gostando de ensinar) ou trabalhar em um laboratório. Ambos são ideais. Quanto a quais áreas de pesquisa, provavelmente algo como a análise ou probabilidade numérica. Caso o plano A não funcione, eu estaria aberto para trabalhar na indústria, desde que me preparar para a indústria não demore muito tempo na escola. Então, imaginei que deveria aprender os idiomas comuns na indústria apenas como apoio. Mas é também por isso que estou em conflito. Não posso estudar todas as línguas ou me preparar para todas as possibilidades, pois isso levaria muito tempo.

AlanH
fonte
11
Sua pergunta é boa, mas provavelmente um pouco aberta e vaga demais. Que disciplina você está estudando e o que acha que pode querer fazer?
Geoff Oxberry
11
Para um exemplo de coisas que podem ser feitas com Python que não funcionariam bem no MATLAB ou em C ++ puro: epubs.siam.org/doi/abs/10.1137/110856976 . (alerta desavergonhada auto-promoção)
David Ketcheson

Respostas:

15

Uma dificuldade com qualquer um desses tipos de perguntas é que a resposta é altamente dependente da comunidade.

Para responder a algumas de suas perguntas em ordem aleatória:

O MATLAB é muito usado tanto na academia quanto na indústria. Uma das razões pelas quais é usada bastante na indústria é porque é ensinada na academia. Sei que o MATLAB é usado no Lincoln Laboratory e nas divisões de pesquisa e desenvolvimento da DuPont.

Existem pacotes de software escritos em Python que são bons em computação simbólica, como sympy e SAGE. Dependendo de seus interesses particulares, requisitos de recursos e preferências pessoais, o Mathematica (ou Maple ou outros sistemas de álgebra computacional) pode ser superior a esses pacotes.

O MATLAB possui uma caixa de ferramentas matemática simbólica que pode ser usada para alguns cálculos simbólicos, mas, na minha experiência, suas capacidades de manipulação simbólica são mais fracas que o Mathematica e o Python. Alguma manipulação simbólica poderia teoricamente ser feita em C ++, mas é difícil de manejar. O MATLAB também não é uma boa linguagem de uso geral. Ele faz álgebra linear e matemática numérica bem, mas não possui boas capacidades de entrada / saída. Ele não possui bons recursos paralelos (embora existam variantes como MATLAB paralelo, MATLAB Star-P e a Parallel Computing Toolbox) em comparação com C ++ ou Python. Até seus recursos gráficos poderiam usar algum trabalho. O MATLAB também é caro, a menos que você seja afiliado a uma instituição que possui uma licença. Cada caixa de ferramentas é cara de comprar e geralmente custa da ordem de centenas a milhares de dólares.

O Mathematica faz computação numérica, além da computação simbólica. Não vi pessoas usá-lo para computação numérica, tanto quanto vi pessoas usando Python e MATLAB para trabalhos numéricos. Ele também possui recursos paralelos, mas não será dimensionado para grandes supercomputadores.

Python é uma boa linguagem de uso geral que é considerada fácil de aprender e utilizável. É usado em supercomputadores grandes (veja, por exemplo, PyClaw, petsc4py, mpi4py e outros) e dimensiona bem. Ele também tem pacotes numéricos altamente considerados (como NumPy e SciPy); uma comunidade grande e ativa; boas capacidades de processamento de entrada / saída; e boas bibliotecas gráficas, juntamente com um grande repositório de bibliotecas (confira PyPI). É gratuito, comparado aos pacotes proprietários mencionados acima. Você pode encontrar a maioria das funcionalidades do MATLAB ou Mathematica em pacotes Python disponíveis gratuitamente. A principal desvantagem do Python é que ele tende a ser mais lento que as linguagens compiladas, como o C ++, embora essa desvantagem esteja diminuindo com o desenvolvimento contínuo do Cython, Numba e PyPy; ele também pode ser mitigado, substituindo o código Python mais lento pelo código C (ou C ++ ou Fortran) e envoltórios Python apropriadamente escritos. Sendo interpretadas, muitas pessoas relatam maior produtividade com Python do que as linguagens compiladas. É bastante popular e provavelmente vale a pena aprender se você tiver tempo.

C ++ é uma linguagem complicada e seu uso na ciência da computação é controverso. Seu amplo conjunto de recursos pode facilitar a criação de softwares difíceis de manter e que levam uma eternidade para serem compilados. No entanto, usados ​​criteriosamente, recursos como modelagem e sobrecarga do operador podem ser empregados com grande efeito, como em projetos como deal.II, Blaze e Elemental (entre outros). O C ++ tem uma curva de aprendizado acentuada quando se trata de recursos avançados, e ouvi relatos de pessoas que demoram anos para sentir que aprenderam o idioma completo. No entanto, também é uma linguagem popular, apesar das preocupações de usabilidade e do conjunto de recursos complicados. Provavelmente vale a pena aprender, apenas para se tornar mais empregável; seus principais concorrentes em ciência da computação são Fortran e C, que também valem a pena ser aprendidos.

Tudo o que você decidir aprender será baseado no que você realmente precisa. Claro, é bom aprender Python e C ++, mas, com restrições de tempo e recursos, você provavelmente só aprenderá o que realmente precisará usar, e isso depende da comunidade em que trabalha.

Geoff Oxberry
fonte
No que diz respeito à academia, você diria que é melhor investir tempo aprendendo Python em vez de C ++?
AlaNH
11
Mais uma vez, tudo depende. Ainda estou mais do lado acadêmico e uso Python o tempo todo. Também ainda preciso usar C ++ para trabalhos escritos nessa linguagem. Minha opinião pessoal é que o aprendizado do Python primeiro provavelmente será mais rápido do que se você aprendesse C ++ primeiro, mas não sei quais probabilistas / processos estocásticos / combinatórios as pessoas usam, portanto, sua milhagem pode variar.
Geoff Oxberry
Eu concordo com Geoff que aprender python primeiro é uma boa idéia, pois isso o levará muito mais rápido. O C ++ é uma boa linguagem, mas a curva de aprendizado é significativamente maior e o aprendizado sem entusiasmo é discutível pior do que não o aprendizado.
LKlevin
"O C ++ possui uma curva de aprendizado acentuada no que diz respeito aos seus recursos avançados, e ouvi relatos de pessoas que demoram anos para sentir que aprenderam o idioma completo". Sim, eu não poderia concordar mais. Eu acho que qualquer programador que se preze deve aprender c / c ++ em algum momento de sua vida, mas definitivamente levará 10000 horas para realmente se sentir um especialista com eles. +1
James
11

Como Misha e Geoff Oxberry apontaram, o Mathematica realmente tem um foco diferente (apenas porque você pode bater em um prego com uma chave de fenda não significa que você deveria). Portanto, considero sua pergunta como "Se conheço o Matlab, por que devo aprender Python?" [Edit: e, aparentemente, você também.]

Para todos os efeitos, o Matlab é o inglês da computação científica - com todas as conotações positivas e negativas que essa analogia implica. Um ponto positivo específico é que o código do Matlab provavelmente será útil (ou seja, executável e compreensível) para mais pessoas do que o código em qualquer outro idioma. (Esse é o principal motivo pelo qual forneço códigos do Matlab para todos os meus algoritmos.) Além disso, a área de trabalho do Matlab pode ser realmente útil durante a criação de protótipos, especialmente a capacidade de executar bits de código (células) diretamente do editor, bem como os recursos internos. no criador de perfil.

Dito isto, se você quiser aprender outra linguagem de alto nível por diversão e lucro, poderá fazer pior que o Python. Algumas razões além do que Geoff listou:

  • É muito mais fácil interagir com programas e bibliotecas externas em Python. Não há mais arquivos mexicanos!

  • Se você estiver fora da área de trabalho, é muito mais fácil instalar e executar o Python + NumPy / SciPy do que obter acesso a uma licença do Matlab.

  • O principal motivo pelo qual o Matlab é mais rápido que o NumPy é o fato de agrupar bibliotecas de fornecedores otimizadas para álgebra linear (MKL, ACML). É possível ( se um pouco entediante ) criar seu próprio NumPy e vinculá-lo às mesmas bibliotecas para obter quase o mesmo desempenho (e multithreading) do Matlab para álgebra linear, além do melhor desempenho do Python para todo o resto. (Embora, é claro, exija uma licença mesmo para uso acadêmico, negando o bônus do software livre, ainda é uma opção interessante ter o mesmo código trabalhando em uma instalação acelerada patrocinada pelo empregador no escritório e em uma prateleira pronta para uso. instalar em sua máquina ou notebook doméstico.)

  • Embora as caixas de ferramentas do Matlab sejam um de seus pontos de venda, há algumas áreas em que o Python está bem à frente; em particular, o SymPy e o FEniCS vencem as caixas de ferramentas Symbolic e PDE por uma ampla margem.

  • Não se esqueça da parte divertida ( apesar de espaço em branco semântico e vinculação de nomes ): já vi vários colegas sendo mordidos pelo bug do Python, e há realmente algo estranhamente satisfatório ao escrever seu algoritmo em Python que não existe no Matlab ( embora isso possa ser apenas a alegria de aprender uma língua estrangeira) :)

(Se você começar com o NumPy, poderá achar esta página útil.)

Christian Clason
fonte
5

O Python pode substituir o c ++ e o Matlab. Está bem espalhado na academia e na indústria. Na indústria, às vezes é usado como cola para linguagens de nível inferior, principalmente c / c ++. Mathematica é completamente outra história. Sua principal vantagem é que todos os outros mencionados (c / c ++; Matlab; Python) não são bons: em cálculos simbólicos.

Portanto, todos os quatro são completamente diferentes: c ++ é antigo e estável, uma linguagem de programação de nível relativamente baixo; Python é uma linguagem de computador de alto nível nova e em evolução; O Matlab é um ambiente computacional numérico com forte ênfase na álgebra vetorial (embora seja capaz de fazer mais ou menos tudo); O Mathematica é um sistema de álgebra computacional com forte ênfase em cálculos simbólicos (a mesma observação do matlab). Assim, eles não são concorrentes.

Misha
fonte
De fato; Sou muitas vezes confundido (e às vezes espantado) quando vejo as pessoas usam Mathematica para computação científica ...
Christian Clason
@ChristianClason e Misha: é um equívoco que o Mathematica seja principalmente um sistema de álgebra computacional. Se você olhar para como as pessoas realmente usá-lo , a maioria é não álgebra simbólica, e em vários campos numéricos é competitiva com ferramentas como MATLAB e R. (Pessoalmente eu escolheria Mma sobre estes outros dois para a maioria dos dados numéricos processamento de tarefas , mas é claro que é uma preferência pessoal.) Em algumas áreas, como integração numérica ou visualização, parece estar à frente do MATLAB. Em outros, como resolver o PDE, está muito atrás.
Szabolcs
Para alguém cujo único interesse é a computação numérica, o Python é uma alternativa ao MATLAB, uma linguagem de nível relativamente alto, semelhante em sua capacidade de usar rotinas de biblioteca para lidar com cálculos padronizados que envolvem álgebra linear, transformadas de Fourier, funções especiais, etc. Sim, o Python é muito mais amplamente aplicável, mas abrange tudo o que você pode fazer no MATLAB.
Brian Borchers
4

Sei que sua pergunta é sobre o uso de python, mas você disse que estava interessado em "análise ou probabilidade numérica". Não sei se você considerou R , mas foi projetado especificamente para esse tipo de trabalho. R é uma linguagem muito poderosa para probabilidade e estatística e possui uma base de usuários muito grande e ativa de matemáticos e cientistas.

R é diferente do Matlab no sentido de que é de código aberto, tem um foco estatístico e faz alguns gráficos muito impressionantes (consulte ggplot2 ). Você pode fazer quase tudo no R que você pode fazer no Matlab, mas meu aspecto favorito é a contribuição do usuário. A maioria das bibliotecas contribuídas é escrita por cientistas e publicada em uma revista estatística. Eles também têm guias extremamente bem escritos (chamados de referências e vinhetas). Minha nova biblioteca favorita oferece suporte para CUDA, construído nas bibliotecas CULA (gratuito para uso acadêmico). Existe uma quantidade prodigiosa de métodos para a teoria das probabilidades também (veja aqui ).

De qualquer forma, o R é definitivamente projetado especificamente para sua linha de trabalho, então confira e considere adicioná-lo ao seu kit de ferramentas :) Lembre-se de que você pode executar scripts R no Python e scripts Python no R e capturar facilmente as saídas.

Boa sorte!

D.Deriso
fonte
2

Outros já comentaram longamente e com mais profundidade do que tentarei aqui. No entanto, gostaria de destacar um ponto mais uma vez: depende da sua comunidade. Por exemplo, se você estiver trabalhando em um projeto de engenharia elétrica, é provável que esteja usando o matlab; o mesmo pode ser verdade se você for um analista numérico que deseja verificar sua estimativa de taxa de convergência em um problema simples de modelo.

Por outro lado, se você gosta de computação científica (por exemplo, simulando fluxo ao redor de um aerofólio, simulando fusão nuclear em plasma, simulando convecção no manto terrestre) ou desenvolvendo métodos numéricos com essas aplicações em mente, então a lingua franca é C ++. Hoje, todos os pacotes de computação científica em larga escala são escritos em C ++ (ou C), para o bem ou para o mal, e é assim que permanecerá por muito tempo. Para citar apenas alguns exemplos, o PETSc e os incrivelmente grandes e diversos pacotes Trilinos são escritos em C e C ++, respectivamente. Entre as grandes bibliotecas de elementos finitos de código aberto que eu consigo pensar (libMesh, deal.II, oofem, freefem), cada uma delas é escrita em C ++. Entre os programas de visualização, os dois maiores (Visit e Paraview) estão escritos em C ++. Eu poderia estender a lista.

O ponto é que, se você se contentar com simulações em pequena escala, as pessoas usam um idioma, mas sempre que se trata de cálculos sérios, talvez paralelos, todos eles usam outra coisa. É uma coisa da comunidade, com certeza, mas também de ser interoperável - se o PETSc e o Trilinos são escritos em C e C ++, então eu (sendo o autor do acordo.II) não posso escolher facilmente qualquer outro idioma, mesmo que quisesse, porque Eu preciso trabalhar com o PETSc e o Trilinos.

Wolfgang Bangerth
fonte
11
Para ser justo, existem muitos usuários do PETSc vindos do Fortran e muitos do Python. É fácil chamar C de quase qualquer idioma, embora a programação em idiomas mistos venha com seu próprio conjunto de desafios e eu não o recomendo com muita frequência. A questão de onde na pilha seu código reside também é frequentemente ignorada. Os aplicativos do usuário final devem fazer escolhas diferentes de design de software que as bibliotecas no nível do sistema, por exemplo.
precisa
Isso é justo. Mas, no entanto, é verdade que as instâncias mais recentes de software usadas em cálculos em larga escala são predominantemente escritas em C e C ++ atualmente (apesar de impedimentos mais antigos escritos em Fortran).
Wolfgang Bangerth
1

Para adicionar meus dois centavos, eu tive experiência acadêmica recente (um diploma de doutorado novo :)) e experiência na indústria (um fabricante de equipamentos de pesquisa).

Fazemos muitos cálculos numéricos em processadores embarcados fracos (pense em processadores para celulares). Além de não haver MATLAB para ARM, o C ++ é o rei neste mundo - muitos conjuntos de compiladores incorporados não incluem o FORTAN!

Embora tenhamos um número limitado de licenças do MATLAB, o requisito de fazer um produto consumir 2 Watts de potência distorce nosso trabalho de desenvolvimento em favor do C ++ (experimento à parte).

Damien
fonte