A programação em Python é mais rápida que em C, C ++ ou Java? [fechadas]

27

Existe uma crença generalizada entre os que quanto mais dinâmica e digitada a linguagem, mais produtivo será o programador. Guido van Rossum escreveu sobre produtividade de programação usando python em 1998 e, pesquisando na web, ainda vejo pessoas referenciando essa afirmação exata:

Sintaticamente, o código Python se parece com pseudo-código executável. O desenvolvimento do programa usando Python é 5 a 10 vezes mais rápido que o C / C ++ e 3 a 5 vezes mais rápido que o Java. Em muitos casos, um protótipo de um aplicativo pode ser escrito em Python sem escrever nenhum código C / C ++ / Java. Freqüentemente, o protótipo é suficientemente funcional e apresenta desempenho suficiente para ser entregue como produto final, economizando tempo de desenvolvimento considerável. Outras vezes, o protótipo pode ser traduzido em parte ou no todo para C ++ ou Java - a natureza orientada a objetos do Python torna a tradução um processo simples.

Este problema foi adequadamente avaliado cientificamente? Se não for para , talvez para linguagens de script de irmãos como , ou ?

Não estou procurando racionalizações, analogias ou explicações sobre por que isso pode ser difícil de responder, a menos que seja a opinião de pesquisadores ou especialistas que dedicou algum tempo para analisar o problema.

Inicialmente, fiz essa pergunta no skeptics.SE , e alguém sugeriu que eu deveria fazer aqui também.

Kit Sunde
fonte
25
Bem, como você restringiu o conjunto de respostas possíveis, ouso comentar fazendo outra pergunta que deve ser respondida primeiro (imho): Existe uma métrica confiável e estabelecida para medir a "produtividade de um programador"?
precisa saber é o seguinte
1
@ Paul Michalik - Eu suporia que qualquer trabalho de pesquisa que visasse a produtividade teria uma definição incluída (caso contrário, seria realmente difícil de medir). Portanto, se alguém referisse a pesquisa, seria útil se eles incluíssem a definição na resposta. Provavelmente há (suponho) várias maneiras perfeitamente aceitáveis ​​diferentes de medir a produtividade, talvez "o tempo que leva para passar vários unittests" seja uma delas.
precisa
1
@Paul Michalik - Claro, mas quantas das frases que você lê em livros, blogs, palestras e artigos de programadores são realmente testadas empiricamente? Tenho certeza de que existem maneiras melhores ou piores de medir a produtividade. Por exemplo. "Consumo / hora de café" provavelmente seria pior do que as "Linhas de código / hora" clássicas. Eu reteria o julgamento sobre reivindicações específicas de produtividade que vimos uma e posso argumentar os méritos com base nisso. As declarações de produtividade também não estão totalmente erradas, tenho certeza de que "linhas de código / tempo" medem algo quando as pessoas não estão tentando destruir a métrica.
Kit Sunde
1
Você pode estar interessado neste artigo: citeseerx.ist.psu.edu/viewdoc/...
DistantEcho
1
@ ChrisF - Você está dizendo que este questionário não é aplicável ao Programmers.SE? Certamente é para os céticos, e pareceu se encaixar aqui também. Fiquei com a impressão de que você não deve até ler um comentário recente por Robert Cartaino sobre esta questão: skeptics.stackexchange.com/q/1963/631 que essencialmente diz que é perfeitamente bem se é do interesse de ambas as comunidades, e Só o fiz depois de ser solicitado por outro usuário. Considerando que a pergunta está recebendo votos positivos, parece que também é um interesse para esta comunidade.
Kit Sunde

Respostas:

17

O artigo 1 de Ousterhout sobre linguagens de script sugere que, quanto maior o nível da programação, mais produtivo é o programador. Se considerarmos que, como Boehm diz 2 , o número de linhas que um programador pode escrever em um determinado tempo é constante e não depende da linguagem ou do seu tipo (nível baixo, programação do sistema, scripts), pode-se acreditar facilmente na afirmação. As instruções resultantes por razão de linha de código de linha podem ser uma ordem de magnitude (ou várias) melhor com linguagens de script do que com linguagens de programação do sistema.

