Por que algumas linguagens ou bibliotecas são mais rápidas do que outras?
Muitos já se questionaram o por quê de alguma linguagem de programação, biblioteca ou módulo se tornarem mais rápidos após uma atualização. Claro que há vários fatores pelos quais isso pode ser alcançado, especialmente, tratando-se de computação em nuvem e serviços SAAS onde as formas mais fáceis seriam, por exemplo, paralelismo ou ferramentas de cache. Mas vamos tratar, especificamente, de bibliotecas e linguagens de programação
Em seu seu podcast, Lex Fridman entrevistou Guido van Rossum, que dispensa apresentações onde discutiram sobre a grande melhora de performance da linguagem Python em sua versão 3.11
Em certo ponto Guido assumiu que ele não era um especialista em alguns dos assuntos nos quais ele desenvolveu as bibliotecas. Dessa forma, o que foi codificado funcionava razoavelmente bem, mas poderia ser otimizado por alguém com conhecimento mais profundo sobre o assunto.
Vamos considerar um módulo para resolução de equações do segundo grau. Para isso, precisamos pensar com a mente de um estudante de ensino fundamental, que ainda possui conhecimento muito incompleto sobre os rudimentos matemáticos.
Voltando hipoteticamente para a sala de aula do 9º ano, nosso professor senhor João Carlos Frederico Gauss 😂 propôs a seguinte função:
Após nos deixar pensando algum tempo, ele nos provocou a raciocinar que os dois primeiros termos pareciam um produto notável, um trinômio quadrado perfeito para ser mais específico.
Agora é possível substituir na equação inicial para seguirmos os passos abaixo e encontrarmos suas raízes.
No passo 2 observamos a adição e subtração do mesmo valor, isso garante a igualdade, uma vez que é o mesmo que zero. Assim, após 6 passos chegamos ao resultado, ou seja, encontramos as duas raízes da função.
Nosso querido professor, senhor Gauss passou uma lista de 30 exercícios como tarefa para casa. Após uma tarde inteira e uma boa parte da noite finalizamos a lista para entregá-lo no dia seguinte.
Ao iniciar a aula, antes de começar a correção da lista, senhor Gauss volta no primeiro exemplo e o resolve "magicamente" em apenas 2 passos.
A partir da análise das figuras 3 e 5, podemos ver que houve uma redução tanto do número de passos quanto da complexidade dos mesmos. Isso foi possível a partir da aplicação de uma formula, onde manipulamos diretamente os termos da função.
Nesse exemplo específico o conhecimento avançado de matemática foi a chave 🔑 para reduzir a quantidade de passos e a complexidade.
Assim como Guido Van Rossum mencionou no podcast, quando pessoas com maior conhecimento assumiram o desenvolvimento de uma biblioteca, elas foram otimizadas. A chave então é o conhecimento avançado do tópico em questão.
Para quem ficou curioso, abaixo segue a dedução da fórmula de Bhaskara.
Até o próxima…