O desempenho mais lento das linguagens de programação é realmente uma coisa ruim? [fechadas]

18

Aqui está como eu vejo isso.

código de máquina e é tudo o que os computadores precisam para executar alguma coisa. Os computadores não se importam com linguagens de programação. Não importa para eles se o código da máquina vem do Perl, Python ou PHP. Linguagens de programação não servem computadores. Eles servem programadores.

Algumas linguagens de programação são mais lentas que outras, mas isso não é necessariamente porque há algo errado com elas. Em muitos casos, é porque eles fazem mais coisas que os programadores teriam que fazer (ou seja, gerenciamento de memória) e, ao fazer essas coisas, são melhores no que deveriam fazer - servir aos programadores.

Então, o desempenho mais lento das linguagens de programação é realmente uma coisa ruim?

Emanuil Rusev
fonte
22
mais lento de que maneira? tempo de compilação, tempo de execução, tempo de gravação, alguma outra métrica?
Matt Ellen
1
Eu apenas apontaria que computadores rápidos e compiladores que geram linguagem de máquina eficiente são obviamente bons, exceto pelo fato de permitirem que os programadores sejam mais preguiçosos. Quando os produtos apresentam problemas de desempenho, geralmente isso ocorre porque supomos que certas coisas são "rápidas", como gerenciamento de memória e notificações.
Mike Dunlavey
5
@ Mike: Como alternativa, os programas ficam lentos por causa de uma atitude que Jeff resumiu muito bem em seu blog recentemente: "Algoritmos são para pessoas que não sabem como comprar RAM". Se o programa for executado em tempo cúbico e não em horário O (N log n), a energia do computador realmente não importa para grandes problemas.
David Thornley
2
@ David: não podemos obter mais de 512 GB de RAM em nosso servidor, por isso temos que escrever algoritmos melhores agora.
JBRWilkinson
2
Depende de onde estão os gargalos. Se o programa aguarda E / S 99,9% do tempo, não importa se o programa em si é 10 vezes mais lento do que se escrito em assembly artesanal.

Respostas:

50

Eu não acho que é automaticamente ruim. O Python é mais lento que o C ++, mas quando os dois são rápidos o suficiente , o Python pode ser a melhor escolha para o problema em questão, mesmo que seja mais lento .

É sempre uma troca. Para pequenas tarefas pontuais, é muito mais rápido escrever um script Python do que um aplicativo C ++ que faz o mesmo (o exemplo típico para mim seria algum tipo de processamento em lote de texto ou percorrer uma árvore de diretórios e fazer algo com os arquivos), e eu realmente não me importo se leva 10 ms ou 1000 ms, mesmo que seja 100x mais lento, porque pode levar metade do tempo para escrever e testar.

Obviamente, seria bom se o Python fosse tão rápido quanto o C ++, então nesse sentido eu concordo com a sua afirmação de que "lento = ruim". Mas então eu prefiro uma linguagem poderosa que corra o mais rápido que eu quero, sem fazer algumas coisas (por exemplo, verificação de limites de matrizes em matrizes brutas), desde que me permita decidir quando fazer essa troca (por exemplo, usando std: :vetor).

ggambett
fonte
Eu não afirmei que "lento = ruim". No entanto, obrigado por compartilhar seus pensamentos.
Emanuil Rusev
9
+1 'rápido o suficiente' Lento é ruim quando uma implementação é 'muito lenta / não é rápida o suficiente'. Qualquer outra hora não importa.
precisa
4
+1 'rápido o suficiente'. Dependendo do que você faz, o tempo do programador pode valer MUITO mais do que a economia potencial em tempo de execução.
Jonas
3
@ Jonas: quase nunca é o caso, é só que você vê o salário do programador; você não vê os usuários pendendo a cabeça em frustração enquanto o aplicativo se arrasta gritando "vamos lá, quão difícil é isso, você pilha de porcaria de software". Se eles publicassem o custo total de propriedade do software lento v software rápido - você veria suas prioridades sendo alteradas imediatamente no departamento de vendas.
Gbjbaanb
1
@mcmcc: Eu não estava falando sobre idiomas lá, mas sobre a experiência do usuário. Quando você clica em um botão, algo precisa acontecer imediatamente. Quando você inicia um cálculo, tudo bem se demorar um pouco, desde que exista um indicador de progresso útil.
Jonas3
18