Como as linguagens de script dependem fortemente de utilitários prontos para tarefas comuns (por exemplo, estruturas de dados, manipulação de strings), seu principal uso geralmente é aumentar a produtividade com o custo de uma velocidade de execução mais lenta, fornecendo uma sintaxe fácil de aprender e eficiente para manter os programas com. Não se recorre a uma linguagem de script quando é necessária uma velocidade de execução máxima.

[1]: JK Ousterhout, Script: programação de nível superior para o século 21 , Computador (IEEE), 1998
[2]: B. Boehm, Economia de engenharia de software , Prentice Hall, 1981

Jawa
fonte
9
Embora essa seja uma boa resposta, não se esqueça que as linguagens modernas sem script também tendem a ser fornecidas com utilitários prontos que tornam o desenvolvimento rápido. C # vem à mente. Qualquer um que sinta o Python vem com mais utilitários pré-enlatados do que o C # simplesmente conhece o Python melhor que o C #. Na realidade, ambos têm uma vasta e comparável gama de utilitários "embutidos".
Roman Starkov
@romkyns, para qualquer projeto não trivial, você precisa escrever muito código. Mesmo se você tiver muitos tijolos de Lego, os Bionicles não se juntam magicamente.
2
@ Thor, mas é realmente muito bom ter esses tijolos de Lego antecipadamente, em vez de ter que construir uma broca de óleo, uma fábrica de plástico e uma extrusora de blocos de lego primeiro.
Roman Starkov
2
o c ++ e o Java têm contêineres genéricos e o c ++ 11 tem uma biblioteca padrão tão completa para algoritmos de classificação e iteradores etc. Além disso, eu passo a maior parte do tempo programando o que preciso fazer, não digitando. Então, acho que apenas contar a quantidade de linhas necessárias para fazer algo não é um indicador claro de quão rápido você seria um programador nessa linguagem.
Sam Redway
7

Se você mede a produtividade como "tempo para escrever um programa simples e específico" , isso depende muito mais da experiência do programador e da mente rápida do que a linguagem que você realmente está avaliando, mas não a linguagem.

Acredito que concursos de código programado indicam que o idioma realmente não importa para esse tipo de tarefa. Não existe um idioma que vença esses desafios mais facilmente do que outros (pelo menos não se você permitir a relativa popularidade dos idiomas).

Se você medir o desempenho como "a eficácia do melhor programa" escrito em um determinado idioma, será ainda menos dependente do idioma. Veja, por exemplo, os resultados do concurso Galcon AI . O vencedor está escrito em Lisp. A próxima entrada do Lisp, no entanto, é classificada como # 280. O que isso nos diz sobre a adequação do idioma para criar uma grande IA com eficiência? Na minha opinião, nada. Apenas nos diz que o "bocsimacko" surgiu e implementou os algoritmos mais eficazes. Para constar, o tempo não foi um fator importante nesse concurso - as pessoas tinham mais de dois meses para desenvolver seu código.

Por fim, se você mede o desempenho como "custo de manutenção de um projeto a longo prazo" , acho que você entende alguma coisa. Especialmente se você contratar apenas as melhores pessoas para o trabalho, e contar o custo em horas-homem em vez de dólares. Eu tenho uma opinião forte sobre quais idiomas são melhores para isso, mas como não tenho evidências concretas para vinculá-lo, deixarei essa opinião de fora. Talvez alguém tenha links para esse tipo de desempenho.

