Adoro programar em linguagens que parecem voltadas para programadores hardcore. (Meus favoritos são Python e D.) O MATLAB é voltado para engenheiros e R é voltado para estatísticos, e parece que essas linguagens foram projetadas para pessoas que não são programadores hardcore e não pensam como programadores hardcore. Eu sempre os acho um pouco difíceis de usar, e até certo ponto não consigo entender o porquê. Aqui estão alguns problemas que eu consegui identificar:
- (Ambos): A ênfase extrema em vetores e matrizes na medida em que não existem primitivas verdadeiras.
- (Ambos): A dificuldade da manipulação básica de strings.
- (Ambos): falta ou constrangimento no suporte a estruturas de dados básicas, como tabelas de hash e matrizes "reais", isto é, paramétricas e aninhadas.
- (Ambos): Eles são muito, muito lentos, mesmo para os padrões de linguagem interpretados, a menos que você se incline para trás para vetorizar seu código.
- (Ambos): Eles parecem não ter sido projetados para interagir com o mundo exterior. Por exemplo, ambos são programas bastante volumosos que demoram um pouco para serem iniciados e parecem não ter sido projetados para facilitar a gravação de programas simples de filtro de texto. Além disso, a falta de um bom processamento de string torna quase impossível a E / S do arquivo, exceto em formas muito padrão.
- (Ambos): A orientação do objeto parece ter uma sensação muito aparafusada. Sim, você pode fazê-lo, mas não parece muito mais idiomático do que OO em C.
- (Ambos): Não há maneira óbvia e simples de obter um tipo de referência. Sem ponteiros ou referências de classe. Por exemplo, não tenho ideia de como você rola sua própria lista vinculada em um desses idiomas.
- (MATLAB): você não pode colocar várias funções de nível superior em um único arquivo, incentivando funções muito longas e codificação recortar e colar.
- (MATLAB): aparentemente, os números inteiros não existem como um tipo de primeira classe.
- (R): As estruturas básicas de dados internas parecem muito altas e estão mal documentadas, e nunca parecem fazer exatamente o que eu espero, dada a minha experiência com estruturas de dados semelhantes, mas de nível inferior.
- (R): A documentação está espalhada por todo o lugar e é praticamente impossível navegar ou pesquisar. Até o D, que geralmente é criticado por documentação ruim e ainda é bastante alfa, é substancialmente melhor até onde eu sei.
- (R): Pelo menos até onde eu saiba, não há um bom IDE para isso. Novamente, mesmo D, uma linguagem bastante alfa-ish com uma pequena comunidade, se sai melhor.
Em geral, também sinto que MATLAB e R poderiam ser facilmente substituídos por bibliotecas antigas simples em linguagens de uso geral, se existissem bibliotecas suficientemente abrangentes. Isso é especialmente verdadeiro nas linguagens de uso geral mais recentes, que incluem muitos recursos para os criadores de bibliotecas.
Por que R e MATLAB me parecem tão estranhos? Você notou algum outro problema importante que pode tornar essas linguagens estranhas aos programadores hardcore? Quando o uso é necessário, quais são algumas boas dicas de sobrevivência?
Edit: Estou vendo um problema de algumas das respostas que recebi. Tenho uma forte preferência pessoal, quando analiso dados, em ter um script que incorpore todo o pipeline. Isso implica que uma linguagem de uso geral precisa ser usada. Eu odeio ter que escrever um script para "limpar" os dados e cuspi-los, depois outro para lê-los em um ambiente completamente diferente, etc. Acho o atrito de usar o MATLAB / R para alguns dos meus trabalhos e linguagem diferente com um espaço de endereço completamente diferente e uma maneira de pensar para o resto ser uma enorme fonte de atrito. Além disso, eu sei que existem camadas de cola, mas elas sempre parecem ser terrivelmente complicadas e uma fonte de atrito.
Respostas:
Provavelmente, é uma má idéia abordar linguagens específicas de domínio com a mentalidade necessária para a programação em geral, ou para programar programas gerais com linguagens de uso geral. Sendo específicos do domínio, eles provavelmente exigirão uma curva de aprendizado mais íngreme e uma mentalidade desconfortável para serem usados com mais eficiência. Considero escrever código no Matlab equivalente a escrever código específico de domínio altamente otimizado (a par com, por exemplo, escrever código OpenGL eficiente e limpo). Também os vi se mover cada vez mais para se tornarem úteis como bibliotecas para serem usadas em outros idiomas - veja, por exemplo, http://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c
Eu diria, use o mesmo processo para esses DSL e para outros:
fonte
Eu prefácio isso observando que estou familiarizado com o MATLAB, mas não com o R.
O motivo pelo qual o MATLAB não se dá bem com OO, processamento de strings ou estruturas de dados personalizadas é que ele não deve fazer essas coisas. Existem muitas linguagens para OO, muitas que fazem um bom trabalho com o processamento de strings e muitas outras que suportam tipos de dados personalizados malucos. Nenhum deles é bom em multiplicação de matrizes, porque não foram projetados para isso.
Apenas otimizar as operações de vetor e matriz que o MATLAB faz já é bastante difícil sem lidar com tipos ou ponteiros definidos pelo usuário ou o que não (se não fosse difícil, eles não seriam capazes de cobrar muito por isso). Também é difícil adicionar suporte rápido a vetores a linguagens de uso geral existentes - acrescenta uma grande sobrecarga para um recurso que poucos programadores jamais usarão (poucos programadores entendem listas vinculadas, como é esperado que eles usem a decomposição de autovalores? )
O MATLAB é tão estranho para você porque foi projetado para permitir que cientistas e engenheiros façam cálculos de multiplicação de matrizes e ODE muito rapidamente. O MATLAB não se enquadra na sua definição de linguagem "hardcore" porque nunca deveria. Tentar pensar em MATLAB em termos de Python ou D é como tentar em LISP ou Haskell em termos de C ou em Verilog e VHDL em termos de JavaScript - eles resolvem problemas diferentes e abordam a solução de problemas de maneiras radicalmente diferentes. Para ser justo, o MATLAB fez algumas (ok, muitas) escolhas de design de linguagem bizarras que eu simplesmente não consigo entender, mesmo da perspectiva de uma linguagem específica de domínio. Mas não há nenhuma razão particular para que um astrônomo se importe com o fato de o corpo celeste X estar exatamente a 48 UA do corpo celeste Y, em oposição a 48,0 AU.
Agora, felizmente, algumas bibliotecas estão entrando em cena e fazem exatamente o que você sugere: bom suporte para computação científica em uma linguagem de uso geral. Para o Python, existe o NumPy / Matplotlib, que possui algumas arestas, mas fornece funcionalidade razoável do MATLAB dentro do Python. A razão pela qual não houve outro projeto como esse é que as bibliotecas são incrivelmente difíceis de escrever e atendem a um mercado já coberto pelo MATLAB e FORTRAN.
Se você absolutamente precisar usar o MATLAB ou R, não poderá abordar a programação neles como um programador "hardcore", precisará abordá-lo como um cientista ou engenheiro "hardcore". Para LISP, você se acha em recursão. No MATLAB, você só precisa pensar em matrizes. Atualize a álgebra linear ( as palestras do MIT sobre o assunto são uma ótima revisão). Caso contrário, a única maneira de "sobreviver" ao MATLAB é, com a prática, reconhecer quando um loop pode ser substituído por uma operação vetorial ou quando o seu problema se reduz à localização dos valores próprios de um produto externo.
fonte
Seu uso repetido do termo "programador hardcore" em referência a si mesmo. juntamente com sua insinuação de que os designers de R e MATLAB não são , me parece muito bobo e incentiva as pessoas a não levarem suas críticas a sério.
Se você gostaria de ler algumas críticas sérias a R, faria bem em ler esta peça de Ross Ihaka, um dos designers de R. Parece-me muito mais difícil projetar R do que usar D ou Python.
fonte
Depende do que você chama de verdadeiro primitivo. Em R, um vetor é um verdadeiro primitivo; isto é, todas as variáveis são vetores. Da mesma forma, no MATLAB todas as variáveis são matrizes.
No MATLAB, a manipulação de strings é poderosa, mas eu concordo que o código geralmente é feio e pouco intuitivo (pelo menos por enquanto). Para o R, existe o
stringr
pacote, que é tão bom de usar quanto as ferramentas em qualquer outro idioma.Em R, vetores têm nomes que funcionam como um hash. Há também os
hash
efilehash
pacotes. Não tem certeza sobre as implementações do MATLAB, mas você pode chamar as versões JAVA ou .NET facilmente, se desejar.Quando você pegar o jeito da vetorização (tenho certeza que sim, se você for realmente hardcore), amaldiçoará ter que usar loops quando voltar para outros idiomas. A velocidade de execução é uma compensação pela velocidade da programação.
Ambos podem ler e gravar dados em praticamente qualquer formato. Ambos podem ser chamados da maioria das outras linguagens de programação. Ou em um prompt de comando. Você pode criar GUIs com eles. Como isso não está interagindo com o mundo exterior? Se você está tendo problemas com o seu programa de filtro de texto, pergunte no stackoverflow.
Acordado; são principalmente linguagens processuais.
Acordado em R. No MATLAB, as referências são chamadas de identificadores.
Absurdo. Basta criar vários arquivos.
Eles fazem. Veja
int8
,int16
,int32
eint64
.Eles são adequados para a análise de dados. Por favor, dê exemplos específicos de comportamento inesperado.
Existem muitos tipos de documentação. Comece com
?some_function
,RSiteSearch('some concept')
, rseek.org , eosos
pacote. Sem mencionar os manuais que acompanham a instalação. Ou um bom livro .Experimente o Architect, o RStudio ou o Revolution Analytics IDE. Consulte a seção "IDEs e editores para R" da página de informações Estouro de pilha para obter links e mais opções.
fonte
O MATLAB pode se integrar com Java e C / C ++. Você pode implementar toda a sua carga de trabalho não numérica nesses idiomas e invocá-los no MATLAB.
Existe uma razão para isso ser necessário? Você está trabalhando em uma base de código MATLAB existente, escrita por outras pessoas? É um requisito de trabalho? (ou requisito de aula se você estiver na escola) Caso contrário, considere usar o SciPy ou o NumPy.
Infelizmente, na minha opinião pessoal, se essa situação está sendo imposta a alguém, nem sempre é possível sobreviver. Mesmo na faculdade, nem todo estudante de engenharia pode se acostumar com o modo de pensar computacional do MATLAB.
fonte
Trabalho com MATLAB, Python e C (e às vezes C ++) e me considero (principalmente) um desenvolvedor de software, sentado ao lado de colegas que tendem a ser cientistas de dados, matemáticos ou outros especialistas em domínio.
Embora eu seja o primeiro a admitir que não é uma linguagem de programação de propósito geral no sentido em que C ou Python é, eu realmente gosto muito de escrever scripts no MATLAB, principalmente para coisas como análise de séries temporais ou processamento de imagens.
Existem algumas características da linguagem que, embora geralmente sejam implementadas de maneira bastante ineficiente, são uma alegria de usar. Por exemplo, considere a indexação lógica: eu posso criar um vetor ou matriz lógica que seleciona uma região de interesse e nomeá-la "isInROI", executando uma operação de filtro para selecionar elementos do vetor ou matriz "dados" nessa região. basta escrever: "roiData = data (isInROI)".
São momentos como esse que realmente me fazem apreciar o MATLAB e me permitem ignorar seus outros pecados numerosos e muito discutidos.
fonte