Bem simples - ser lento é uma coisa ruim

quando o programa requer um certo nível de desempenho

porque sem esse desempenho você não está cumprindo os requisitos.

Pode ser qualquer coisa, desde um aplicativo de negócios que precisa processar consultas em um período aceitável de tempo até um jogo que precisa exibir muitas informações na tela a qualquer momento. Se o programa não for rápido o suficiente, simplesmente não funcionará .

Kirk Broadhurst
fonte
2
..e muitas vezes os requisitos não estão escritas em uma espécie de "mais de X segundos para buscar uma página faz com que o movimento médio usuário do site para outro site, em vez" maneira
JBRWilkinson
1
@JBRWilkinson sim, ou se o sistema é muito lento, em seguida, novos requisitos de desempenho vai aparecer de repente;)
Kirk Broadhurst
12

Veja desta maneira: os computadores são estúpidos . Eles seguem as instruções que qualquer idiota com uma tabela trigonométrica pode seguir. Eles insistem obstinadamente em fazer o que você disse em vez do que você quis dizer. Nem um pingo de autodireção ou intuição. É horrível.

A única coisa que um computador tem para oferecer é: é rápido. Realmente! Um knucklehead com um arquivo pode fazer o mesmo trabalho que um banco de dados. Um cara que trabalha com uma máquina de impressão pode fazer o que o Apache faz. Seriamente! E eles fizeram isso, por centenas e centenas de anos, na verdade. Por que um computador é bom para QUALQUER COISA é a sua velocidade.

Portanto, uma linguagem de programação que (comparada com outras linguagens) falha ao explorar que está perdendo a ÚNICA vantagem de usar computadores.

Dan Ray
fonte
13
Está faltando uma parte importante: os computadores são estúpidos, rápidos e previsíveis , enquanto erratum humanum est. E, em muitos casos, essa previsibilidade é muito mais importante do que uma velocidade absoluta.
SK-logic,
5
Qualquer linguagem de programação explora a velocidade do computador. O Python em um dos computadores OLPC originais faz as coisas muito mais rapidamente do que eu manualmente. Lembre-se de que meu laptop atual (comprado há dois anos e que não é de primeira linha) é cerca de cem mil a um milhão de vezes mais potente que o meu primeiro computador em casa da maioria das maneiras.
David Thornley
4
Sem mencionar que um computador consome muita energia para usar (principalmente servidores) e que existe uma preocupação com o consumo de energia (a tecnologia verde), e que geralmente um programa mais rápido faz mais com a mesma quantidade de energia que um computador. programa mais lento, de modo que as contagens (particularmente nos servidores, que consomem uma grande quantidade)
Coyote21
4
@ SK-logic A previsibilidade do computador é exagerada. Como Joseph Weizenbaum apontou muito bem, o sistema grande tende a ficar tão complicado que não é previsível e ninguém é capaz de prever o resultado de uma determinada execução. Torna-se uma questão de fé ou esperança. Você não pode provar formalmente que um programa sempre fará o que você pretendia (portanto, não é previsível).
Omar Kohl
2
No entanto, se a velocidade (de execução) é o objetivo final, por que todos não escrevemos nossos programas em código de máquina?
Emanuil Rusev
5

