Executando verificação de segurança...
10

3 vezes que a faculdade te ensinou a programar e você não percebeu

O assunto é sempre polêmico: faculdade ou autodidatismo?

Aos que preferem a segunda opção, um dos argumentos principais seria a suposta falta de aderencia entre as grades das faculdades e as necessidades de mercado, cada vez mais dinâmicas.

Mas hoje, quero defender o ensino universitário.

Embora seja fato os déficits do ensino universitário brasileiro, existem pelo menos três disciplinas recorrentes em qualquer grade decente de curso superior, que são assuntos raros em cursos de programação ou listas de estudos de muitos autodidatas.

Então, esse post é mais que uma "defesa" ou um "gerador gratuito de polêmicas": considere essa postagem como uma dica para você, que está aprendendo a programar fora do ensino universitário. Esses assuntos são extremamente importantes e existem conteúdos disponíveis na internet, assim como boa bibliografia sobre esses assuntos.

1 - Matemática Discreta

Matemática Discreta, segundo o Wikipédia, "é o estudo das estruturas algébricas que são fundamentalmente discretas, em vez de contínuas". Em outras palavras, é a matemática dos números finitos, dos conjuntos.

E computação tem a ver com computar conjuntos finitos de dados, certo?

Em Matemática Discreta, assuntos como lógica proposicional, grafos, árvores, matrizes e funções são aprofundados.

(Aliás, arrisco dizer que a lógica proposicional é a antesala do "Clean Code". Inclusive trato sobre esse assunto nesse texto aqui)

Estes assuntos, inclusive, são a base para os outros dois tópicos que vou apresentar.

2 - Análise de algorítimos

No passado, recursos computacionais eram extremamente limitados. Quem aqui nunca ouviu sobre os computadores que levaram o homem à lua e o seu poder de processamento e memória mínimos?

Por causa de limitações desse tipo, existe campos como o da Análise de Algoritmos que, literalmente, te ensina a analisar quão eficiente o seu código está sendo, no que diz respeito a economia de memória e processamento.

Por mais que hoje os processadores, redes e memórias sejam cada vez mais poderosos, quem aqui nunca ficou anos com um celular ultrapassado travando a cada aplicativo aberto?

Ou então, pense em assuntos como computação embarcada e internet das coisas, onde programamos sobre computadores dedicados, e cada byte conta.

As linguagens modernas nos escondem coisas como alocação de memória ou ordenação de dados. Muitos novos programadores não tem sequer ideia de como a sua linguagem preferida realiza essas coisas. Saber analisar algoritmos é tudo o que você deseja antes de tomar uma decisão de projeto errada.

3 - Estrutura de dados

Outra coisa que a sua linguagem moderna preferida dificilmente mostra a você: como os dados são organizados.

Quando você manipula pilhas, filas e listas, é oferecido a você métodos como ".push", ".pop" e ".append". Mas, o que acontece por debaixo dos panos?

Quando falamos em fazer buscas e ordenações, então, as coisas ficam ainda mais obscuras. Pois, o que acontecem por debaixo dos panos, nesses casos, são árvores. Mas existem várias formas de construir e percorrer árvores. E decisões assim é que vão definir a eficiência do seu código, que é analisada através da Análise de Algoritmos.

Então, pode ser que, dependendo da situação, você queira abrir o capô do carro e garantir, na unha -- como todo bom programador deve ser hábil a fazer -- que as coisas não saiam do seu controle. Nesses momentos, você vai desejar entender melhor sobre Estrutura de Dados.

Dá pra dizer que Estrutura de Dados e Análise de Algoritmos são irmãzinhas: a primeira te ensina a escrever código mais eficiente, a segunda te ensina a analisar a eficiência desse código.

Menção honrosa: Programação Orientada a Objetos

Diferente das três disciplinas acima, POO é bem mais popular: não faltam cursos no Youtube e nas plataformas de cursos pagos. Mas nem todos os programadores iniciantes tem ciência da importância de entender POO profundamente.

Primeiramente porque POO te ensina a abstrair coisas do mundo real no mundo virtual, ou seja, definir o que é e o que não é importante representar via código.

Depois, POO te ensina a encapsular coisas, ou seja, definir o que, quem e como acessar dados.

POO te ensina, também, a não repetir código: se estou abstraindo um funcionário, um aluno e um professor, então não preciso replicar os atributos e métodos comuns a esses três tipos de dados.

Em outras palavras, dá pra falar que POO te ajuda a criar código limpo.

Concluindo

Se você embarcou em um curso universitário, precisa entender o que o objetivo dessa modalidade não é tratar "ferramentas", e sim conceitos. Dificilmente você verá alguma disciplina de "Node", ou "Django". O que se aprende nas boas faculdades, sejam públicas ou privadas, é o conceito por trás de muitos hypes que ouvimos hoje.

E dominar conceitos pode ser o diferencial entre bons programadores e programadores não tão bons assim. Se você não domina esses conceitos, dá até pra dizer que sua refatoração de código não está atingindo os níveis de excelência que poderiam estar atingindo

Mas, se você está aprendendo a programar fora da faculdade, nada te impede de procurar boa literatura sobre os assuntos que acabei de expor. Você vai ver como o seu código vai subir de nível.

Afinal, hypes passam; conceitos ficam.

Aliás, quem tiver indicações de bons livros e cursos sobre esses assuntos, ajude a comunidade nos comentários. :)

Carregando publicação patrocinada...
2

Livros eu que recomendo
(que estou lendo ou que pretendo ler)

Programador Prágmatico (lendo atualmente e é incrivel, foca em boas práticas)

Código limpo habilidades práticas do agile software (clean code)

Desenvolvimento Ágil

Entendendo Algoritmos Um guia ilustrado para programadores

Refatoração Aperfeiçoando o design de códigos existentes

14 Hábitos de Desenvolvedores Altamente Produtivos.

2