Por que as linguagens de programação científica são tão estranhas? [fechadas]

9

Parece-me que as linguagens de programação destinadas ao uso em ciências e engenharia são consistentemente estranhas em comparação às linguagens de uso geral. Alguns exemplos em cima da minha cabeça:

  • No Matlab, cada função deve ser colocada em um arquivo separado
  • Em R, <- é o operador de atribuição, em oposição a = em quase todos os outros idiomas
  • Matlab, R, Julia e outros são todos indexados em 1
  • O Matlab usa% para comentários, e não o padrão # ou //

Claro, línguas todas têm várias características de design que realmente torná-los mais fáceis de usar para aplicações científicas, como a notação matricial mais natural. Ainda assim, todos eles inexplicavelmente fazem todas essas escolhas bizarras que não facilitam nada e poderiam facilmente ser evitadas se os designers de idiomas tivessem escolhido fazer o que 99% de outros idiomas fazem. O motivo é o bloqueio do fornecedor? Falta de contato com a comunidade mais ampla de desenvolvimento de software? Algo mais?

Eu li este tópico e não achei as explicações satisfatórias. Só porque R foi projetado como uma linguagem científica, não significa que ele tenha que ignorar completamente as convenções e usar <- em vez de =.

haroba
fonte
6
Resposta curta: porque eles foram feitos para cientistas, não para programadores.
Bart van Ingen Schenau
19
Resposta curta: Porque cada idioma que você acha que é normal foi influenciado por um ancestral comum, C.
Ross Patterson
3
Acho que você vai lutar para encontrar quaisquer convenções através das línguas. Depende da herança deles.
Robbie Dee
6
Nada disso é estranho. É apenas diferente . Porque não há razão específica para escolher uma sintaxe sobre a outra, exceto a que o autor específico do idioma específico está acostumado.
Jan Hudec
8
Seus 99% estão errados. Se você conhece apenas C e seus derivados, pode pensar que sim, mas mais de 50% dos idiomas não-C usam algo diferente para atribuição, indexação e / ou comentários.
David.pfx

Respostas:

21
  • Existem convenções diferentes. Convenções em matemática, lógica e ciências aplicadas e convenções em TI. Os primeiros são muito mais antigos.
  • As linguagens científicas são feitas para tornar a vida de seus usuários mais conveniente. O usuário é visto como um cientista, que pode realizar algum algoritmo de tempos em tempos ou verificar alguma teoria, sem a necessidade de aprender algo realmente novo. Portanto, os idiomas para os cientistas DEVEM ser confeccionados com padrões que não sejam de TI. Porque eles não são voltados para o uso de pessoas de TI. Eles atendem a OUTROS padrões e isso é bom por causa do objetivo auditivo. Como a boa interface do usuário do SW e o idioma são a UI do SW, devem ser feitos com base nas necessidades do usuário, não do codificador.
  • Nossos padrões de TI são padrões da indústria. TI é indústria. Ciência não é indústria. Os cientistas têm orgulho disso. E eles relutantemente levariam qualquer coisa da nossa prática para a deles. E eles não gostam de padrões. E ninguém gosta de padrões estrangeiros. Portanto, se alguém criar uma linguagem científica que respeite os padrões de TI, dificilmente venderá bem, devido à aversão ao auditivo alvo, mesmo que seja objetivamente mais conveniente.

E mesmo se julgarmos apenas de acordo com os padrões de TI ... Desculpe, que padrões você quer dizer? Você já tentou escrever um programa em APL ou SNOBOL? Esses dois idiomas são, IMHO, os MAIS poderosos em campos apropriados (contagem e seqüências de caracteres). Mas a sintaxe é algo MUITO estranho (e eficaz) A leitura de uma linha de código APL pode levar dias. Por outro lado, essa linha é uma peça séria de SW. Você voltaria ao Mathlab com lágrimas de alívio.

Quanto a "=", muitas pessoas têm problemas para se acostumarem que não é igualdade, mas atribuição. BTW, em Pascal é igualdade e atribuição é ": =".

E você realmente acha que == para igualdade é mais natural? Pelo contrário, misturar = e == é o erro MAIS comum na programação C, ocorre com muita frequência mesmo nos IDEs contemporâneos, com seu controle automático.