Uma linguagem de programação pode ser de nível muito alto, "faça muito", ainda seja muito rápida. OCaml é uma linguagem de nível superior ao PHP, mas está produzindo um código quase tão rápido quanto C. Javascript é tão dinâmico quanto PHP, mas pode ser executado muito rapidamente. Portanto, é principalmente um problema com uma implementação de linguagem, não um design. Linguagens dinâmicas são mais difíceis de implementar eficientemente, mas não são impossíveis.

SK-logic
fonte
Você acha que linguagens consideradas lentas (em termos de execução), como PHP, podem ser implementadas para serem executadas mais rapidamente?
Emanuil Rusev
1
Zend Optimizer alguém?
user281377
Deixe-me perguntar isso de outra maneira - o que na implementação do PHP torna lento?
Emanuil Rusev
6
Sim, pode ser implementado melhor. Isso exigirá muito esforço - uma interpretação abstrata para especializar tipos dinâmicos, por exemplo, é uma coisa bastante complicada e ainda não foi bem pesquisada. Uma linguagem estática é muito mais fácil de converter em um código altamente eficiente. Portanto, o PHP é lento principalmente porque é dinâmico. E, bem, originalmente tinha uma implementação muito ruim e não profissional, além de muitas outras linguagens de script.
SK-logic,
O compilador HipHop, iniciado pelo Facebook, pode converter PHP em código C ++, por isso é muito rápido.
JBRWilkinson
3

A velocidade pode ser medida em termos de tempo de execução, tempo inicial de desenvolvimento e tempo de manutenção (tempo necessário para resolver problemas / bugs e produzir um novo código e implantá-lo).

As linguagens de script geralmente têm um tempo de execução mais lento, mas um tempo de manutenção mais rápido, porque muitas vezes você pode fazer uma alteração rápida e implantar sem precisar reconstruir um sistema inteiro e, às vezes, sem precisar parar e reiniciar.

Portanto, muito é um equilíbrio, dependendo da velocidade que você precisa.

O contexto também é importante. Carregar sua configuração inicial levando 0,5 segundos em vez de 0,1 segundos não é grande coisa, mas em tempo de execução, levar 0,5 segundos para executar uma consulta em vez de 0,1 segundos pode ser um grande problema se ele tiver que lidar com 100 consultas, levando 50 segundos em vez de 10)

CashCow
fonte
100ms é efetivamente instantâneo na percepção do usuário. 500ms é bastante perceptível. Se o usuário estiver executando consultas, é uma diferença notável no fluxo de trabalho.
David Thornley 22/02
3

Simples - os clientes adoram software rápido. De fato, todo o objetivo dos computadores é calcular rapidamente.

Nemanja Trifunovic
fonte
11
errado, na verdade. Os clientes adoram softwares que atendem aos requisitos e dentro do orçamento. Eles não se importariam se a tela levasse 19 milissegundos para construir em vez de 15, porque eles nunca notam (se levar 15 segundos para construir, isso é outra coisa). Eles também não se importam se você usa uma "linguagem rápida", eles apenas querem algo que atenda às especificações e dentro do orçamento.
jwenting
4
19 ms vs. 15 ms pode não fazer a diferença, mas definitivamente 500 ms vs 300 ms faz e pode fazer a diferença entre um produto de sucesso e uma falha.
Nemanja Trifunovic 22/02
2
+1 "Os clientes adoram softwares que atendem aos requisitos e dentro do orçamento". Por outro lado, certos usuários finais, que não estão pagando diretamente pelo software, como funcionários de uma grande empresa, não se importam com os custos de desenvolvimento. Obviamente, como fornecedor de software, sua tarefa mais importante é manter as pessoas felizes, que realmente pagam a você.
Zsolt Török
@ Zsolt: Isso realmente depende do tipo de software que você está desenvolvendo. Normalmente, trabalho em produtos em que os usuários finais pagam pelos produtos diretamente ou influenciam as decisões de compra - eles não nos fornecem especificações e não se importam com o nosso orçamento. Talvez eu devesse ter usado o termo "usuários", em vez de "clientes".
Nemanja Trifunovic 22/02
4
Falando como usuário (e não como desenvolvedor), posso dizer que a capacidade de resposta geral (nota: diferente da velocidade) é um fator importante na minha decisão de escolher um programa em vez de outro. Essa é uma das razões pelas quais uso poucos aplicativos Java, por exemplo; o tempo de inicialização apenas na JVM resulta em aplicativos que começam com -5000 pontos nessa área;). Sério, no entanto, a capacidade de resposta pode (muitas vezes) fazer a diferença entre a interface do usuário do seu produto ser desajeitada ou eficaz, e às vezes isso pode ser difícil de alcançar se o idioma que você estiver usando induzir interrupções ou E / S longas do disco.
Billy ONeal
3

