As 5 bases

Quando eu era menor treinava futebol.

90% do treino era repetição de coisas básicas - como passes, chutes e treino físico.

10% do treino era jogo em si.

Se você pensar - faz sentido. Treinamos o básico várias vezes até virar natural. Só aí começamos a jogar.

Geralmente, cursos de programação seguem essa mesma estrutura.

Aprendemos o básico - que é lógica - e depois ficamos repetindo exercícios até essa lógica virar memória muscular.

Só que tem um problema.

No treino de futebol, já sabemos o que é futebol. Quem chutar a bola mais vezes no gol adversário, vence.

O jogo em si é simples o suficiente.

Logo, todo treinamento de conceitos básicos faz sentido. Fazemos e repetimos tudo aquilo para conseguir marcar e receber menos gols.

Existe uma linha de raciocínio por trás do treino - que nos motiva a continuar.

Na programação, não há isso. Não temos a percepção óbvia do que seriam os "gols".

Por que aprender lógica? Qual é o objetivo disso tudo? Como conectar tudo isso?

Assim como no treino de futebol, a resposta está no jogo como um todo. Se você entende o jogo da programação - isso começa a fazer sentido.

Só que ele não é óbvio o suficiente.

Entender o jogo é como receber um patch de atualização em sua percepção de mundo. Você começa a ver as coisas de uma maneira diferente.

O jogo consiste em fazer zoom-out no que você sabe e ver a programação de uma forma holística.

Não veja mais detalhes - como pequenos problemas matemáticos ou exercícios do HackerRank - como algo "final", e sim algo que faz parte de uma coisa maior.

E isso é muito mais profundo do que parece.

Por que você está resolvendo a fórmula de Fibonacci? Ou exercícios de algum site (como o HackerRank)?

"Para treinar programação" pode parecer uma resposta válida.

Mas existe uma forma muito mais efetiva de conectar tudo isso e te dar um retorno maior.

Primeiro, é necessário entender o que eu apelido de "A5B" (As cinco bases).

Assim como a base técnica futebol se sustenta em passes, dribles e chutes, a programação também tem seus pilares.

1) As 5 Bases

As 5 bases são - indiretamente - passadas em todos os cursos de programação.

E sua compreensão é essencial.

As bases são os alicerces de qualquer sistema - ou aplicação - que você utiliza.

Eles assemelham-se às habilidades básicas do futebol - como passe e drible.

Com elas, conseguirá resolver 60% de todos os seus problemas. Os outros 40% - como no futebol, são o jogo em si.

Sabendo manipular bem as bases, é possível abstrair e resolver qualquer processo real - isto é - tudo deriva delas, e delas sempre derivará.

São elas:

1. Variáveis: Imagine uma caixa onde você pode armazenar coisas, desde números até textos. Em programação, essa "caixa" é chamada de variável, e você pode nomeá-la como quiser, guardando e modificando informações conforme necessário.

Em javascript - 3 variáveis diferentes:

const cor = 'azul';
const idade = 35;
const album = 'The Dark Side of the Moon';

... E em Python:

COR = "azul"
IDADE = 35
ALBUM = "The Dark Side of the Moon"

Não é parecido?

Pesquise em outras linguagens, como Java, C#, Kotlin, C - e verá que o processo é praticamente o mesmo.

2. Condicionais: São como decisões. Se estiver chovendo, você usa um guarda-chuva. Se estiver ensolarado, coloca óculos de sol. No código, usamos condicionais para fazer escolhas com base em certos critérios.

Em Javascript:

let clima = "chovendo";
if (clima === "chovendo") {
console.log("Pegue um guarda-chuva.");
} else if (clima === "ensolarado") {
console.log("Coloque óculos de sol.");
} else {
console.log("Aproveite o clima!");
}

... Python:

clima = "chovendo"
if clima == "chovendo":
print("Pegue um guarda-chuva.")
elif clima == "ensolarado":
print("Coloque óculos de sol.")
else:
print("Aproveite o clima!")

3. Loops: Imagine ter que repetir a mesma ação várias vezes. Em vez de repetir o mesmo código, usamos loops para fazer uma tarefa repetidamente até que um critério seja atendido.

Javascript:

let contador = 1;
while (contador <= 5) {
console.log("Ação repetida: " + contador);
contador++;
}

Python:

contador = 1
while contador <= 5:
print("Ação repetida:", contador)
contador += 1

4 Arrays (Listas): Pense em uma prateleira de livros. Cada livro tem sua posição. Em programação, essa "prateleira" é um array ou lista, onde cada "livro" é um item que pode ser um número, texto ou qualquer outro tipo de informação.

Javascript:

let prateleira = ["Livro A", "Livro B", "Livro C", "Livro D"];

Python...

prateleira = ["Livro A", "Livro B", "Livro C", "Livro D"]

5. Funções: Uma função é como uma mini máquina: você insere alguns dados, a máquina processa esses dados e retorna um resultado. Em programação, criamos funções para realizar tarefas específicas e retornar valores.

