As comparações de idiomas são significativas? [fechadas]

8

Dr. Bjarne Stroustrup em seu livro D&E diz

Vários revisores me pediram para comparar C ++ com outros idiomas. Decidi não fazer isso. Assim, reafirmei uma visão de longa data e fortemente defendida: "As comparações de idiomas raramente são significativas e, com menos frequência, justas". Uma boa comparação das principais linguagens de programação exige mais esforço do que a maioria das pessoas está disposta a gastar, experiência em uma ampla gama de áreas de aplicação, uma manutenção rígida de um ponto de vista imparcial e imparcial e um senso de justiça. Não tenho tempo e, como designer do C ++, minha imparcialidade nunca seria totalmente credível.

- O design e a evolução do C ++ (Bjarne Stroustrup)

Você concorda com esta afirmação " Language comparisons are rarely meaningful and even less often fair"?

Pessoalmente, acho que comparar um idioma X com Y faz sentido, porque oferece muitas outras razões para amar / desprezar X / Y :-P

O que vocês acham?

Prasoon Saurav
fonte
1
Muitas questões hipotéticas de programação desaparecem quando os codificadores são forçados a pensar no lado comercial das coisas. Se você está escolhendo um conjunto de idiomas para desenvolver algo novo, não é forçado a compará-los? A experiência existente é importante, bibliotecas, estabilidade, perspectivas futuras, mas os recursos da linguagem também são importantes, não é? Principalmente se os acionistas ou pessoas de negócios querem saber por que você escolheu A, B e C. Se você se atreve a dizer a eles que o Python não é diferente de assembly, eles esperam que você escreva a funcionalidade no ASM na mesma velocidade.
Job
Por trás disso, acho que Bjarne está falando sobre a comparação de C ++ com Objective-C e Eiffel. As linguagens tinham objetivos de design completamente diferentes, portanto, um kludge pode ser completamente necessário.
Macneil 29/11

Respostas:

13

eu amo comparar linguagens de programação!

eu comparo o java com uma brisa quente com uma pitada de chuva

eu comparo C # ao lindo dia de primavera com nuvens brancas macias o suficiente para manter o céu feliz

eu comparo C a uma marreta em uma sala cheia de vidro

eu comparo C ++ a um saco de marretas em um mundo de cristais

eu comparo o VB com um velho brinquedo de corda afundando na banheira

eu comparo PL / 1 com uma bigorna enferrujada, aparafusada no chão

com o que você os compara?

Steven A. Lowe
fonte
Adoro até agora! E quanto a Perl, Python, Ruby, Clojure, Scala, etc?
Job
2
@Job Comparo Perl com um teclado espirrando. Sinta-se livre para adicionar seu próprio nos comentários!
Steven A. Lowe
2
"Lisp é como uma tigela cheia de aveia com recortes de unhas." - Larry Wall
Job
"O esquema é um carro esportivo exótico. Rápido. Transmissão manual. Sem rádio. O Emacs Lisp é um Subaru GL 4WD de 1984: 'o carro que está sempre à sua frente.' Lisp comum é o castelo em movimento de Howl. " -Steve Yegge
Inaimathi
3
(Lisp é como (em alguns aspectos (pelo menos)) (minha avó tangentes (RIP)) que falou em (interessante (normalmente (e relacionados))))
Steven A. Lowe
9

Eu acho que Stroustrup está totalmente correto. Comparar adequadamente duas linguagens em seus méritos técnicos requer familiaridade suficiente com ambas para escrever código idiomático e usar os mesmos padrões de design normalmente usados ​​por programadores que são muito produtivos em ambas as linguagens. Alguém que não possui esse nível de conhecimento de ambos os idiomas pode ver coisas que não são explicitamente fornecidas pelo idioma com o qual ele não está tão familiarizado, e assumir que haveria problemas como resultado.

Por exemplo, alguém que não usa o Python regularmente pode supor que os usuários do Python tenham problemas regularmente por causa do recuo. Ou alguém não familiarizado com o Common Lisp pode observar a falta de bibliotecas polidas, mas não sabe que a FFI é poderosa o suficiente para escrever wrappers para bibliotecas C com esforço nominal. Alguém não familiarizado com Ruby pode ver a falta de digitação estática e assumir que erros de tipo seriam um grande problema. Finalmente, alguém não familiarizado com Haskell pode ver a falta de atribuição e assumir que não pode lidar com o estado.

Agora, tudo isso pressupõe que os idiomas sejam realmente comparados apenas por seus méritos técnicos.