Lento é relativo. Se eu tiver um requisito para ler uma porta 10 vezes por segundo, um idioma que não pode criar um binário que possa fazer isso é muito lento. Se eu estiver escrevendo um aplicativo Web em que a sequência de solicitação / resposta entre servidor e navegador / cliente é medida em segundos e é provável que o usuário gaste minutos em uma tela antes de clicar em um botão, uma linguagem de programação que pode lidar com o processamento de solicitações em 1 segundo é provavelmente rápido o suficiente (a maioria, é claro, é muito mais rápido).

Obviamente, a linguagem de programação pode ser um fator na determinação da velocidade de execução, mas essa não será a linguagem em si, mas os compiladores e / ou tempos de execução que a acompanham. Isso fica claro no desenvolvimento do Java, onde o desempenho das JVMs (mesmo em ambientes de hardware idênticos) ao longo dos anos aumentou radicalmente. E é claro que sempre é possível escrever código terrivelmente lento em qualquer ambiente que você escolher. Como declarações como "C ++ é dez vezes mais rápido que Java" são automaticamente falsas, a menos que qualificadas e quantificadas sobre exatamente quais condições foram testadas e como. É igualmente possível criar um teste em que o Java é mais rápido que o C ++, tudo depende do que você está usando como código de teste e de como executá-lo.

jwenting
fonte
3

Como as linguagens de programação não existem para atender aos programadores, elas existem para criar programas para atender aos usuários.

Se você só precisa de uma pequena ferramenta pessoal simples para fazer algo uma vez, ela pode ser tão lenta quanto você deseja. Mas quando você começa a implantar para os usuários, eles se preocupam com a velocidade e o dimensionamento, especialmente se eles vão usá-lo repetidamente. (Por exemplo, um instalador pode ser lento; é melhor que o programa instalado não seja.) E não é apenas o idioma; é o programa em geral. Se o seu programa estiver lento, os usuários não gostarão. E se você tem concorrência, os usuários que não gostam do seu programa são uma coisa muito ruim. Portanto, um idioma que contribui para que os usuários não gostem do seu programa (tornando-o lento) é ruim.

Faço parte de uma equipe que cria software de controle para mídia de transmissão. Há uma boa chance de que sua estação de rádio ou TV favorita esteja funcionando se você estiver nos EUA. O desempenho é uma das coisas que mais ouvimos dos clientes. Foi originalmente escrito para pequenas operações de estação única, mas agora assinamos grandes redes de transmissão e cabo com centenas de canais, e a escala começa a se tornar um problema. Se não podemos fazer as coisas correrem rápido para eles, eles levarão seus contratos de milhões de dólares para as pessoas que puderem, e nós acabaremos sem emprego. É por isso que usamos uma linguagem rápida e compilada e otimizamos o uso de nossos bancos de dados.

Mason Wheeler
fonte
3

Porque mais rápido é melhor. Tempo é dinheiro. Se você escreve um software de servidor e usa uma linguagem de programação mais lenta, compra mais servidores. Se você escreve um software encolhido, perde clientes para os rivais mais rápidos.

