Caro programador iniciante, fundamentos!
Eu sempre me preocupei em aprender a linguagem de programação, seus frameworks, os checklist das tecnologias que as vagas de emprego exigem, mas isso não estava funcionando muito bem.
Em pouco tempo, percebi que estava travado, não conseguia evoluir, estava ficando mais difícil entender conceitos mais profundos, então percebi que estava estagnado.
Eu sempre fui teimoso e batia naquela mesma tecla – talvez se eu aprender tal framework vou conseguir fazer mais com ele – mas essa outra linguagem nova pode ser mais interessante – vou voltar focar na primeira linguagem que estudei porque descobri que tem mais chances de conseguir um emprego. Na verdade, eu não percebia que o que estava me limitando a evoluir na área não era a linguagem de programação, nem os frameworks ou qualquer outro conjunto de skills. O que estava me limitando era uma deficiência nos fundamentos!
Eu tive essa virada de chave quando fui ler sobre Threads em Java e percebi que eu mal sabia explicar o que era um processo, então pensei, estou lendo sobre threads mas nem sei o que é um processo direito, como posso eu querer criar softwares, que são processos em execução, se mal compreendo o que é um! Não quero ser um programador que escreve uma aplicação simplesmente porque aprendeu que é assim que escreve, confiando nas abstrações que a linguagem ou o framework me dá. Eu quero saber como isso tudo acontece de verdade, usar um framework pela agilidade que ele proporciona, mas sabendo que posso muito bem escrever essas abstrações se eu quiser. Nesse dia percebi também que eu sabia uma linguagem orientada a objetos mas não compreendia muito conceitos de OO profundamente, sendo assim, então eu não sabia tanto essa linguagem como eu pensava!
Após isso, a primeira coisa que fiz foi estudar orientação a objetos, todos os conceitos, encapsulamento, herança, polimorfismo, entre outros. Quando entendi profundamente esses conceitos, percebi que antes tinha uma visão muito estreita da linguagem Java, e agora compreendia uma estrutura completa. E o framework Spring, comecei a entender muita coisa que estava por trás daquelas abstrações, e continuar estudando Spring ficou muito mais fácil e muito mais rápido. Comecei pegar gosto por saber mais, comecei a estudar a fundo sobre coleções, tipos de dados avançados, várias formas de manipulação de arquivos, conexão com banco de dados com JDBC … enfim, estou a um tempo estudando OS, lendo Sistemas Operacionais Modernos de Tanenbaum, inclusive acho requisito básico e indico.
O que quero dizer com isso, compreendendo melhor os fundamentos, já consigo ter uma grande facilidade para avançar nos estudos em outras tecnologias, e está sendo muito mais rápido avançar. Essa virada de chave foi muito importante. Claro que os estudos não param, nessa área o que não para é o estudo.
Ainda não sou um programador profissional, ainda estou no rumo para conseguir o primeiro emprego, porém já consigo desenvolver muita coisa bacana sozinho, mas isso tudo depois de compreender mais os fundamentos.
A Mensagem
Se você está iniciando e se identifica com a mesma situação que eu estava, a mensagem é para você, reavalie a sua base! Como está seu conhecimento nos fundamentos da computação ou minimamente da linguagem que você programa? Quando você foca nos fundamentos, tudo fica mais fácil e rápido para evoluir! É só uma dica de um programador, que como vários outros, já tropeçou nesta parte da trilha. Há! E não acredite nos cursos de três meses! rs