Otimização de Código - A chave para códigos de qualidade

Otimização de Código - A chave para códigos de qualidade

Em minha carreira como desenvolvedor júnior, estive procurando meios de melhorar minhas habilidades de codificação. Em uma ampla lista de poissibilidades às quais essa busca pode me levar, uma percepção muito boa que adquiri nesse processo foi a importância da otimização de código, que brevemente seria o processo no qual um sistema é melhorado na intenção de ter uma melhor performance. Em outras palavras, a otimização torna o programa melhor.

Para começar, linguagens de programação são como qualquer outra linguagem, no sentido de que uma ideia pode ser comunicada de várias formas. Deixando de lado a dimensão sonora, na escrita há várias composições para saudar alguém, por exemplo. Podemos dizer "olá" ou "oi" ou usar uma abreviação de forma que seria entendido, o mesmo é válido ao escrever código. Ao codificar, haverão várias formas de alcançar uma solução, e não existe certo ou errado nisso, mas há métricas para avaliação de código quanto a uso de recursos, velocidade e coesão.

Considerando velocidade, otimização de códico foca mais especificamente na unidade de processamento central, ou CPU. A CPU lê os comandos e os execulta, mas códigos são tratados de formas diferentes. Uma condicional if, por exemplo, para o fluxo do sistema até a condicional ser avaliada, aumentando o tempo de processamento. Num caso de condicionais aninhadas isso é repetido para cada avaliação, causando uma possível perda em performance.

Uma outra aplicação para otimização diz respeito à medição da eficiência de um algorítmo. Também conhecido como Big O Notations, existem formas de classificar e avaliar a escalabilidade de um algoritmo considerando o input e existem várias notações como podemos ver aqui. Alguns exemplos e as respectivas representações tempo vs dados de entrada, são:

# big O(1)
function salut(name){
  print("Hello, ", name)
}

# big O(n)
function salut(nameArray){  
  for (let i = 0; i < nameArray.length; i++){
    print("Hello, ", nameArray[i])
  }
}

# big O(n²)
function matrix(linesArray, columnsArray){  
  for (let i = 0; i < linesArray.length; i++){
    for (let j = 0; j < columnsArray.length; j++){
      print("Line: ", linesArray[i], " X Column: ", columnsArray[j])
    }
  }
}

image.png

Como citado anteriormente, otimização é o processo no qual um sistema melhora para ser mais eficiente. Para cada ideia que implementamos, há uma forma de expressar os comandos que resultam no resultado desejado de forma a otimizar o código de várias maneiras. Em função disso, é importante masterizar o vocabulário da lingua para que possamos aplicar todas as suas possibilidades da melhor forma.

Para concluir, otimização de código permite que um sistema faça o melhor. Como as praticas de otimização se aplicam a muitos escopos, seria necessário um artigo muito extenso para cobrir todas detalhadamente, mas caso esteja interessado pode conferir mais casos [aqui](pt.frwiki.wiki/wiki/Optimisation_de_code).