Sobre a indexação de 1 - é o único natural. Quando você era criança, aprendeu poemas e canções, onde contava: um, dois, três ... E não 0,1,2 ... Na matemática da escola, estudamos que a contagem começa em 1 e que 0 não pertence a números naturais / contáveis. Somente com a definição de funções vêm índices não naturais. Afinal, o 0 foi inventado muitos milhares de anos depois que nosso ancestral levantou um dedo.

O início 0 foi mais simples de realizar e imediatamente entrou na prática de TI após a apresentação em C. Mas no Fortran, o primeiro idioma, a indexação 1 é usada. O mesmo acontece com outras línguas da época pré-industrial.

E sim, eu li o artigo de Dyjkstra sobre a naturalidade da contagem baseada em 0. E discordo totalmente de sua argumentação. É natural para os músicos. E mesmo 0 entusiastas que criam os compiladores C e Java, contam as linhas do código STARTING FROM 1!

Gangnus
fonte
11
": =" para atribuição e indexação baseada em 1 também são usados ​​no Smalltalk.
Rory Hunter
11
Eu não acredito que a indexação baseada em 0 se deva à facilidade de implementação (o FORTRAN praticamente refuta isso). cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html fornece alguns motivos pelos quais você pode preferir a indexação baseada em 0, mas observe que a escolha é bastante arbitrária.
jk.
2
FORTRAN teve indexação baseada em 1. O PASCAL permitiu a indexação arbitrária: você pode declarar uma matriz cujo índice variou entre, por exemplo, -42 a +57. (Ver en.wikipedia.org/wiki/... para um exemplo onde isso é útil.)
John R. Strohm
11
@ Gangnus Eu acho que é um erro comparar linguagens modernas com C e considero que é intencionalmente difícil de ler. Ele foi projetado para ser uma alternativa de alto nível para idiomas de nível inferior.
Robbie Dee
11
FORTH é uma linguagem baseada em pilha. Pense na calculadora HP. Era muito compacto e rápido, mas era difícil escrever código que não fosse impenetrável. Em FORTH, você raramente usa variáveis, mas coloca coisas na pilha e usa operadores que atuam na pilha.
Gort the Robot
16

A indexação de 1 não é estranha, é completamente normal e esperada, exceto para programadores , porque eles foram condicionados a esperar a contagem baseada em 0 por C (que foi condicionada pelas propriedades da arquitetura do processador).

Os comentários são indicados de várias maneiras diferentes em diferentes idiomas; não existe uma maneira padrão, todo idioma escolhe um símbolo ou dígrafo que ainda não foi usado.

A atribuição é igualmente um conceito estranho e incompreensível, exceto para programadores ; a maioria das pessoas não poderia me importar menos se é =ou :=ou <-, se esforçam para entender o significado (e para eles, é de fato melhor não para uso =, porque isso enfatiza que a atribuição não é igualdade - o obstáculo mais comum para não-programadores para entender código).

Em resumo, as linguagens de programação destinadas a pessoas que não sejam programadores profissionais parecem diferentes, porque as pessoas que as usam mais a desejam.

Kilian Foth
fonte
4
Não concordo que a indexação de 1 não seja estranha. A indexação 0 é pelo menos tão comum quanto a indexação 1 em matemática, e obviamente era a norma na programação há anos antes do advento do Matlab ou S / R.
haroba
9
@ Aqwis Ah, sim, eu já vejo o bebê contando zero, um, dois ... A maneira mais natural, na verdade.
Gangnus
4
Os bebês não escrevem código. Existem boas razões para usar a indexação zero (consulte: Dijkstra), e quando a indexação zero também é comum em matemática, não vejo muitas razões para usar a indexação 1.
haroba
11
@Aqwis Responda por suas próprias palavras. O que é estranho e não. Uma coisa que é definida desde a infância e pela matemática (números naturais não incluem zero) não pode ser estranha de nenhum lado. E o que contradiz isso, é estranho. E que você se acostumou a outra coisa é irrelevante. Esses idiomas simplesmente não são feitos para você ou para mim.
Gangnus
11
@phresnel Para parafrasear a resposta: A indexação de 1 é normal. Exceto para programadores, porque eles foram condicionados a esperar [indexação de 0] de C
Robbie Dee
5

