Artigo original: The Self-Taught Developer's Guide to Learning How to Code

Então, você quer aprender a programar? Minha sugestão pessoal para você seria a de frequentar um bootcamp, já que eles oferecem um currículo estruturado, têm mentores, oferecem um tempo dedicado exclusivamente a aprender e promovem colaboração e criação de ligações entre os alunos (o famoso networking).

Infelizmente, nem todo mundo que deseja aprender a programar tem a possibilidade de dedicar o tempo e o dinheiro que um bootcamp demanda.

Por sorte, existe uma alternativa que muitos desenvolvedores de software conhecidos utilizaram: o caminho do autodidatismo. Ao ensinar a si mesmo a programar, você aprende no seu próprio ritmo usando recursos on-line/off-line pagos ou gratuitos.

Para ter sucesso no caminho do autodidatismo, porém, e para saltar do desenvolvedor iniciante para o júnior rapidamente, é preciso incorporar um pouco da mágica dos bootcamps na jornada do aprendizado por conta própria. Neste artigo, compartilharei algumas dicas sobre como fazer isso.

Antes de começarmos, saiba que este artigo foi, originalmente, uma fala minha em uma sessão do Developers In Vogue MTB. Decidi transformá-la em um artigo por questões de acessibilidade após receber um bom feedback sobre ela.

Então, pegue sua xícara de café ou seu refrigerante favorito, um papel e uma caneta, e saia anotando o que achar importante. Também deixarei, aqui e ali, umas citações aleatórias. Prepare-se e vamos nessa!

Como começar?

Existem cinco fases pelas quais você deve passar ao ensinar a si mesmo a programar:

  1. Escolher um nicho.
  2. Achar recursos de aprendizagem estruturados para seu nicho.
  3. Aprender.
  4. Criar algo, seja o que for!
  5. Criar laços (fazer o networking).

Vamos olhar para cada fase em mais detalhes.

Escolher um nicho

"Quer ter sucesso? Aprenda a se limitar."

Ao iniciar sua jornada como desenvolvedor autodidata, é importante que você escolha um nicho. Isso garante que você não se sobrecarregue, limita seu aprendizado e dá a você a oportunidade de dedicar sua atenção a um pequeno subconjunto, para que você possa criar um ponto de entrada.

O desenvolvimento de software é muito versátil e vem em diferentes formas. Comece obtendo uma visão geral do que envolve a programação e o desenvolvimento de software em geral.

Aqui estão 2 bons recursos para dar a você uma visão geral do que são carreiras de programação e desenvolvimento de software.

Depois de conhecer essas noções gerais, você deve fazer um questionamento interno sobre qual das áreas de programação realmente empolga você. Responder as perguntas abaixo ajudará você a selecionar um nicho.

  • O que você espera conseguir ao aprender a programar? Quer fazer dinheiro como freelance, obter um emprego ou criar sua ideia de start-up?
  • Que tipo de sistemas você quer criar? Para a web (front-end ou back-end), para dispositivos móveis (Android ou iOS), desktop, embarcados, análise de dados, entre outros.

Isso não quer dizer que você não possa experimentar outras opções de áreas ou fazer testes mais tarde em sua carreira, mas é bom começar em um ponto determinado.

Achar recursos de aprendizagem estruturados para seu nicho

Parabéns por selecionar um nicho no meio de tantas escolhas possíveis.

A próxima coisa a fazer é criar uma lista progressiva de tópicos/tecnologias que você precisa aprender para o seu nicho e encontrar recursos de aprendizagem estruturados sobre esses tópicos.

Ao decidir qual recurso de aprendizagem escolher, escolha aqueles que têm progressão estrutural e programe junto com os exercícios para obter prática. Não deixe de anotar esses pontos abaixo:

  • Que linguagens e tecnologias são usadas nessa área? Faça uma lista do mínimo que você precisa aprender para alcançar seu objetivo a partir da etapa anterior. A ênfase é no mínimo aqui, simplesmente porque você não deve esperar para aprender tudo em sua área escolhida antes de dar o primeiro passo em direção ao seu objetivo. Você vai esperar muito tempo.
  • De quais ferramentas você necessita? Descubra as ferramentas que você precisa para aprender. Um editor de código? Algum software específico? Vá em frente e instale-as.
  • Qual é a ordem de aprendizagem? A maioria das áreas exige que você aprenda uma ferramenta/linguagem primeiro antes de outras. Lembre-se de sempre começar com os fundamentos e seguir em frente.

