Não consigo estudar programação, como faço?
Contextualização
Desde já, agradeço a todos e entendam q minha motivação é ajudar de alguma forma a criar desenvolvedores de softwares bons e conscientes do q fazem.
Eu não tenho intenção de ser o dono da verdade, pois pra tudo existem várias formas de lidar, sejam de maneira boa ou ruim, pois pra tudo depende do momento em q o mundo passa, da condição de vida da pessoa, das experiências passadas por ela, de quais objetivos ela pretende alcançar... então nada do que escrevo será 100% eficiente ou certeiro pra vc, pois o mundo muda e as coisas evoluem, até vc muda.
Então se forem aplicar o q digo, leiam, reflitam sobre a msg passada e adaptem a sua realidade. Caso não de certo, reorganize e readapte a sua vida e até busquem por outras alternativas, pois no final o q vale não é seguir à risca o q digo e sim o q vc aprendeu durante esse processo.
Resumo
Esse post tem o foco de como aprender a estudar. Ele funcionou pra mim[*], mas não pode funcionar pra vc. Msm assim, se tiver interesse, leiam até o final, pois sempre posso ensinar uma coisinha q pode mudar seu jeito de lidar com a aprendizagem.
Ele é focado para quem desenvolve software. Pode ser utilizado em outros tipos de conhecimentos, mas terá q adaptar pra realidade daquilo q está aprendendo.
Eu dividi a aprendizagem em 3 etapas:
- ambientação
- mini projetos
- desafiando seu cérebro
[*] Só uma observação, esse estilo funcionou pra mim, mas eu já tinha faculdade nas costas e 3 anos e meio de experiencia como estagiário/júnior. Eu sai da área de desenvolvimento de software e depois de anos fora eu decidi voltar. Ao voltar eu apliquei isso e já entrei como pleno trabalhando como senior. E qual foi a diferença do antes de sair e qndo decidi voltar pra area? A motivação, amadurecimento pessoal e entender o q é preciso para ser um profissional.
Ambientação
Está etapa tem o foco em deixar vc confortável com a programação. Ela pode ser utilizada para qualquer etapa em q não se conhece algo. Como a própria palavra diz: ambientar, ou se estar confortável ao mexer com certa coisa.
Por exemplo: imagine q vc nunca aprendeu a mexer no VSCode. Sua primeira ação é pesquisar sobre o q é o VSCode entendendo pra q q ele serve. Depois vc baixa e começa a fuçar o q tem nele. Ai vc pode estar seguindo um tutorial e vc começa a instalar coisas neles, ou configurar coisas nele. Nesse momento com certeza vc nem sabe exatamente o q está fazendo, mas sabe q está funcionando. Tem momentos q está diferente no VSCode, pois houve uma atualização e o botão mudou de lugar e vc não consegue configurar, ai o q vc faz? Pesquisa e continua pesquisando até corrigir o problema. Depois vc começa a programar. Faz um projeto, faz outro... Ai em algum momento, vc assistindo um tutorial vc gosta do tema. E decide pesquisar e instalar o tema. Pronto. E assim vai indo. E depois de vários dias, se vc inconscientemente decide mudar um tema, por exemplo, simplesmente vc sabe o q fazer e nem precisa mais de um tutorial de como fazer.
Isso é ambientar. É vc usar, usar, usar, e continuar usando algo até estar confortável em usar aquilo sem a necessidade de todo momento pesquisar.
Para a programação é a msm coisa. Como vc aprende uma linguagem de programação? Simples, estudando o básico, esquecendo, pesquisando de novo, aplicando, errando, corrigindo, fazendo de novo e de novo e de novo... até um momento q vc sabe o q é if, else, for, while, função/método, classe, etc.
E para uma framework? Msm coisa.
E pra SOLID, dry, testes de unidade, TDD, DDD, arquitetura hexagonal e outras coisas???? Msm coisa.
O segredo da ambientação é nunca desistir de entender. Se tem medo de usar, se tem receio de dar errado... simplesmente faça. Se não entendeu, pesquise e entenda e tente novamente. É tentativa e erro. O maior erro nessa etapa não é errar, e sim achar q aprendeu na primeira vez q ve. Lógico q tem pessoas q tem esse dom de aprender no primeiro contato e aplicar aquilo na prática, mas lembre, somos pessoas normais, não somos perfeitos. Temos dificuldades e sempre precisamos basear nas nossas limitações como humanos. Aprender de novo e de novo e de novo não é vergonhoso. Vergonhoso é parar de tentar.
Depois dessa "motivação" sobre o q é ambientar, vamos ver o q vc pode fazer para aprender.
De início, eu sempre recomendo aprender usando os tutoriais básicos de linguagem de programação. Claro, isso se seu foco for aprender linguagem de programação. Uns exemplos: SoloLearn, mimo, Codecademy, freeCodeCamp, etc.
Nesse momento de estudo dos tutoriais é quase provável q esqueça algo. Então para isso q existe os exercícios. Essa é a melhor maneira de fixar o q está aprendendo, pois desafia o seu cérebro a pensar. Uns exemplos: Beecrowd, Codewars, Exercism, LeetCode, etc.
Estes, além de treinar a própria linguagem de programação, tem a vantagem q é possível treinar algoritmos e estrutura de dados, q é uma coisa obrigatória saber.
Podem ver q nessa etapa de ambientar, é absorver a tecnologia através do estudo e exercícios. Então isso pode ser feito pra qqr tecnologia em q deseja aprender, seja um framework novo, como Node.js, Flutter, Angular, Spring, etc. Ou aprender qqr outra coisa. Basta pesquisar, estudar, entender e treinar. Se esqueceu, releia e reaplique. Se errou, procure entender o q errou e corrija.
Nessa etapa só dei a linguagem de programação como exemplo. Se deseja aprender mais sobre um framework X ou outras coisas, pesquisem. Pesquisar faz parte da sua aprendizagem aprender como pesquisar e achar as coisas. Se quer mastigadinho, pague alguém pra orientar ou faça uma faculdade. Não é esse meu foco aqui.
Se quiser uma recomendação mais sobre essa parte do q aprender, deem uma pesquisada no https://roadmap.sh/. Ele não é perfeito e pode ter uns melhores mais especializados, mas ajuda mto na orientação do q é necessário estudar dependendo da carreira em q deseja seguir.
Concluindo essa etapa, entenda q é um passo inicial para sentir confortável com o q está aprendendo. Se já conhece algo similar, mais fácil é aprender outra tecnologia semelhante. Então não precisa seguir a risca, só saiba q é necessário passar por ambientação, caso contrário as próximas etapas se tornarão mais difíceis, pois exige conhecimento prévio para conseguir avançar.
Mini projetos
Nessa etapa, o foco é aprender coisas novas. E não digo exatamente a tecnologia e sim funcionalidades. Essa etapa aqui tbm combina mto com a aprendizagem de frameworks, pois é mais fácil conhecer algo qndo existe motivação para usar.
Irei utilizar no exemplo o Flutter, q faz parte da tecnologia atual q utilizo no trabalho.
Eu quero aprender como fazer um formulário. Para isso irei precisar de TextField, Text, Checkbox e ElevatedButton. Então começo a estudar esses dai para construir um formulário. Simples não?
Agora eu quero aprender como fazer uma TODO list... bem, preciso de uma ListView, Text, Checkbox, Button. Legal, mas onde faço isso? No msm projeto?
É ai q entra o nome da etapa: Mini projetos. Seu foco nisso não é começar a criar tudo em um projeto só. Nessa etapa é começar a fazer um repositório pra um projeto, outro repositório pra outro projeto, e assim por diante.
Os mini projetos tem o intuito do seguinte: Aprender algo simples, onde vc define início, meio e fim dele. Assim vc consegue separar o q vc aprende e não começa a criar um projeto enorme q nunca termina, afinal essa etapa não é pra vc criar algo e sim para entender como algo é criado. Se vc não sabe como é como criar o formulário, então foque em fazer um mini formulário. Se vc não sabe como é um TODO list, então foque em fazer um TODO list simples.
Eu posso dar exemplos um pouco mais complexos onde pode usar para aprender. Adicionar um mapa no google maps. Fazer um jogo da velha para aprender como funciona o toque da tela. Fazer um mini chat entre 2 apps. Utilizar um package de banco de dados para entender como integrar ele no app. Fazer uma tela desktop para entender como funciona a responsividade. Colocar vídeos para funcionar no app. Fazer elementos caindo do topo para baixo na tela para entender como funciona a animação. Fazer várias páginas para entender como funciona as animações das trocas de tela. Aprender como usar a camera. Aprender como funciona as permissões em iOS e android e como implementar no app...
Bem, tem N possibilidades para aprender coisas novas. Nossa área não é só formulários, são diversas coisas q precisamos fazer e ir aprendendo. E quanto mais coisas vcs aprendem, mais fácil será pro seu futuro.
E de bonus, vc já está treinando para aprender mais sobre frameworks, e principalmente, se vc está fazendo vários projetos, vc consegue aplicar em um mini-projeto, por exemplo, um banco de dados X, e em outro um banco de dados Y, e em outro um banco de dados Z. Claro q vc pode focar em 1 só, mas é bem similar ao passo anterior, ambientar.
E quando vc cria um projeto, e depois outro e depois outro, vc tbm pode aprender mais sobre git, pode aprender como organizar um projeto flutter, entender como funciona o pubspec.yaml, conhecer mais sobre lint do dart/flutter, aprender como usar fvm, e outras coisas q só é possível qndo vc começa a mexer fora da parte de codificação.
Edit: Outra coisa adicional q pode ser feito é aprender como documentar um projeto. Isso é uma coisa mto importante q mtos iniciantes negligenciam. Assim como qqr outra coisa, vc só aprenderá como documentar fazendo. É óbvio q nas primeiras sairão um lixo, mas vc vai evoluindo conforme fizer mais e mais e mais.
Antes de concluir, também recomendo mto o uso de IA nessa parte... QQQQQQ???? Claro, use IA, kkkkk. Mas use IA com propósito e o meu propósito aqui é vc usar IA para ele sugerir funcionalidades/temas q vc pode fazer como um mini-projeto, e nada de geração de código. Eu nunca irei recomendar IA para gerar código durante a aprendizagem, pois seu dever como estudante é estudar e não ter a IA criando as coisas pra vc. Por isso a IA serve aqui, pois recomendações de quais funcionalidades aprender ajuda mto, afinal é difícil saber o q existe, claro, pra quem é iniciante.
Outra coisa q pode ser feito se não quiser usar IA é simplesmente abrir os apps já existentes e ver o q existe nele. Por exemplo, no instagram tem o feed, tbm tem edição de imagem, manipulação da camera e mtas outras coisas. E lembre, não é pra fazer as funcionalidades completas, sempre SIMPLIFIQUE, pois o foco é entender o q está acontecendo e não sair desenvolvendo um novo instagram.
Concluindo essa etapa, nesse momento o ideal é pensar em pequenas coisas e não em um super projetão pra portfólio. Afinal essa é a próxima etapa. aqui irá conhecer coisas novas q com o tempo ficará mais fácil de enxergar o q vc está fazendo e onde vc está mexendo. Ao msm tempo irá aprender a mexer na parte de projetos, onde normalmente plenos e seniors q tem mais contato, pois eles q normalmente iniciam projetos, escolhem tecnologias, plugins e etc. Portanto recomendo aproveitar bastante dessa etapa, pois é melhor q a próxima, afinal é aqui onde está o momento de aprender coisas novas.
Desafiando seu cérebro
Depois de uns meses (espero, nunca pense q as etapas anteriores irão durar dias, pq isso é impossível) aplicando as 2 etapas anteriores, vc sentindo confiável, pode iniciar essa etapa. Não é obrigatório terminar as outras para iniciar essas. Pode ser em paralelo, pois dependerá mto do nível do seu conhecimento para conseguir prosseguir por essa etapa.
Nessa etapa é onde vem a criatividade e aplicação do q vc aprender. Enquanto as outras vc foca na aprendizagem de coisas novas, aqui é onde vc foca em construir algo q vc realmente deseja construir. Eu sinceramente tenho receio disso, pois essa etapa é um "super projetão". É complicado essa etapa pq vc pode exagerar e querer fazer uma rede social completa. Eu NUNCA irei recomendar q faça isso.
O q recomendo é vc começar a pensar fora da caixa e ao invés de fazer uma rede social completa, tente fazer uma rede social simples, mas com funcionalidades diferenciadas. São essas coisas q fazem vc pensar. Copiar pode ser fácil (ou dependendo da funcionalidade um pouco difícil), mas criar algo q não existe é difícil, pois não existe tutorial, não existe ninguém q te ensine isso. E tbm pode misturar funcionalidades. Pegar algo q existe em um app de finanças e adicionar na rede social. Um exemplo é o Whatsapp/WeChat q iniciou como chat e hj dá pra fazer até pagamento por ela. Use e abuse da sua criatividade aqui.
E o bom disso é q esses projetos podem ser utilizados para o portfólio. Só pra um exemplo, eu criei um app pra ensinar japones, onde eu desenhei todas imagens e criei o sistema pra reconhecer escrita usando tensorflow na época. Claro q não criei esse sistema de reconhecimento de escrita do zero. Antes eu tinha estudado algo no antigo Xamarin e feito em Java tbm. Aprendendo lá, eu consegui entender como funcionava o algoritmo de reconhecimento da escrita, utilizei o tensorflow para criar os pontos de comparações, e com isso consegui aplicar em dart/flutter. Ficou bom? Claro q não. Existia melhores, porém eram privados. Então não tive alternativa a não ser fazer isso. E o q obtive como recompensa? Um emprego, pois os donos da empresa pequena gostaram da minha capacidade do q consegui fazer e me contrataram.
Claro q não precisa criar algo do zero, nem todos tem o dom de criar algo do zero. Só evite fazer aqueles app pokedex ou tutoriais de cursos como se fosse algo bom pro seu currículo. Claro q vc aprende fazendo essas coisas, mas elas no final não vão te ensinar algo importante nessa etapa q é algo q todos programadores fazem no dia-a-dia: como lidar com o desconhecido e correr atrás das informações para construí-la.
Na etapa anterior até teve um breve contato com isso, mas é aqui q é a prova de q realmente vc é capaz ou não de ter essa habilidade. A todo momento nós somos colocados a prova. Claro q mto do q vimos já sabemos como lidar, pois é a famosa experiência q tivemos durante nossa carreira, mas sempre terá aquele problema desconhecido, aquela coisa nova q nunca implementamos, aquela tecnologia nova q precisamos aplicar pra ontem...
Concluindo essa etapa, não deixem de se provarem. Essa é a etapa mais difícil, mas qndo está pronto, algo q vc criou e deu certo, vc sente aquela satisfação. E não deixe de documentar e destacar eles, pois pode ser seu projeto q faça brilhar os olhos de alguém. Dependendo da sua capacidade, vc pode até monetizar, mas isso é outra história q partirá pro empreededorismo, não vou entrar nisso pq mtas pessoas se frustram pq não querem aprender o básico de vendas, acham q só pq fez algo q gostou q vai chover clientes para ele.
Conclusão
Então é isso, entendam q esse processo é demorado. Não dá pra construir Roma em 1 dia (acho q era isso a frase... não lembro, kkk). Sua carreira é msm coisa. Não pense q irá fazer isso em 1 mês. Se é iniciante, bote pelo menos 2 anos nas costas ou sairá meia boca. No máximo vc pode ter sorte de ser contratado antes disso, mas como eu disse, SORTE. Ser auto-didata não é fácil. Primeiro exige a vontade de mudar e depois a atitude de fazer acontecer. Dá pra aprender via Faculdade, é mais fácil, mas terá outros desafios. E nada impede de fazer o q ensinei durante a faculdade. Qqr aprendizagem sempre será bom pra vc.
Boa sorte nos seus estudos e lembrem q a melhor arma pra aprendizagem é a curiosidade de como as coisas funcionam.