Larry Coleman
fonte
Eu concordo com tudo, exceto a primeira frase. Stroustrup não está bem posicionado para comparar C ++ a nada, porque ele nunca parece ser imparcial. No entanto, marque +1 por dizer que você precisa conhecer os dois adequadamente para comparar adequadamente os dois.
precisa saber é o seguinte
6

Uma linguagem é uma ferramenta. Dito isto, eu já vi ferramentas muito, muito ruins antes. Ninguém quer trabalhar com um martelo cuja cabeça pode voar e atingir outro carpinteiro no estômago. Da mesma forma, se você percebesse que o martelo de seu colega estava nessa forma, provavelmente se afastaria deles quando o usassem.

Também é importante entender realmente qual é a ferramenta. Você não pode usar uma chave de fenda e um martelo alternadamente (embora alguns tentem desesperadamente). Inferno, você nem pode usar todos os martelos de forma intercambiável; você precisa de um trenó para algumas coisas, um martelo para outras e uma aderência para outras. Se você usar a ferramenta inadequada, na melhor das hipóteses, fará um trabalho pior, na pior das hipóteses, se machucará ou será um colega de trabalho.

Em outras palavras, a comparação de idiomas é útil, pois pode evitar acidentes no local de trabalho. Tirando o acima da metáfora; é difícil saber sem comparar se um determinado idioma é uma marreta, uma chave de fenda, uma dremel ou uma serra de mesa, porque (ao contrário das ferramentas físicas) você não pode realmente dizer apenas olhando. Você precisa pensar nos recursos que ele oferece, vê-lo em ação (tentando ler partes significativas de uma grande base de código escrita nele) e, idealmente, testá-lo também. Cuidado para não cometer o erro de escrever Cobol em Python (por exemplo). Você precisa usar o novo idioma idiomamente, o que significa aprendê-lo bem. É provavelmente por isso que Bjarne diz que a maioria das pessoas não se esforça o suficiente para fazer uma comparação útil.

O tipo de comparação que começa com "Eu gosto do Blub" e continua com "Bem, eu gosto do Blub ++" é completamente inútil. Se acaba selecionando um idioma, tudo o que realmente diz é quem é mais persuasivo em um determinado grupo e / ou qual empresa de idiomas tem o maior orçamento de publicidade. Se você analisar o que uma linguagem pode fazer, quais tarefas são adequadas e onde estão suas deficiências sem recorrer a argumentos irracionais ou preconceitos pessoais, isso pode ser realmente útil.

Inaimathi
fonte
Você já experimentou martelos que podem lhe dar um tiro no pé?
1
@Thor: um monte de armas têm martelos
Steven A. Lowe
@ Thorbjørn Ravn Andersen: Eu não misturei tanto as metáforas: p Não, mas usei um martelo cuja alça estava solta (a cabeça voou quando a girei pela segunda vez; não atingiu ninguém, apenas quebrou uma jarra). A questão é que existe um martelo fraco, e dizer "você não deve comparar martelos" é apenas um conselho sensato se todos forem equivalentes ou intercambiáveis.
Inaimathi
Porém, você pode dizer que um martelo é perigoso ou explicar para que deve ser usado, sem recorrer a comparações com outros martelos.
Jhominal 27/11
3
Bibliotecas são mais como ferramentas. Os idiomas são como os materiais de que as ferramentas são feitas. Geralmente, preferimos martelos e chaves de fenda a serem feitos de aço. E muitos idiomas parecem ferro enferrujado, borracha ou brincadeira.
MJP
4

Que, exceto em algumas raras (e - raras - como em "isso acontece uma ou duas vezes na vida de um sistema solar"), geralmente leva a guerras linguísticas, em variante mais ou menos forte, e muito raramente deixa alguma prática e conclusões úteis.

Idiomas são ferramentas, não religiões. Você não compara um martelo com uma chave de fenda, mas usa aquele que se adapta melhor à sua tarefa e maneira de pensar / educação / nível de abstração necessário. Além disso, como quem faz a comparação é enviesado pelo fato de conhecer pelo menos um dos dois, ou pelo menos preferir um dos dois, é difícil encontrar um critério realmente objetivo para compará-los (existem exceções).