Para qualquer tipo de software duradouro usado por pessoas, geralmente o queremos o mais rápido possível. No nível da Assembléia, o tempo de colocação no mercado aumenta demais e não é rentável. É tudo uma troca. Do ponto de vista comercial, pode ser mais lucrativo permitir que os programadores pobres depurem erros de memória em C ++, fazendo isso por vários meses, se isso significa que o produto é mais rápido que seus rivais.

Portanto, a velocidade é realmente importante em muitos softwares. Hoje em dia, linguagens lentas são consideradas "ruins" porque são muito lentas (o Python pode ser facilmente 50x - 100x mais lento, e isso é demais)

kizzx2
fonte
2

Existem linguagens de programação para atender aos programadores.

Não sei como você chegou a essa conclusão. Eu diria: engenheiros de software usam linguagens de programação para suas necessidades.

Algumas linguagens de programação são mais lentas que outras, mas isso não ocorre porque há algo errado com elas.

Esta é também uma declaração flakey. Defina o que você quer dizer usando a palavra 'mais lento' aqui. Mais lento pode significar:

  1. Os programas finais, que alcançam a mesma coisa, são executados 'mais lentamente' em um idioma em comparação com outro.
  2. O tempo necessário para criar o programa final pode ser mais longo (portanto, alguns o descreveriam como "mais lento").

Esses dois problemas que vêm à mente também estão entrelaçados, onde há algum tipo de troca entre o tempo gasto em desenvolvimento e desempenho.

JK
fonte
3
Você está certo ao dizer que "os engenheiros de software usam linguagens de programação para suas necessidades". Isso suporta apenas a afirmação de que "existem linguagens de programação para atender aos programadores".
Emanuil Rusev
1
Eu diria: os engenheiros de software usam linguagens de programação para resolver problemas (que normalmente não são seus, mas dos seus clientes).
Péter Török
@Emanuil: Eu não diria que "um martelo serve para um faz-tudo / humano", mas que um martelo é usado para concluir uma tarefa (por exemplo, martelar um prego, bater em alguém que você não gosta, etc.). @ Péter: Gostaria de saber quantas pessoas escrevem '@ Peter'. Mas se você pode cunhar o termo 'problema' para tudo , acho que nossas declarações são efetivamente sinônimos.
JK
1

Como qualquer software, ser lento pode ser um sinal de problemas subjacentes / design incorreto. É certo que o design é um pouco zeitgeist, mas isso não diminui o fato de que os princípios de design nos quais agora se baseia estão desatualizados e considerados "ruins".

Veja o ASP clássico e o ASP.net, por exemplo.

Tom
fonte
1

Alguém comentou que "os clientes adoram softwares que atendem aos requisitos e dentro do orçamento". Bem, isso é verdade - mas tem bastante influência no software lento, e isso, quase por definição, significa linguagens de programação mais lentas (e estruturas) e algoritmos e configuração. Uma linguagem de programação lenta é possivelmente a parte mais importante de todas as opções acima, simplesmente porque é uma base da qual você achará mais difícil mudar. Se você usa um banco de dados Oracle e precisa de mais desempenho, pode otimizar as tabelas / index / etc. Fácil. Se você tiver um algoritmo ruim no seu código, poderá escrever um código diferente. Se sua estrutura for lenta, você poderá substituí-la - isso não é tão fácil, mas é factível sem reescrever tudo. Se o seu idioma estiver muito lento, você deverá praticamente iniciar novamente.

Veja no Facebook os problemas que eles enfrentaram para fazer o PHP funcionar rápido o suficiente quando precisavam ser dimensionados.

Para o resto de nós, os 'requisitos de desempenho não funcional' geralmente são gravados em especificações, especialmente para aplicativos da Web escaláveis. O não cumprimento da página 'deve ser exibido ao usuário dentro de 2 segundos após a solicitação "e você perde o contrato (ou paga multas). Portanto, sim, os clientes adoram softwares que executam reqs - e esses reqs dizem que precisa ser rápido . (você pode não se importar quanto tempo os usuários gastam olhando para a ampulheta, mas o cliente com certeza o faz - é um custo enorme).

