logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Otimização e Pessimização

Eu li em algum lugar que "otimização precoce é pior do que nenhuma otimização", e a cada dia que passa eu tenho visto que isso é realmente verdade. Qual o motivo de otimizar um programa que você nem terminou? Na verdade você não sabe exatamente o que vai trazer problemas de desempenho. Então, na realidade, você não está fazendo uma otimização, e sim uma pessimização. Existem alguns conceitos básicos de desempenho que devemos seguir, mas não é justificável levarmos duas vezes mais tempo para fazer algo porque queremos bom desempenho. Faça primeiro, do modo mais rápido e correto possível, com o código simples e claro, e deixe para otimizar somente a parte problemática, se existir uma. Não tente resolver um problema que ainda não existe.

É muito comum programadores C++ terem preocupações excessivas com otimizações precoces e poucas preocupações em fazer um código seguro, que funcione, e feito em tempo hábil. Por isso que temos tantos buffer overflows e coisas assim. Não seria melhor usarmos std::string para tudo e parar de nos importar se ela faz uma (ou duas) cópias da string no retorno? Nós vivemos no mundo das VMs, do .NET e das linguagens script. Um código C++ que copia uma string desnecessariamente ainda será dezenas de vezes mais rápido do que tudo que existe por aí. E você ainda poderá otimizar se quiser (eles não).

Faça um programa que funcione, de uma maneira simples e com um código claro. Depois que tudo estiver funcionando, otimize o que ficou mais lento. Se você faz uma otimização precoce (usando ponteiros e memcpy irresponsavelmente, por exemplo), existe uma possibilidade de, além de não ficar tão mais rápido, você criar um buffer overflow esperando para acontecer. Se você escrever um código simples e PSICOLOGICAMENTE lento, você pode fazer a otimização depois, e testar especificamente aquele memcpy para se certificar que nada de errado vai acontecer. Com a otimização precoce, o seu memcpy suicida será testado junto com o resto do software, e não receberá a devida atenção. Mas o teste que será feito depois da otimização será específico para esse memcpy, e é muito mais provável que os erros sejam encontrados.

Hoje a velocidade os processadores é da ordem de gigahertz, podemos nos dar ao luxo de nos preocupar em otimizar as partes interessantes e fazer de forma simples e clara as partes menos interessantes. Mas não esqueça: já que não vai otimizar e está disposto a queimar alguns nanosegundos a mais, pelo menos faça o código de forma clara. Se seu medo é que o próximo programador a mexer no código fale que você faz código lento, coloque um comentário explicando que você tem mais o que fazer do que otimizar uma função que lê do registro e só é chamada uma vez...

PS: Sim, eu sou um programador C++.

Em 26/02/2005 05:43, por Rodrigo Strauss


  
 
 
Comentários
Matheus Saraiva | em 15/06/2005 | #
Com certeza cara! Falou muito e falou bonito.
Edgar | em 27/06/2005 | #
Que ridículo esse "tenho medinho de spam". Isso é sério e você deve no mínimo respeito aos seus leitores, ou você colocou isso justamente para induzir a não marcarem, que exponham seus e-mails e VOCÊ fazer spam?

E um detalhe: Por que o comentário final "sim, eu sou um programador C++", que isso tem a ver? Nada do que você escreveu se quer deixa dúvidas sobre sua linguagem de programação. Você colocou isso simplesmente por auto-afirmação, provavelmente é um iniciante em C++ que adora sair dizendo para todos que programa em c++ mas nunca participou de um projeto de grande porte nesta linguagem.

Edgar
Rodrigo Strauss | website | em 27/06/2005 | #
Respeito seu direito de achar certas coisas ridículas, não consigo agradar todo mundo. Ainda bem que todo browser tem um botão fechar no canto superior direito.

Se você tivesse experiência com o mercado de programação você entenderia o que o comentário final quer dizer. Eu poderia te explicar agora, mas aí fica sem graça. Quando você tiver um pouco mais de vivência na área você vai entender, não se preocupe. É que meu site tem como público alvo programadores, e pessoas que não são da área têm mesmo dificuldade de entender algumas piadas.

Ed | em 27/06/2005 | #
Tenho pouco tempo de experiência sim (somente 8 anos de C/C++) e pelo menos admito isso, perto de profissionais que conheço de 23 anos de experiência, estou engatinhando mesmo. Quanto aquilo ser uma piada, francamente, você não tem muita noção do que seja humor. Mas não vou entrar nesse mérito. Minha sugestão é que você tire pois causa uma impressão muito ruim.

Concordo que fui meio "agressivo" e admiro o fato de ter encarado com maturidade, mas que este comentário final foi típico de um profissional inexperiente em uma linguagem querendo se auto-afirmar, isso foi sim e disso eu sei por experiência, apesar de achar o contrário.

É muito comum eu receber progamadores de C/C++ aqui na empresa que dizem as mesmas coisas que você diz (me refiro a vários artigos do seu site), demonstrar ter o mesmo perfil, mas quando você joga algo complexo ficam que nem cego em tiroteiro. E comentários como o que você fez reforçam esta opinião.

Mas eu encerro esse assunto por aqui, caso você responda, vou ler sua resposta, mas prometo não escrever de volta porque isso não vai chegar a lugar nenhum.

Boa sorte com o site

Ed
Rodrigo Strauss | website | em 27/06/2005 | #
Não acho que anos de experiência diga tudo. Conheço programadores com 18 anos de experiência que continuma fazendo as mesmas porcarias de décadas passadas (talvez um pouco melhor). Você só sabe o quanto o sujeito é bom vendo no dia-a-dia e no decorrer de um projeto.

Quanto à sua "agressividade", assunto encerrado. E quanto ao meu humor (ou falta dele), isso é realmente uma coisa que não dá para discutir. Até porque eu não faço força nenhuma para ser politicamente correto ou unanimidade e isso é um site pessoal.

E eu concordo que possa haver programadores que dizem as mesmas coisas que eu, mas não conseguem tocar um projeto complexo (seja lá o que complexo queira dizer para você). Tudo que eu escrevo aqui não diz nada sobre minha vivência com projetos ou minha capacidade de colocar tudo isso em prática.
Alvin | website | em 09/10/2006 | #
Caro Edgar, pelo visto você está parado no tempo, o que o Rodrigo apresenta aqui é o state-of-the-art do desenvolvimento em C++.

[s]
Claudio Roberto França Pereira | em 06/10/2009 | #
Concordo que otimizar demais é perda de tempo, mas deixar de usar certas bibliotecas pra usar outras muito mais complexas só pra fazer o trabalho mais rápido também é besteira.

Como você mesmo postou mais recentemente, o uso do padrão (STL), mesmo podendo ser visto como uma otimização precoce, vale mais a pena que desenvolver usando o .NET Framework.
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::