Torre
fonte
2
Ah, mas você deve comparar um martelo com uma chave de fenda. De que outra forma você vai saber qual dos dois o ajudará a abrir sua lata de tinta?
precisa saber é o seguinte
@ Frank Você pode usar um martelo para abrir a tinta? Eu tenho usado meu carro.
Matt Ellen
@Frank - Eu acredito que eu poderia abrir um balde de tinta com ambos;) Mas por que se preocupar (ele vem com um parafuso na parte superior de qualquer forma)
Rook
1

Se tratarmos as linguagens como produtos e todos os desenvolvedores como o mercado, podemos chegar a algumas conclusões interessantes:

  1. Os produtos nem sempre competem. Por exemplo, Haskell não resolve os mesmos problemas que Java, que não resolve os mesmos problemas que o Assembly, que não resolve os mesmos problemas que o Prolog. Um desenvolvedor, em diferentes situações, pode usar todos esses idiomas. Comparação implica competição por superioridade. Portanto, não faz sentido comparar idiomas que não competem.
  2. A visibilidade no mercado significa que o produto já se provou útil para alguém. Ou seja, você pode comparar Ruby e Python tudo o que quiser - as pessoas fazem isso o tempo todo. De alguma forma, isso não parece mudar a mente de ninguém (ou, se o faz, o mesmo número de pessoas muda de idéia na outra direção). Da maneira que importa, Ruby e Python são equivalentes. É como duas empresas gigantes de refrigerantes fazendo comparações "científicas" de seus produtos. Um estudo mostra que a Coca-Cola é superior, enquanto o outro mostra que a Pepsi é superior. Mesmo que os dados sejam confiáveis, isso não significa nada. Todos sabemos que eles são perfeitamente bons refrigerantes (linguagens de programação) e que apenas apela mais ou menos ao meu gosto pessoal.
  3. As comparações de idiomas são uma forma de marketing nerd. Se houvesse algum lugar perfeitamente objetivo para iniciar uma comparação, eles poderiam ser úteis. Claro que não existe. Qualquer um que se incomode em fazer uma comparação está tentando confirmar um viés existente. Eles estão tentando vender um idioma. Novamente, se C ++ é tão ruim ou VB é tão ruim ou Erlang é tão ruim, então por que as pessoas as estão usando? Você pode fazer todas as reivindicações que desejar, mas isso não impede que elas sejam úteis. Nossa suposição é que as pessoas são burras demais para ver a verdade diante delas, mas a verdade é provável que o "mercado" seja mais complexo do que imaginamos. As comparações nos dizem mais sobre a pessoa que faz a comparação do que sobre os produtos que estão sendo comparados.
Roger escasso
fonte
0

Stroustrup está completamente correto.

A maioria das "comparações de idiomas" é realizada com um resultado específico em mente, que é "mostrar" que um é "superior" ao outro.

Geralmente, isso significa escrever um trecho de código nos dois idiomas e medir o desempenho do executável gerado, escrevendo um idioma altamente otimizado e o outro deliberadamente com desempenho ruim. É assim que o mito "Java é lento" se perpetua. Os "testes" para "provar" são escritos deliberadamente para não medir o desempenho da execução do código Java, mas o tempo de inicialização da JVM. Pegue, por exemplo, uma operação matemática simples e faça um loop 100 vezes, faça isso em Java e C ++, compile a versão C ++ com a otimização ativada, a versão Java sem sinalizadores de otimização e execute as duas versões executáveis. A classe Java executará muito mais tempo que o executável C ++, simplesmente devido ao tempo de inicialização da JVM. Isso não mostra que "Java é lento" mas que o tempo de inicialização da JVM significa que o Java não é a ferramenta adequada para processos de execução muito curtos (nenhuma linguagem interpretada ou qualquer outra coisa que exija o carregamento de um tempo de execução). Se o teste foi escrito corretamente para ser executado por um período de várias horas com bases de código e sistemas de compiladores usando níveis equivalentes de otimização, os resultados são bem diferentes (provavelmente mostrando um desempenho bastante semelhante).

E esse é apenas um exemplo (com o qual estou familiarizado).

jwenting
fonte
0

Como gerente de projeto, você deve fazer algumas comparações para escolher o idioma em que seu software será codificado. Os critérios podem não ser técnicos:

  • O idioma é adequado para a tarefa
  • O idioma está disponível em todas as plataformas de destino
  • Qualidade, confiabilidade e custo dos compiladores
  • Existem programadores disponíveis que conhecem esse idioma, eles são competentes, caros, criativos
mouviciel
fonte
1
Embora possa haver menos programadores familiarizados com linguagens mais novas e avançadas, eles tendem a ser altamente capazes.
precisa