Por exemplo, em uma grande central de atendimento, disseram-me que eles determinaram que, a cada segundo que você poderia economizar no processo de tomada de chamadas, um atendedor de chamadas poderia ser "reduzido". De repente, é dinheiro real e um grande incentivo para os chefes obterem software mais rápido, eficiente e mais utilizável.

Passa muito tempo se preocupando com os programadores criando códigos o mais rápido possível (e depois testando e refatorando a unidade o tempo todo, risos). Descobri que isso não é um fator tão grande quanto as pessoas pensam - se você é um especialista em seu idioma, pode codificá-lo muito mais rapidamente do que se não tiver experiência. Portanto, um desenvolvedor especialista em C ++ pode escrever código com mais rapidez e precisão do que um desenvolvedor iniciante em PHP. Então, acho que me tornar um especialista é mais importante do que escolher uma linguagem 'fácil' e é por isso que não gosto do culto à 'reescrita nas coisas novas e legais' que parece estar em toda parte hoje.

gbjbaanb
fonte
1

Vou salientar que a maioria dos problemas de desempenho existe porque o programador fez um trabalho ruim, não porque a linguagem era muito lenta. Realmente, há muitas coisas mais relevantes para se preocupar no desempenho do que o idioma que você escolhe. Isso seria aproximadamente o número 1.203.407º da minha lista.

HLGEM
fonte
0

Então, o desempenho mais lento das linguagens de programação é realmente uma coisa ruim?

Tudo o resto é igual, ir mais rápido é uma coisa boa. Afinal, ninguém realmente quer esperar mais alguns resultados e, uma vez que esse resultado seja feito, pode liberar recursos para outras coisas.

Mas nem tudo o resto é igual. Para iniciantes, também é importante produzir o resultado certo , ou pelo menos o suficiente. (Se resultados completamente errados forem permitidos, você poderá produzi-los com muita rapidez e eles terão exatamente zero valor para qualquer pessoa.) Se uma alteração em um idioma um pouco mais lento aumentar a probabilidade de que o resultado certo seja produzido, normalmente é um ótimo trade-off. As linguagens de nível superior têm uma vantagem sobre as de nível inferior aqui, pois seu conjunto mais rico de modelos geralmente facilita a expressão de um problema complexo sem muitos detalhes explícitos.

Em geral, também é importante gerenciar o custo de produção do software, adicionar novos recursos conforme desejado e mantê-lo funcionando à medida que os sistemas subjacentes mudam. Linguagens de nível superior geralmente permitem uma recuperação mais rápida da programação e há muito valor em manter os custos da programação dentro do orçamento. De fato, manter os custos baixos permite que coisas mais diferentes sejam alcançadas em geral, o que geralmente é uma coisa boa.

O ponto chave final a ser observado é que não é necessário usar apenas um idioma e que muitos sistemas de software têm a maioria de seus componentes que não são críticos para o desempenho. É sensato usar uma linguagem de baixo nível para produzir componentes de alto desempenho para os bits críticos, enquanto deixa as partes menos críticas em uma linguagem de alto nível (para minimizar o custo de produzi-las) é eminentemente sensível. Além disso, os recursos que compõem uma boa linguagem de baixo nível (a capacidade de controlar com precisão o que a máquina faz) não são os recursos que compõem uma boa linguagem de alto nível (a capacidade de inferir os detalhes de descrições muito menores): são diametralmente opostos, portanto, ser capaz de uni-los e usá-los como força e evitar suas fraquezas, é realmente uma grande coisa.

Quais componentes devem receber o tratamento de alto desempenho? A otimização? Meça- os. Perfil deles. Encontre a verdade em vez de adivinhar. Concentre seu esforço onde ele faz mais bem.

Donal Fellows
fonte