Existem três problemas:

  1. Você não tem conhecimento de certas tradições e os bons motivos para certas escolhas.
  2. Você coloca muita ênfase na sintaxe, muito pouco na semântica.
  3. Engenheiros e cientistas não têm experiência em design de linguagem, levando a uma sintaxe questionável.

Agora aos seus pontos específicos:

  • Como não conheço o Matlab, não posso comentar sobre os requisitos de organização de arquivos. Observe que o Java deseja que você use um arquivo por classe pública.

  • Em R, também =pode ser usado como operador de atribuição. Observe que ele precisa de vários operadores de atribuição <-e <<-lidar com seu conceito de escopo ( <<-atribui a um símbolo em um escopo externo em vez de criar um novo símbolo dentro de uma função). As setas podem ser usados em outra direção também, o que poderia tornar o código mais limpo: complex_calculation() -> x.

  • A indexação baseada em 1 é o padrão em matemática, com o qual os usuários do Matlab e R se sentem mais confortáveis ​​do que C. Julia segue o Matlab para ter uma melhor curva de aprendizado.

  • %para comentários também é usado no TeX / LaTeX. Esta #é apenas uma convenção das linguagens de script Unix e seus descendentes.

Você também ignora que linguagens de programação "reais" têm muitas partes estranhas. Por que o Scheme não usa =? Em vez de:

(define foo 5)

Por que C usa *para desreferenciar, quando obviamente um sinal de intercalação ^xé mais comum em outras tradições?

amon
fonte
"Não conheço o Matlab, portanto não posso comentar sobre os requisitos de organização de arquivos. Observe que o Java deseja que você use um arquivo por classe pública." Eu acho perfeitamente razoável que a linguagem espere que você divida seu projeto em vários arquivos. No entanto, uma classe geralmente é uma quantidade relativamente grande de código. Funções não precisam ser. Ao forçar um arquivo separado para cada função, o Matlab o desencoraja de criar pequenas funções e, em vez disso, promove grandes funções monolíticas.
haroba
11
Eu concordo quase com tudo, exceto na p.3. Os cientistas não fazem seus idiomas, eles os pedem. Eles são clientes, usuários, mas não seus criadores. Se alguém é, ele / ela já é um nerd de TI. E a sintaxe de qualquer idioma é questionável, ninguém é ideal para todas as tarefas.
Gangnus
O Matlab compila funções / arquivos just-in-time, conforme necessário. Não possui um conceito real de programa, apenas várias funções. Se eu estiver executando uma função que faz uma chamada para foo (), ele procurará em seu caminho um arquivo chamado foo.m, compilará e executará. Não há necessidade de informar antecipadamente ao Matlab qual conjunto de arquivos eu pretendo usar.
Simon B
1

Eu acho que depende da sua exposição a outros idiomas. Em cima da minha cabeça:

  • C / C ++ possui arquivos de origem separados (.c / .cpp e .h)
  • Os caracteres -> são usados ​​em C # para expressões lambda
  • As versões antigas do VB usavam 1 como índice padrão (embora isso pudesse ser alterado com o Option Base)
Robbie Dee
fonte
11
Em C e C ++, você pode definir quantas funções desejar em um arquivo.
haroba
Estou apenas afirmando que não é incomum que os módulos sejam divididos em vários arquivos. Se você desejar, poderia colocar todas as suas funções em arquivos separados usando linguagens .NET com a construção de classe parcial .
precisa
11
Obviamente, não é incomum que os módulos sejam divididos em vários arquivos e, em muitos casos, é desejável. Mas no Matlab você precisa colocar todas as funções em seu próprio arquivo, o que significa que, se você tiver mil funções, precisará de mil arquivos .
haroba
3
Comentários em HTML são parecidos <!-- ... -->. O sinal de porcentagem é usado para codificação de URL: http://example.com/()torna - se http://example.com/%28%29.
amon
Desculpe meu erro.
Robbie Dee