Escolhendo uma linguagem de programação: Desempenho
Dando continuidade à série sobre como escolher uma linguagem de programação para um novo projeto, vamos analisar a primeira das cinco variáveis: o desempenho. Essa variável é negligenciada principalmente da computação desktop, uma vez que hoje tempos computadores modernos com vários GB de RAM e processadores com vários núcleos rodando à taxas de GHz. Vejam como era na época da criação da linguagem C . Mas custa muito pensar sobre o desempenho?
Eu sei que essa variável não é levada em conta na maioria dos programas feitos durante a graduação, afinal, o aprendiz ainda não conhece completamente as APIs e todas as possibilidades de uma linguagem. Fatos como a diferença entre String, StringBuffer e StringBuilder do Java são desconhecidos da maioria das pessoas.
Por outro lado, otimizações e técnicas do campo da Teoria da Computação e dos Algoritmos são ensinadas em algumas disciplinas, mas quanto disso é realmente utilizado? Seu gerente está ali no seu pé cobrando aquele requisito que o cliente pediu ano passado e você vai gastar tempo implementando aquele algoritmo complicado O(n), mas que demora vários dias para ficar pronto? Acho que não. E é por isso que você deve escolher a linguagem para o projeto pensando também no que a própria linguagem oferece de otimização para você, mesmo que seu código não seja dos melhores.
Baixo Nível X Alto Nível
Essa é uma dúvida recorrente. Analise com calma, pois algumas linguagens de baixo nível são a escolha certa para seu projeto. A mais famosa que conheço é C. Há casos onde é necessário utilizar Assembly. É fato: quanto mais próximo da linguagem de máquina, maior o desempenho. Mas isso tudo deve ser aliado ao algoritmo eficiente, não adianta fazer o algoritmo em C e deixá-lo ruim e cometer erros na alocação de memória, pode ser um tiro no pé se você não conhece bem o que está fazendo. Veja se o compilador oferece algumas opções de otimização de código.
Já no ramo das linguagens mais alto nível como Java, Python, PHP ou C#, existem algumas diferenças entre elas, mas no geral, o desempenho depende muito da maneira como você usa as APIs e da forma como você programa. Sim, interpretadores e máquinas virtuais adicionam uma camada de software ao seu programa e deterioram o desempenho. Isso é aceitável na maioria das vezes. É o preço a pagar pela comodidade de alocação dinâmica de memória ou uma funcionalidade que gasta várias linhas de código em linguagem de baixo nível e você faz em uma única linha de código na linguagem de alto nível. Mas veja se é possível otimizar como no caso do Java que citei acima.
Diferencial
O desempenho da linguagem está muito ligado à forma como você codifica. Às vezes você conta com uma ajudinha da linguagem outras vezes alguém oferece um compilador, interpretador ou runtime melhor, mas no geral depende muito do algoritmo. Nem sempre podemos parar, analisar e tomar a melhor escolha, isso é luxo em muitas empresas. Você chega lá, todos programando no Visual Studio com C# e .NET. Não há o que analisar ou escolher. O diferencial entre o bom profissional e o “quebra galho” é o seu talento com a arte da programação. O desempenho da aplicação é fator entre o sucesso e o fracasso de muitos projetos. Então quando possível, escolha a melhor linguagem para a ocasião, se não for, escreva código o mais otimizado que você conseguir.