Se você tiver mais dúvidas sobre um nicho específico, você pode usar o Twitter ou o Facebook para encontrar pessoas ativas no nicho que você escolheu. Deixe uma mensagem para eles e vá direto ao ponto sobre o que eles podem fazer para ajudar você. Você ficará surpreso com o quanto as pessoas da comunidade de tecnologia estão dispostas a ajudar.

No Twitter, existe uma thread que lista pessoas ativas em diferentes áreas da tecnologia que você pode seguir e que estão abertas para responder perguntas relacionadas à área em que trabalham. Essa thread foi criado por Hacksultan.

Você também encontrará uma lista com ótimos recursos de aprendizagem gratuitos ao final deste artigo.

Aprender

"Se tentar perseguir dois coelhos, acabará ficando sem nenhum."

Ótimo, você conseguiu. Você descobriu o que precisa aprender para atingir seus objetivos e encontrou um recurso de aprendizado para usar. Agora é hora de aprender essas coisas sequencialmente, não simultaneamente.

Seja consistente

A primeira coisa a fazer é reservar um tempo para o seu aprendizado. Defina um horário específico todos os dias durante sua agenda diária dentro do qual você se dedicará a aprender e pensará apenas em si mesmo.

Duas horas de aprendizado por dia é muito melhor do que 15 horas de aprendizado em um dia, por mês. Aqui, a consistência é fundamental. Quer aprender a arrumar um emprego? Então, você tem que aprender como se fosse seu trabalho até conseguir um.

Defina metas

Além disso, para um aprendizado eficaz, você tem que definir metas semanais para que você possa se responsabilizar.

Estudos têm mostrado que as pessoas que estabelecem metas conscientemente são mais propensas a alcançar coisas. As pessoas que vão além de escrever essas metas são mais propensas a fazer as coisas.

O que você quer saber ou quer poder fazer no final do mês? Como você vai estruturar seu aprendizado por semana para conseguir isso? Registre tudo.

Mantenha o foco

Também é importante que você se lembre de se concentrar no seu plano de aprendizagem delineado e no recurso de aprendizagem escolhido.

Na esfera tecnológica, há sempre algo novo e interessante – algo novo para aprender. Não se deixe levar ou sobrecarregar. É por isso que você vai precisar de muito foco. Um tutorial concluído é melhor do que 10 tutoriais pela metade.

Criar algo, seja o que for!

"A diferença entre você e aqueles com talento é a prática – muita prática."

Como um desenvolvedor iniciante, é fácil ficar preso na zona dos tutoriais, ou ainda, no "inferno dos tutoriais" (em inglês, tutorial hell). Muita gente fica presa lá, e permanece um principiante por muito tempo. É aqui que você assiste tutorial após tutorial sem nunca colocar a mão na massa.

A criação de projetos não é exclusividade da fase de aprendizagem. Você tem que iterar constantemente entre aprender e criar, porque o aprendizado nunca termina de fato.

É por isso que enfatizei a escolha de recursos de aprendizagem que apresentam muitos projetos de código para você começar a praticar. Certifique-se de programar junto e não apenas assistir. Isso ajuda você a começar a fazer algo.

Uma maneira de obter alguma prática é, no final de cada módulo, pensar em recursos que você pode adicionar ao projeto que você programou. Apenas tente criar algo com o novo conhecimento que adquiriu.

Não precisa ser nada muito chique. O mais importante é que você escreva código, encontre erros, pesquise no Google como depurar esses erros e ganhe mais compreensão. A prática solidifica o conhecimento e é por isso que devemos praticar. Um projeto concluído é melhor do que 10 tutoriais assistidos. Você pode usar o Google para encontrar ideias de projetos ou conferir essas ideias divertidas.