Roman Starkov
fonte
7
"você está realmente avaliando o programador, não a linguagem" - não se isso for realmente feito cientificamente. Tome 100 programadores. Selecione um projeto geral como "Escreva um aplicativo de calendário com esses requisitos específicos". Os requisitos estão vinculados ao teste de unidade automatizado. 50 programadores escrevem o aplicativo em C ++, 50 em Python, selecionados aleatoriamente para que os desenvolvedores da qualidade sejam uniformemente dispersos. Os resultados seriam uma pontuação combinando o tempo médio até a conclusão com o número de testes de unidade aprovados. Compare a média dos resultados do Python com a média do resultado do C ++ e ... CIÊNCIA!
Morgan Herlocker
2
@Prof Talvez se você receber mil de cada ... mas ainda assim, como você controla o fato de que apenas pessoas com uma certa mentalidade e um certo nível de habilidade conhecem C ++?
Roman Starkov
você pode fazer com que sua amostra atraia apenas pessoas que possam passar em um teste de proficiência em C ++ e Python. Muitos dos meus antigos professores estavam fazendo estudos muito semelhantes. Além disso, você fazer um par de hipóteses que os outros têm discutido aqui: programmers.stackexchange.com/q/73715/3792
Morgan Herlocker
6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf é um dos poucos estudos que tenho conhecimento de que fez uma comparação direta real entre produtividade em vários idiomas. É antigo, mas vale a pena ler se você achar o tópico interessante. A comparação tem várias deficiências importantes sobre as quais o artigo é muito honesto.

O resultado geral é que as linguagens de baixo nível (por exemplo, C, C ++) demoram mais tempo para escrever, podem consumir muito menos memória e podem correr muito mais rapidamente. Mas com variabilidade muito alta. Linguagens de script de alto nível tendem a levar metade do tempo para escrever e têm menos variabilidade na abordagem. Em um grau inicialmente surpreendente, costuma haver uma maneira óbvia de fazer algo em uma linguagem de script.

Observe que todos os números de desempenho para Java devem ser obtidos com uma grande quantidade de sal - o artigo foi produzido nos anos 90 antes que as pessoas tivessem muita experiência com Java e antes da JVM ser otimizada. Ambos os fatores devem ter um impacto significativo.

btilly
fonte
1

Em geral, escrever um programa em Python geralmente será mais rápido do que escrever o mesmo programa em C, C ++, Java.

Também é provável que corra mais devagar.

É claro que existem aplicativos específicos para os quais outros idiomas podem ser mais rápidos, porque certas tarefas envolvidas são suportadas "de forma mais nativa".

Embora eu não conheça nenhum estudo para confirmar esse aumento de velocidade / produtividade (como um comentarista mencionou, isso pode ser difícil de medir com precisão), houve pesquisas diretas sobre a expressividade da linguagem.

Eu acho que há algum mérito na correlação entre expressividade de linguagem e velocidade de programação. Imagine um padrão de iteração simples e como uma compreensão de loop forçada ou de lista Pythonic pode ser mais sucinta. Ele não apenas pode ser digitado imediatamente mais rapidamente, mas também elimina preocupações com erros pontuais, índices fora dos limites e outros problemas que podem retardar significativamente o processo de codificação.

Isso mostra uma tabela para uma estimativa das taxas de expressividade dos idiomas. Embora deva ser tomada com um grão de sal, as notas de rodapé mencionadas valem muito a pena.

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness

jon_darkstar
fonte
-5

A última vez que usei o Java (há um certo tempo) foi necessária uma tela cheia de código para abrir e gravar em um arquivo. Compare isso com algumas linhas em Python ou Perl, e você pode adivinhar qual delas é mais rápida.

Obviamente, todas as linguagens têm suas próprias forças e fraquezas, mas para a maioria das tarefas o Python será mais rápido de escrever.

wobbily_col
fonte
6
"Levou uma tela cheia de código para abrir e gravar em um arquivo": Coloque isso em uma classe de utilitário com dois métodos write()e read()e no resto do seu acesso arquivo de projeto Java vai ser tão concisa como em Python. Eu acho que seu exemplo é um pouco restrito para comparar Python e Java (mesmo que eu concorde que Java tende a ser mais detalhado).
Giorgio
Claro, mas as linguagens Python, Perl e superiores geralmente pensam sobre essas coisas com antecedência, e assim você não precisa escrever as classes de utilidade (ou não muitas delas). O uso de uma classe de utilitário ainda leva tempo e é um princípio de código reutilizável que se aplica aos principais Java e Python, dependendo do que você está realmente fazendo.
wobbily_col
Isso pressupõe que o Java precise de 50 a 60 linhas de código apenas para abrir e gravar um arquivo. Isso simplesmente não está correto.
h22 10/01/19