Em 2012 tive a oportunidade de ingressar em um curso de tecnologia em uma universidade. Naquele momento não tinha ideia do que iria encontrar e muito menos o que iria aprender, apenas gostava de computadores e sabia que ali estava o meu futuro.
Logo no primeiro período tive meu primeiro contato com a programação de sistemas. Mesmo que de forma muito primaria, aquelas aulas de lógica e Portugol (Pseudolinguagem voltada para o aprendizado de lógica de programação) já demonstraram o que do universo da computação mais me encantaria. Desse momento em diante fui sendo exposto cada vez mais ao desenvolvimento de software, aprimorei minha capacidade lógica utilizando uma ferramenta chamada Scratch (software visual para construir pequenos jogos ou animações por meio da montagem de blocos em um conceito de quebra-cabeça), aprendi conceitos de algorítmicos e então aprendi minha primeira linguagem de programação: C. Depois estudei os conceitos de Orientação a Objetos, e em seguida Java. Só após todos esses passos fui apresentado aos conceitos de SQL, e na sequência MySQL.
Mais tarde ingressei no mercado de trabalho, precisei aprender C#, PHP, depois HTML, JavaScript e CSS, nessa ordem. De forma mais recente (nem tão recente assim), aprendi NodeJS e depois Angular e React.
Hoje quando olho para esse histórico, percebo toda a importância de ter passado por essas fases, pois elas se complementam. Não é sábio querer dominar um framework, qualquer que seja ele, se você não tiver o que eu considero o básico: boa lógica de programação.
Hoje muitas pessoas que estão iniciando a jornada no mundo do desenvolvimento de software acabam pulando algumas etapas, mergulhando de cabeça em alguns cursos online, participando de bootcamps ou fazendo a reimplementação de interfaces visuais de sistemas de empresas consagradas, mas nesse contexto optam por adotar o modelo ctrl+c, ctrl+v, sem nem mesmo refletir sobre a solução ou aplicar o desenvolvimento aprendido em alguma outro sistema.
O resultado disso é um grande número de pessoas que chegam no mercado com conhecimento de um framework A ou B, mas que precisam de alguém ditando trechos de códigos em demandas de complexidade média (as vezes baixa).
Para evitar esse tipo de erro é preciso tomar alguns cuidados no processo de aprendizado e não pular etapas, cada fase é importante e contará muito no seu crescimento e maturidade técnica. Na minha visão (e aqui é uma visão particular), existem 6 passos especialmente importantes que te ajudarão a se tornar um grande profissional na área de desenvolvimento de software, abaixo descrevo cada um deles.
Aprenda lógica de programação
Esse tópico para mim é a base de tudo. Lógica de programação vai te acompanhar durante toda sua vida na área. Quanto mais você praticar, mais experiência vai ganhar e consequentemente terá mais confiança quando se deparar com desafios lógicos. Hoje vejo muitos iniciantes com gaps de lógica, tendo dificuldades para solucionar alguns problemas simples e tenho certeza que você não quer ser mais um desses.
Por isso, busque sempre praticar exercícios de lógica, existem vários portais gratuitos para isso, estude, adquira algum conhecimento e depois comece a se desafiar nessas plataformas, o ganho será enorme. Os melhores programadores com quem trabalhei dedicavam parte de seu tempo a resolver exercícios em plataformas como o HackerRank e CodeChef. Alguns dos desafios são bem complexos, e esse é o objetivo. Caso não consiga evoluir, não desista, busque ajuda.
Não se contente com vídeo-aulas
Felizmente hoje temos uma infinidade de conteúdo audiovisual disponível na internet, gratuitos ou não, eles se tornaram um importante material de estudo para quem está ingressando na área ou mesmo para pessoais mais experientes. A gama de material é bem elevada, existem cursos básicos, intermediários, avançados, dicas, truques… Alguns com conteúdo rico, outros não muito. Mas não importa o quão bom é o material, ele dificilmente será o único consumido que lhe dará fluência no assunto.
É fundamental que você não se contente com o que acabou de assistir, busque mais informações sobre o tema, assista outras aulas, leia artigos e livros, os conteúdos tendem a se complementar e te auxiliarão a compreender o assunto e, uma vez que já tiver um bom entendimento sobre o tema, pratique. O aprendizado necessita de prática, e isso não é uma exclusividade da programação, se você quer aprender a surfar, você precisa estudar as técnicas, mas se não for para o mar, nunca aprenderá ficar em cima de uma prancha.
Caso você participe de bootcamps, leu um artigo ou assistiu um vídeo que explique como se faz uma galeria de imagem animada em JavaScript, por exemplo, pratique esse conhecimento em projetos paralelos. Não tiro a importância de publicar e manter o GitHub atualizado com seus projetos, mas tenha sempre um projeto próprio onde você possa pôr em prática tudo que aprendeu nos estudos, mas escrevendo linha a linha, compreendendo o que está sendo feito. Repita isso algumas vezes. Se não se sentir confortável, refaça o processo no dia seguinte. Será a repetição que te dará segurança durante a construção de seus projetos.
Foque em uma coisa de uma vez
Não está errado você querer ser um desenvolvedor fullstack, mas o aprendizado é um processo longo e continuo e etapas precisam ser respeitada. Assim, primeiro entenda qual área da programação mais te agrada, existem várias, por exemplo, desenvolvimento WEB, Mobile, Backend. Análise qual mais te agrada e mergulhe fundo nos estudos. Como alguns desses conteúdos são próximos, você pode ficar tentado a estudar ambos em um curto intervalo de tempo, mas acredite, será muito mais fácil esse processo quando você possui um alto conhecimento em uma tecnologia específica.
Assim, se estiver decidido a estudar backend, foque 200%, aprenda a linguagem que escolheu (e só ela em princípio), estude o paradigma de programação que essa linguagem utiliza (como orientação a objetos), descubra e se dedique ao principal framework utilizado nessa tecnologia, crie projetos de estudo variando cenários de uso, entenda quais os principais casos de uso que essa tecnologia se propõe a resolver. Esse processo será longo, mas muito agradável, acredite. Quando sentir que domina, aí sim, caso fizer sentido, busque algum outro tema e não se sinta obrigado a ser um fullstack.
Vá além de uma linguagem de programação
Conhecer bem uma linguagem de programação e seu paradigma a fundo é fundamental, mas não será só esse conhecimento que te tornarão um grande profissional. Ao passar dos meses/anos você entenderá que muitas pessoas já sofreram com programação, mas isso resultou em um compartilhamento massivo de conteúdos relevantes, padrões de projeto e arquitetura de software. Esses temas são avançados. Não se preocupem em aprender logo no início de sua trajetória, mas serão eles que te diferenciarão dos demais no futuro.
Por isso, coloque em seu roadmap de estudos esses dois temas: Padrões de projeto, que te permitirão construir software com alta qualidade e com baixa duplicidade de código; Arquitetura de software te ajudarão a ter um sistema organizado e otimizado ao seu negócio.
Existe ainda um tema complementar a esses, testes unitários e end-to-end. Quando chegar nessa fase de estudo, você vai estar focado em dois aspectos fundamentais: qualidade de software e redução de custos com a manutenção do mesmo.
Acompanhe as referências
É difícil acompanhar as evoluções do mercado e da tecnologia sozinho, especialmente para quem está iniciando a carreira de desenvolvimento. Por isso, após definir a linguagem de programação de irá se dedicar, busque identificar quem são as pessoas de referência e então siga estas em redes sociais, twitter e linkedin são um excelente canal de compartilhamento de conteúdo e é bem comum que essas pessoas compartilhem algo que irá te auxiliar em sua jornada de aprendizado.
Existem também alguns fóruns de discussões (como canais do Slack) onde podem ser trocadas ideias e pessoas estão dispostas a te ajudar em dúvidas sobre seu problema real, aproveite esses canais e contribua com respostas caso você as tenha, afinal quem compartilha conteúdo aprende duas vezes.
Tudo é uma função recursiva
Tudo isso que falei é um ciclo contínuo, na nossa área de desenvolvimento os conteúdos surgem com rápida frequência e é inevitável que você precise voltar em cada um desses tópicos ao longo dos anos. O mais importante é que você não fique neurótico, tudo bem se você sabe NodeJS, mas ainda não conhece o Deno, não tá errado saber Angular, mas nunca ter escrito uma linha em React. Tenha paciência, mas muita dedicação. O processo de aprendizado é longo, requer muito esforço, mas em alguns anos você se tornará tão bom que poderá contribuir com aqueles que estão ingressando a área.
Caso esteja iniciando no mundo da programação, te desejo muito sucesso, não desista, a caminhada será longa, mas os resultados costumam ser ótimos. Só vai!