Para ideias de projetos, você também pode se inscrever nos DevProjects. DevProjects é uma comunidade gratuita onde as pessoas podem aprender programação trabalhando em projetos selecionados de diferentes stacks. Cada projeto é pensado por mentores e desenvolvedores seniores para ajudar a preencher a lacuna de aprendizado entre a teoria e o código do mundo real.

Criar laços (fazer o networking)

Fazer networking significa simplesmente aprender em público e se colocar no mundo. Você não ganha muito se for uma ilha. Então, como você fará isso?

Participe de uma comunidade e vá a vários encontros

Uma comunidade, ao mesmo tempo, desafia e inspira você. Você toma consciência de pessoas que estão no mesmo campo que o seu, com os mesmos desafios lutas que você tem. Você também terá a oportunidade de colaborar e criar amizades para toda a vida.

Aqui está uma lista de algumas comunidades globais de tecnologia remota das quais você pode participar, criada por Bolaji Ayodeji. Procure também comunidades locais em sua cidade.

Venda seu peixe

A oportunidade não chega mais facilmente para os mais qualificados – ela vai para os mais visivelmente qualificados.

Vender-se significa falar sobre si mesmo e sobre o que você está fazendo atualmente. Isso dá mais exposição e pode abrir muitas oportunidades para você.

Configure uma conta do GitHub e envie código por push lá. Inicie uma conta no Twitter e fale sobre o que você está aprendendo ou construindo.

Faça perguntas

Fazer perguntas envolventes é outra maneira de fazer networking e se apresentar a outras pessoas. Não há vergonha em fazer perguntas.

Se você ficar preso a um problema específico, use as redes sociais e suas conexões físicas a seu favor. Aprenda a navegar entre as mensagens pessoais e e-mails das pessoas. A única razão pela qual você pode não obter uma resposta é se você não souber como redigir bem o seu pedido.

Dica: ao entrar em contato, é melhor enviar algumas perguntas preparadas, em vez de apenas enviar um "Oi" e pedir seu tempo.

Você deve montar uma lista de perguntas que responderão aos desafios que você está enfrentando atualmente. É mais provável que você receba uma resposta se alguém souber antecipadamente que tipo de comprometimento de tempo estará dedicando.

Uma mensagem de exemplo pode ser:

"Olá, meu nome é <insira seu nome aqui>, espero que você esteja bem. Tenho visto seu conteúdo há um tempo e vejo que você é experiente em <insira o campo aqui>. Tenho tentado entender <insira o desafio aqui>. Eu tentei <insira abordagens que você tentou para resolver seu desafio>. Você poderia ajudar a <insira o que você precisa>. Obrigado."

Conclusão

Espero que este artigo tenha trazido alguma clareza para sua jornada sobre aprender a programar como iniciante.

Uma última coisa: programar é difícil. Aprender sozinho pode ser ainda mais difícil. Você definitivamente vai se deparar com alguns dias ruins.

Apenas lembre-se de ir com calma consigo mesmo nos dias em que as coisas não fazem nenhum sentido. A longo prazo, sua consistência e perseverança em direção ao aprendizado definitivamente valerão a pena.

Agora vá lá e arrase!

Aqui está a lista de guias/recursos de aprendizagem gratuitos para diferentes campos que devem ajudá-lo a começar (quando não traduzido, em inglês).

Desenvolvimento para a web em front-end:

Design de UX:

Desenvolvimento para a web em back-end:

Desenvolvimento para Android:

Desenvolvimento para iOS:

Ciência de dados:

Nuvem e  DevOps

Além disso, se você tem algum dinheiro de sobra e se quiser investir em seu aprendizado, os recursos abaixo darão a você materiais estruturados e acesso a uma grande comunidade de alunos. Eu recomendo esses recursos pagos porque eu mesmo os usei:

Desenvolvimento para a web

Ciência de dados

Design de UI/UX

Desenvolvimento para Android

Se gostou deste artigo, confira meu blog, me siga no Twitter e me envie uma mensagem direta.