Post

O Começo de tudo: Algoritmos

A diferença entre alguém que só sabe programar e um programador de verdade está nos fundamentos. E entre eles, nada é mais fundamental do que os algoritmos. Você provavelmente já ouviu alguém dizer isso e ignorou. Eu entendo. Com frameworks novos toda semana, Stack Overflow respondendo tudo, e agora IAs escrevendo código inteiro, parece que dá pra construir qualquer coisa sem entender o que está por trás. E dá mesmo. Por um tempo. Mas sem fundamentos, você sempre bate no teto. Sempre.

Programar sem entender algoritmos é como tocar guitarra sem saber os acordes básicos. Você até engana por um tempo, mas trava quando precisa improvisar. E programação é improvisação o tempo todo. Um algoritmo é só uma sequência lógica de passos para resolver um problema. Tipo uma receita de bolo. Ingredientes entram, você segue os passos, bolo sai. Troca a ordem, pula uma etapa, vira desastre. Qualquer código que você escreve é um algoritmo. A questão é se é um bom algoritmo. Você pode resolver o mesmo problema de dez formas diferentes. Uma roda em 1 segundo, outra em 1 hora. Uma usa 10MB de memória, outra consome 10GB. Uma é fácil de manter, outra vira aquele código que ninguém quer tocar.

Se você não entende essas escolhas, está programando no escuro. Em 1936, Alan Turing formalizou tudo isso com a Máquina de Turing. Um modelo teórico simples mas poderoso: uma fita infinita, um cabeçote que lê e escreve, e regras que definem o que fazer. Qualquer problema computável poderia ser resolvido assim. Foi isso que fundamentou a ciência da computação e o conceito de algoritmo computacional: uma sequência finita de instruções, operações bem definidas e um resultado esperado. Seu código, por mais complexo que seja, é isso. Uma variação da Máquina de Turing.

Mas algoritmos existiam bem antes dos computadores. Al-Khwarizmi, século IX, deu origem à palavra com seus métodos para resolver equações. Euclides, 300 a.C., criou o algoritmo do máximo divisor comum que a gente ainda ensina hoje. Algoritmos são ferramentas lógicas que existem desde que a humanidade resolve problemas de forma estruturada. Dois códigos podem ter o mesmo resultado mas um roda em 1 segundo, o outro em 1 hora mas se você não entende como estruturas de dados e algoritmos afetam performance, vai criar sistemas lentos sem perceber. Um algoritmo que funciona com dez registros pode travar com dez milhões. Saber escolher entre uma árvore binária ou uma tabela hash pode ser a diferença entre um sistema que escala e um que quebra na primeira segunda-feira de verdade.

Frameworks mudam o tempo todo, bibliotecas ficam obsoletas,ferramentas viram legado em dois anos, mas os conceitos por trás dos algoritmos não mudam. Se você entende como as coisas funcionam por baixo, não fica refém de tutorial. Você adapta e você resolve. Logo, eu considero importante saber Complexidade de algoritmos. Big O. Tempo de execução. O que significa O(1), O(n), O(log n). Estruturas de dados básicas: arrays, listas ligadas, pilhas, filas, tabelas hash. Algoritmos clássicos: busca, ordenação, recursão. Essas são as bases.

Se você só quer fazer scripts rápidos ou sites simples, talvez sobreviva sem isso. Mas se quer resolver problemas complexos, escrever código eficiente, entender sistemas grandes, e não depender só do ChatGPT toda vez que algo quebra, então sim, você precisa disso. E não para por aí. Tem os princípios da computação, hardware, sistema operacional, memória, paradigmas. Todo o cerne da computação e do software. Vou falar sobre tudo isso. Nos próximos posts, quero entrar em algoritmos clássicos e mostrar como funcionam na prática, e também entrar no assunto de estruturas de dados.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.