Javascript:

function somar(a, b) {
return a + b;
}
// Usando a função
let resultado = somar(3, 7);
console.log("Resultado da soma:", resultado); // Resultado da soma: 10

Python:

def somar(a, b):
return a + b
# Usando a função
resultado = somar(3, 7)
print("Resultado da soma:", resultado) # Resultado da soma: 10

Se prestar atenção, verá que as bases seguem a mesma estrutura em todas as linguagens.

Pois é.

Por isso que elas são tão relevantes. Uma vez que você aprendeu elas, você provavelmente consegue resolver problemas em qualquer linguagem.

As bases trazem uma lição importante: foque no sentido e no problema - e não na tecnologia ou linguagem.

É como se lhe pedissem para chegar no número 6.

Você pode fazer 4 + 2 = 6 ou 3 + 3 = 6, certo?

O importante é que você chegou no resultado que queria.

Da mesma maneira de você pode mexer com os números e chegar no mesmo resultado, as bases funcionam da mesma maneira.

A diferença é que usamos as bases para resolvermos problemas da realidade. Problemas reais.

E aí chegamos em um ponto crucial: A realidade é mapeável.

Processos, problemas, questões - você pode logicamente mapear todas.

Sim - pensar nisso é complexo e abstrato.

Mas fique comigo. Logo fará mais sentido.

2) Aprendendo o Jogo

as 5 bases

Na programação trabalhamos com abstrações da realidade.

Uber, Mercado Livre, Amazon, Ebay, etc - todos são abstrações de problemas reais.

O Uber é a abstração de um sistema de transporte.

Mercado Livre - como o nome já diz - de um "mercado".

E assim por diante.

O "segredo" é que todas essas abstrações foram criadas em repetições em cima dos 5 pilares.

Na próxima vez que for no mercado - observe de forma mais atenta como as coisas funcionam.

O mercado consiste de diversos produtos a venda.

Se lembra dos arrays (que são listas)? Pois é - no mercado nós temos uma grande lista de produtos a venda, não?

E cada produto a venda também tem informações específicas - como nome, preço, etc, não? Se lembra das variáveis - que são de pedaços informação?

Se formos mapear o mercado como um sistema - os produtos do mercado são uma lista de variáveis.

O mercado tem, também, uma lista de fornecedores, não?

E também uma lista de produtos no estoque. E lista de clientes. E lista de funcionários. E lista de caixas. E lista de setores.

... E assim por diante.

Se um produto não está disponível no estoque, ele deveria aparecer na prateleira?

Não!

Pois é, condicionais.

E se um funcionário está de férias, ele deveria bater ponto? E se um caixa está sem funcionário atendendo, ele deveria estar aberto?

Condicionais.

E quanto aos produtos - é necessário fazer a reposição do estoque com frequência, certo?

É uma tarefa que é repetida.

Funções e loops. O produto é reposto (tarefa) até ele estar disponível novamente (loop).

Vê como podemos mapear praticamente todos os processos com as 5 bases?

Agora - note como você pode expandir isso para tudo.

Observe os processos atrelados a um posto de gasolina.

...E a um restaurante, uma padaria.

Abstrato, mas começa a fazer sentido, não?

Tente expandir isso para sua vida.

Quando você vai escovar os dentes e abre a torneira:

Enquanto a torneira não está 100% aberta, você continua abrindo o registro. Consegue ver aqui o loop, a função e a condicional?

Torneira 100% aberta (condicional), continua abrindo o registro (loop e função).

A realidade é um conjunto de estruturas e substruturas que seguem um padrão.

Criações coletivas e mentais (como processos - padaria, mercado, etc) são realidades imaginadas. A chave é saber identificar e abstrair essas realidades.

Tente identificar os padrões na sua volta - você os verá naturalmente emergir.

Mas e aí?

Você deve estar pensando: "mas e toda aquela complexidade que falam? Eu não tenho que aprender filas, threads, clean code, banco de dados e tudo isso dançando salsa ao mesmo tempo? "

Talvez. Depende do problema que você quer resolver - e como quer resolver.

3) Problemas e problemas

Empresas resolvem problemas.

Logo, o stack de uma empresa está diretamente ligado com o problema que ela tenta resolver.

Mas, o stack emerge em cima das 5 bases. Com as 5 bases - absorver qualquer stack é uma tarefa relativamente simples.

Meu ponto é - foque nas 5 bases. Qualquer outra coisa é consequência disso e de problemas que naturalmente surgem pela aplicação dela.

Não veja tudo isso como simplesmente produzir código - mas sim de manipulação de ideias. É sobre saber abstrair o mundo real em um formato digital.

É um jogo entre ideias e a manifestação - digital - de tudo.

Complexidades só surgem em cima das 5 bases após a ideia existir e após ela ser mapeada. Focar em complexidades antes de qualquer coisa não vale a pena.

É isso,

-Rapozo