Ao ignorar a base, você sabota sua carreira de programador. Entenda...
Sexta-feira, 29 de novembro de 2024.
6:02 am. Na mesa da cozinha, tomando um cafezinho…
Há um tempo, escrevi uma carta com alguns conselhos de um programador rabugento e velho (eu), baseados nas percepções que adquiri ao longo dos meus 10 anos de carreira, completados no início deste ano. Nela elenquei cinco conselhos que, ao meu ver, são essenciais para construir uma carreira sólida. Desses cinco, gostaria de comentar mais sobre o primeiro, que talvez seja o mais clichê de todos: Foque na base. Caso queira um vídeo mais detalhado sobre o tema, segue o link: Clique Aqui
Mas o que é a base? Qual é a base para programação? Seria matemática? Seria lógica? Algoritmos? Ou talvez a capacidade de ler e interpretar? Ou todas juntas? Vamos responder a essas perguntas ao longo desta carta.
O que chamamos de base pode também ser chamado de alicerce. Se olharmos o significado de "alicerce" na construção civil, encontramos:
“O alicerce é a estrutura que sustenta toda a construção, sendo responsável por transmitir as cargas da edificação para o solo de maneira segura e estável. O alicerce é construído no início do projeto e é composto por elementos que variam conforme as características do terreno e do projeto.”
Apesar de essa definição pertencer a uma área totalmente diferente da programação, ela faz total sentido para nós (seja no início da carreira ou não, pois conheço vários “plenos e sêniors” que ignoraram a base e aprenderam apenas sob demanda). O alicerce da programação é composto por um tripé.
E notar isso é muito simples: é só pegar a grade curricular de um curso de Ciências da Computação ou Sistemas de Informação. Nos dois primeiros semestres, você será bombardeado por esse tripé: Algoritmos e Estruturas de Dados (que, dependendo da universidade ou curso, pode ser dividida em duas ou três disciplinas), Cálculo e Matemática Discreta (ou Lógica Matemática).
Vou compartilhar contigo um repositório onde é feito uma uma grade de ciências da computação apenas com material free na internet.
1. Matemática Discreta e Lógica
A lógica é o que conecta tudo. É aqui que você aprende a raciocinar de forma estruturada, algo essencial para qualquer programador. Sem lógica, É como tentar cozinhar um prato elaborado sem saber usar os ingredientes básicos.
Além disso, a matemática discreta fornece as ferramentas para lidar com problemas comuns em programação. Lógica matemática, por sua vez, é a base para a construção de algoritmos corretos e sistemas que funcionam como esperado.
Você pode começar a estudar matemática discreta, começando pelos fundamentos e avançando gradualmente para tópicos mais complexos. O primeiro passo é dominar os conceitos básicos, como conjuntos, proposições, conectivos lógicos, tabelas-verdade e diagramas de Venn. Esses elementos formam a base do raciocínio lógico e são essenciais para compreender estruturas matemáticas mais avançadas. Uma vez compreendidos os fundamentos, a prática consistente torna-se indispensável. Resolver exercícios regularmente ajuda a internalizar os conceitos e a desenvolver a intuição necessária para aplicá-los.
2. Estudo de Matemática
Aqui, muita gente torce o nariz, mas é importante lembrar que a matemática não está lá apenas para "encher o saco". Estudar matemática te ajuda a desenvolver capacidade de pensar de forma abstrata, lidar com padrões e resolver problemas complexos. Mesmo que você não use, sei lá, cálculo diferencial no seu dia a dia como programador, o processo mental que você desenvolve ao estudar matemática é o que realmente importa.
Além disso, áreas como ciência de dados, inteligência artificial e até otimização de sistemas dependem fortemente de fundamentos matemáticos. Mesmo em desenvolvimento web, a capacidade de modelar problemas matematicamente pode ser a chave para soluções criativas.
Você ainda lembra das aulas de matemática do ensino fundamental e médio? Álgebra, geometria, trigonometria e aritmética. A álgebra é essencial para aprender a manipular equações, resolver sistemas lineares e trabalhar com funções, habilidades que são amplamente utilizadas na programação e na modelagem de problemas. Já a geometria é importante para compreender conceitos básicos como áreas, volumes e relações entre figuras, sendo frequentemente aplicada em problemas de gráficos e design. A trigonometria, por sua vez, fornece as ferramentas para lidar com funções como seno, cosseno e tangente, que têm aplicações práticas em gráficos, animações e cálculos geométricos. Além disso, é crucial ter fluidez na aritmética básica, incluindo operações com frações, porcentagens e números decimais, que são essenciais para resolver problemas computacionais do dia a dia.
Você pode revisitar esses conceitos na Khan Academy ou até mesmo no youtube. Existem muitos vídeos sobre assuntos relacionados a matemática básica. Depois de dominar a base, é hora de mergulhar no estudo do cálculo, uma ferramenta poderosa para resolver problemas que envolvem mudanças e acumulação. Os conceitos fundamentais incluem limites e continuidade, que formam a base do cálculo e ajudam a entender como as funções se comportam em pontos extremos ou específicos. As derivadas são outro tópico essencial, permitindo calcular taxas de variação, como velocidade ou mudanças em uma função, sendo amplamente aplicáveis na otimização e análise de sistemas dinâmicos. Além disso, o estudo das integrais é crucial, pois elas são usadas para calcular áreas sob curvas e resolver problemas de acumulação, com aplicações que vão desde algoritmos de otimização até aprendizado de máquina.
3. Algoritmos e estrutura de dados
Se você quer criar algo que realmente funcione bem, seja eficiente e escalável, não tem como fugir de algoritmos e estruturas de dados. Eles são o coração da programação. Algoritmos são as instruções que usamos para resolver problemas, enquanto as estruturas de dados são a maneira como organizamos as informações para que esses algoritmos possam fazer seu trabalho da melhor forma.
Isso é importante porque, no final das contas, programar não é só sobre escrever o “clean code” ou dominar a sintaxe de uma linguagem específica. O que realmente importa é resolver problemas de forma lógica e eficiente. Saber escolher a estrutura de dados certa pode ser a diferença entre criar algo lento e frustrante ou uma aplicação rápida e que realmente faça a diferença. Além disso, o que você aprende sobre algoritmos e estruturas de dados vale para qualquer linguagem ou framework que você for usar no futuro. É um conhecimento que nunca perde o valor.
Agora, não tem segredo para aprender isso: você precisa praticar, e muito. Existem vários sites que oferecem desafios de programação e algoritmos para todos os níveis. O LeetCode e o HackerRank são os mais famosos, mas também vale explorar o CodeWars e o Exercism, que têm propostas um pouco diferentes e podem ser mais dinâmicos dependendo do que você gosta. O importante é colocar a mão na massa, errar, corrigir, entender onde está o problema e ir evoluindo.
Quando você menos perceber, vai começar a enxergar os problemas de uma maneira diferente, mais clara e organizada.
4 - Ler e interpretar ( Bônus )
Talvez aqui esteja um requisito que é pouco explorado. Não sei se é pelo fato de ser algo intrínseco à vida. A todo momento você faz isso e acaba nem percebendo, de tão natural que é. Uma simples troca de mensagens pelo WhatsApp entre amigos já exige isso. Quando você lê um anúncio sobre um curso, um produto, enfim. Ler e interpretar é algo que muda o jogo. E, na carreira de programador, isso é muito importante, pois a todo momento você estará exposto a documentações e documentos de requisitos. Imagina receber uma regra de negócio para implementar o que você não entendeu. Ou um requisito maluco que um cliente pede e por impulso, você aceita fazer porque não interpretou direito? Isso é mais comum do que se imagina.
Ontem, enquanto conversava em um dos grupos de WhatsApp, um colega me contou que não passou em um teste para trabalhar em uma empresa na gringa porque entendeu errado um requisito de um teste prático que lhe foi pedido. Veja só, ele é um cara tecnicamente muito foda. É líder de uma área inteira de desenvolvedores na empresa onde atua, porém, por um erro ao interpretar um requisito, não foi aprovado. Isso o faz pior tecnicamente? Com certeza não. Mas se mostrou crucial para que ele não fosse aprovado. E logo agora que o dólar bateu na casa dos 6 reais! Boa sorte nos próximos testes cara, espero que você consiga sua vaga. Esse é só um exemplo que me ocorreu agora, enquanto escrevo esta carta, do quanto esse requisito é importante e, às vezes, muito negligenciado por todos, sejam autodidatas ou até acadêmicos.
Uma forma de melhorar muito a questão de ler e entender textos é a prática da leitura diária, seja de livros técnicos ou clássicos. No decorrer das demais cartas que irei escrever por aqui, você verá que sou fã de livros e encorajo o estudo por meio deles.
Mas, e se eu não passei por uma graduação?
Nem todo mundo começa na carreira por meio de uma graduação. E tudo bem! A base ainda pode ser construída de forma autodidata. Há excelentes livros, cursos e materiais disponíveis online que cobrem esses conceitos. O importante é não pular essas etapas.
Deixei aqui algumas sugestões de livros que podem te ajudar nesse estudo autodidata. Comprando por ele, você automaticamente contribui comigo.
Introdução à lógica - 2ª edição
Matemática discreta: Uma introdução
Algoritmos e estrutura de dados
Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos
Pré-Cálculo - Uma Preparação para o Cálculo
Um Curso de Cálculo - Vol. 1: Volume 1
Muitos programadores iniciantes focam diretamente em aprender ferramentas e frameworks da moda, mas se esquecem de que essas tecnologias mudam constantemente. A base, por outro lado, não muda. A forma como um algoritmo é construído ou como você analisa a complexidade de um problema continua sendo a mesma.
Construir uma carreira sólida requer paciência e dedicação. Não importa se você está começando ou se já está no mercado há anos, nunca é tarde para reforçar sua base e seguir evoluindo. E lembre-se: o aprendizado nunca para.
Obrigado por ler até aqui! Se você sentiu que algo foi útil ou provocou uma nova reflexão, não deixe de se inscrever e acompanhar e receber novas cartas.
7:24 am
Daniel Makowiesky