Existem dois princípios básicos em jogo aqui:
- Algum código é executado com muito mais freqüência do que outro código. Por exemplo, algum código de tratamento de erros pode nunca ser usado. Algum código será executado somente quando você iniciar seu programa. Outro código será executado repetidamente enquanto seu programa é executado.
- Algum código leva muito mais tempo para ser executado do que outro código. Por exemplo, uma única linha que executa uma consulta em um banco de dados ou extrai um arquivo da Internet provavelmente levará mais tempo de milhões de operações matemáticas.
A regra 90/10 não é literalmente verdadeira. Varia de acordo com o programa (e eu duvido que exista alguma base para os números específicos 90 e 10; alguém provavelmente os tirou do nada). Mas o ponto é, se você precisa que seu programa seja executado mais rapidamente, provavelmente apenas um pequeno número de linhas é significativo para que isso aconteça. Identificar as partes lentas do seu software geralmente é a maior parte da otimização.
Esse é um insight importante, e isso significa que decisões que parecem contra-intuitivas para um novo desenvolvedor podem estar corretas. Por exemplo:
- Existe um monte de código que não vale a pena fazer "melhor" , mesmo que esteja fazendo as coisas de maneira simplista e simplista. Você poderia escrever um algoritmo de busca mais eficiente para o aplicativo XYZ? Sim, mas, na verdade, uma comparação simples de cada valor leva uma quantidade de tempo trivial, apesar de existirem milhares de valores. Então não vale a pena. Pode ser difícil para os novos desenvolvedores evitar a otimização desnecessária, pois em seu programa de graduação gastaram muito tempo escrevendo o algoritmo "correto" (ou seja, mais eficiente). Mas no mundo real, o algoritmo correto é qualquer um que funcione e seja executado com rapidez suficiente.
- Alterações que tornam seu código muito mais longo e complexo ainda podem ser um ganho de desempenho. Por exemplo, no aplicativo FOO pode valer a pena adicionar centenas de linhas de nova lógica, apenas para evitar uma única chamada de banco de dados.