Um guia prático para aprender programação do zero
Tags: web, programming, tutorial, beginners
Published: 2021-10-28 01:44:06

## Quem é você?

O público-alvo desse artigo é quem tem pouca ou nenhuma experiência com programação mas que deseja aprender a programar no intuito de usar essas habilidades no mercado de trabalho. Portanto, serei pragmático nas escolhas do conteúdo.

## O que é isso?

Nesse texto, farei sugestões de tópicos sobre programação capazes de gerar rápidos resultados, garantindo que a sua jornada seja divertida desde o início. Te garanto: é bem mais simples do que parece.

Explicarei alguns conceitos básicos sobre a área e depois comentarei sobre a trilha de aprendizado que escolhi, baseado na minha percepção do mercado enquanto profissional. Fiz uma seleção otimizada dos conteúdos para manter o artigo conciso, garantindo que há o necessário para sólidos primeiros passos.

## Por que escrevo?

Eu escrevo este artigo após receber feedbacks positivos ao assessorar alguns colegas que me pediram indicações de estudo sobre como aprender programação do zero.

Outro fator que me motivou foi a inundação de informações que a internet sofreu sobre a área de tecnologia nos últimos anos. Infelizmente, há muitos materiais, cursos e vídeos introdutórios que considero contra-intuitivos, com falsas promessas de salários fartos associados à ilusão de pouco esforço e pouco estudo.

## Quem sou eu?

Formado em Ciência da Computação pela Universidade Federal de Campina Grande, atualmente trabalho como Engenheiro de Software desenvolvendo produtos para internet. Quando eu tinha 7 anos, já imaginava construir uma carreira em tecnologia, e vivia deslumbrado com o todo-poderoso Google, descobrindo como tudo o que estava internet havia sido criado. 

Ainda criança, ouvi de um colega mais velho que o curso de Ciência da Computação (CC) na Universidade Federal de Campina Grande era um dos melhores do Brasil. Então, quando me perguntavam o que eu queria "ser quando crescer", dizia: Cientista da Computação. 

Naquela época, acho que a maioria das pessoas ao ouvir sobre esse curso provavelmente presumia que o foco de estudo seria "como montar um computador" (o que não sei bem até hoje). Era raro alguém saber o que era um *software* ou quais as competências necessárias para desenvolver um.

Anos depois, quando eu já estava no primeiro semestre na universidade, a situação era outra: a área de TI era bem mais conhecida e vista como promissora. Alguns colegas de ensino médio, que estavam indecisos no que cursar, escolheram CC para "ver no que vai dar". Nos anos seguintes, eu já observava um fenômeno que hoje, em 2021, está no seu ápice: o êxodo de estudantes e profissionais de diversas áreas para a tecnologia.

Ficava cada vez mais evidente que os cursos tradicionais estavam perdendo os seus alunos devido a essa migração de área e, inclusive, muitos estudantes faziam transferência interna na própria Universidade, aproveitando disciplinas equivalentes que já haviam cursado. Ao mesmo tempo, muito se falava sobre a alta demanda de profissionais de TI para construir o tão desenhado futuro digital.

Hoje, esse fenômeno migratório tem bastante força e não é exclusivo dos estudantes, mas também de pessoas já graduadas e profissionais que buscam aprimorar seus currículos. É importante notar que a pandemia do COVID-19 acelerou tudo isso, especialmente em três relevantes aspectos:

- Digitalização forçada das áreas tradicionais;
- Flexibilização do trabalho;
- Estímulo para exportar mão-de-obra qualificada.

## Antes, algumas dicas

- Tente sempre associar seu aprendizado com algum **projeto interessante** que você gostaria de fazer. Sua família tem um pequeno negócio que precisa de um site? Tente implementá-lo! Meus melhores momentos de aprendizado foram com projetos de *hobby*.
- *Devagar e sempre.* **Priorize a frequência** em seu aprendizado. É melhor várias doses pequenas porém frequentes do que poucas longas e exaustivas.
- Treine bastante sua **habilidade de pesquisa** online. Esse ponto talvez seja uma das dicas mais importantes aqui. Um bom desenvolvedor é aquele que sabe como achar algo que precisa. Exercite suas habilidades de usar o Google ou seu buscador preferido.
- Tente encontrar alguma **mentoria com quem você possa contar**. Há várias pessoas experientes que se voluntariam para ajudar iniciantes, você pode achá-las por portais de *mentoria tech* na internet.
- **Que seja divertido!** A sua satisfação no decorrer dessas etapas é fundamental para um bom resultado.

## Como cheguei nessas recomendações?

Em um curso formal de nível superior, a grade curricular é realizada de forma gradual e incremental, na qual diversas matérias são pré-requisito para outras; ou seja, muito do que você aprende em um semestre é necessário para você aprender no próximo. Uma graduação de bacharel em Ciência da Computação dura em média 4 anos.

Apesar de considerar a graduação importante para a formação profissional e cidadã, tenho forte convicção que ela não é estritamente necessária para formação de bons profissionais. Eu poderia detalhar esse ponto, mas o assunto merece um outro *post*.

É importante ressaltar que a área de computação/software é imensa e abriga diferentes campos e habilidades. Uma graduação, na maioria dos casos, tenta abordar as áreas com bastante amplitude e pouca profundidade, dando a chance de cada estuante decidir no que vai se especializar. Os conteúdos que vou recomendar aqui serão bem mais sucintos e diretos.

Como falei, há diversas funções que um profissional de tecnologia pode exercer e, até quando analisamos apenas aquelas que requerem programação, também há uma série de ramificações. Alguns principais exemplos são:

- Web  *(assunto que escolhi para esse guia);*
- Engenharia de Dados;
- Inteligência Artificial;
- Programação Nativa (apps para iOS, Android, Windows...);
- Jogos.

Todas essas áreas são muito promissoras e interessantes, mas a Web se destaca pela sua popularidade. Nela, os *softwares* produzidos são executados num navegador, tal como o *app* que você está usando para ler este texto. Embora a Web não seja a melhor plataforma para todos os problemas que existem, ela está se tornando um ecossistema cada vez mais robusto, poderoso e adaptável.

## Do que consiste programação web?

A [World Wide Web (WWW)](https://en.wikipedia.org/wiki/World_Wide_Web), que muitos chamam de ***internet***, consiste em um conjunto de tecnologias, protocolos e *softwares* idealizados entre os anos 80 e 90 pelo britânico [Tim Berners-Lee](https://en.wikipedia.org/wiki/Tim_Berners-Lee). O principal *software* da Web é o *browser* (navegador), que permite aos usuários o acesso a um ecossistema de informações através de uma rede mundial de computadores (a real ***internet***). Alguns exemplos de browser são: Google Chrome, Safari e Firefox.

O *browser* possui várias responsabilidades para fazer a Web funcionar, e uma delas é "desenhar" as informações dos sites na tela do dispositivo no qual está sendo executado. Esses *sites* são definidos por documentos que utilizam *linguagens de programação ou de declaração.* A Web moderna é composta por 3 destas:

- **HTML:** define os elementos visuais e semânticos que um usuário percebe em um site;
- **CSS:** estiliza e customiza os elementos previamente declarados com HTML;
- **JavaScript (JS):** adiciona interatividade entre usuário e aplicação em páginas HTML.

Essas 3 tecnologias são igualmente fundamentais para o funcionamento da Web e na maioria das vezes trabalham em conjunto. Se eu pudesse exemplificar que tipo de informação cada linguagem consegue passar, seria algo assim:

- **HTML:** "Minha página tem um cabeçalho que tem uma imagem e, logo após, um parágrafo de texto"
- **CSS:** "O parágrafo de texto na minha página é vermelho e a imagem do cabeçalho está alinhada à direita"
- **JavaScript:** "Quando o usuário passar mais de 30s na página, eu quero que o texto mude da cor vermelho para azul"

Você deve imaginar que dominar programação Web significa dominar essas 3 linguagens. Por mais que pareça bastante para aprender, te garanto que é possível entender o básico em pouco tempo e fazer coisas bem legais. Todos os sites e aplicações que você usa diariamente são feitos, também, apenas com essas linguagens, e é possível analisar os códigos para estudar ou se inspirar.

Quer ver como funciona? Se você estiver num computador, clique com o botão direito na página e selecione a opção "inspecionar". Será exibido o HTML utilizado para gerar a página e o CSS que foi aplicado para estilizá-la.

![Inspecionando um elemento com as ferramentas de desenvolvedor do navegador](https://user-images.githubusercontent.com/18706156/139171058-3b50d206-85c8-4c54-8362-b1d175613893.png)

## Precisa saber inglês e matemática?

Essa é a pergunta que eu mais recebo. Minha resposta: matemática, não; inglês, mais ou menos...

De fato, graduações em Computação são de exatas e possuem verticais de matemática em sua grade curricular, mas isso não significa que você precisa amar ou ser o gênio dos cálculos para ser um bom desenvolvedor Web. Dito isso, é necessário ter uma boa base das operações básicas que são ensinadas no ensino fundamental e médio. 

Já sobre o inglês, não é estritamente necessário, porém recomendo que você comece a praticá-lo no dia-a-dia. Inicialmente, pratique a leitura (você pode usar a [extensão do Google Translator](https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=en) pra te ajudar). Após isso, tente praticar suas habilidades de escuta e, quando possível, treine a comunicação oral e escrita. Minhas recomendações pessoais são: usar o [Duolingo](https://www.duolingo.com) e assistir séries e filmes com legenda em inglês.

Eis os motivos para considerar o inglês importante:

- O conhecimento da programação é esparso e nós programadores - tanto os iniciantes como os experientes - consultamos e estudamos códigos e materiais que, na maioria das vezes, estão em fóruns que usam o inglês;
- Dominar o idioma é mais do que entender palavras, porque você se expõe à pessoas e culturas diferentes que superam traduções literais. Algo que me encanta em TI é a presença de comunidades fortes, e o inglês aumenta as suas chances de achar uma que você se identifique;
- O inglês pode te colocar numa opção privilegiada para conseguir um emprego, já que nos últimos dois anos o número de vagas internacionais remotas [aumentou bastante.](https://twitter.com/michael_nielsen/status/1452349695959785472)

## Como começar?

A jornada de cada pessoa com tecnologia pode ser muito particular, e é provável que você ainda vá descobrir o que mais te interessa. Isso inclui áreas específicas *(será que você vai gostar mais de criar páginas estáticas/landing pages, ou aplicações interativas?)* ou também formas de aprender específicas *(prefere vídeos ou material escrito?)*. 

Irei sugerir o que têm funcionado para a maioria das pessoas com as quais conversei, mas entenda que você pode não gostar de algo logo de cara, e *tá tudo bem (e é sobre isso?).*

O primeiro passo é começar a aprender as linguagens que apresentei acima, e minha recomendação é estudá-las na ordem apresentada.

Como plataforma de ensino, recomendo o **[CodeAcademy](https://www.codecademy.com)**, um portal interativo com conteúdos completos e ótimos desafios. Os cursos das 3 linguagens que mencionei (HTML, CSS e JavaScript) são gratuitos e podem ser feitos em português ou inglês. No quesito de aprendizagem introdutória, o CodeAcademy é o mais elogiado por aqueles que o recomendei e, de fato, considero que seja devido a essas características:

- Apresentação teórica com exemplos;
- Desafios com correção automática;
- Revisões com conteúdos incrementais.

Aqui estão os links dos cursos:

- [Learn HTML](https://www.codecademy.com/learn/learn-html)
- [Learn CSS](https://www.codecademy.com/learn/learn-css)
- [Learn JavaScript](https://www.codecademy.com/learn/introduction-to-javascript)

Após finalizar esses cursos, você será capaz de criar sites e aplicações para Web! Se quiser publicar algo na internet, recomendo olhar o [Code Sandbox junto com a integração ao Netlify.](https://www.netlify.com/blog/2019/03/26/deploy-codesandbox-to-netlify/) Todos esses serviços são gratuitos.

### Alternativas

Deixarei aqui algumas sugestões alternativas para caso você se interesse:

- [**Canal Curso em Vídeo do Gustavo Guanabara**](https://www.youtube.com/channel/UCrWvhVmt0Qac3HgsjQK62FQ): onde há um [curso de HTML e CSS](https://www.youtube.com/watch?v=Ejkb_YpuHWs&list=PLHz_AreHm4dkZ9-atkcmcBaMZdmLHft8n) e um [curso de Javascript](https://www.youtube.com/watch?v=1-w1RfGIov4&list=PLHz_AreHm4dlsK3Nr9GVvXCbpQyHQl1o1).  🇧🇷
- [Exercism](https://exercism.io/): mantido pela comunidade, esse portal apresenta várias trilhas em diversas linguagens de programação.
- [Free Code Camp](https://www.freecodecamp.org/): plataforma de código aberto semelhante ao CodeAcademy, também conta com uma ótima comunidade.

## Quais são os próximos passos?

### React

Embora HTML, CSS e JS sejam a base da Web, na prática, a comunidade dificilmente trabalha apenas com elas, isso porque há formas *melhores* de se desenvolver. Esse é o papel das bibliotecas e *frameworks*: auxiliar desenvolvedores a criarem sites e aplicações de médio e grande porte. Em geral, as próprias vagas de emprego são direcionadas a *frameworks* específicos. Mas não se preocupe, tudo que você aprendeu até agora continua sendo bem importante.

A tecnologia mais usada nessa categoria é o [React](https://reactjs.org/), criado pelo Facebook. Ele permite a criação de aplicações web baseadas em componentes, nos quais você faz o desenvolvimento em um só lugar, ao invés de programar HTML, CSS e JS em arquivos diferentes, além de facilitar a programação de interações.

Neste mês, o Facebook lançou uma nova página de documentação para o React com um conteúdo inédito e bem interessante. Você pode acessá-la pelo [https://beta.reactjs.org/learn](https://beta.reactjs.org/learn) e seguir os passos apresentados. É uma experiência parecida com o *CodeAcademy*.

Após finalizar os estudos básicos de React, você vai aproveitar uma grande vantagem: acessar milhares de bibliotecas e códigos prontos para uso. Em especial, para criar seus elementos visuais, recomendo checar o [ChakraUI](https://chakra-ui.com) ou o [Ant Design](https://ant.design).

### Typescript

TypeScript (TS) é uma linguagem de programação criada pela Microsoft muito similar ao JavaScript (formalmente, dizemos que TS é um *superset* de JS, ou seja: todo código JavaScript é um código Typescript válido). Por ser uma [linguagem fortemente tipada](https://digitalinnovation.one/artigos/o-que-sao-tipagem-dinamica-estatica-fraca-e-forte), Typescript torna a experiência de desenvolvimento mais previsível e ajuda a prevenir problemas ("*bugs"*) no código.

Você pode aprender TS através do [ótimo portal de documentação da linguagem](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html).

Quando você se sentir pronto para fazer uma aplicação completa, algumas pergunta podem surgir:

- Onde guardar os dados online de uma aplicação?
- Como implementar um fluxo de login/cadastro?

Bem, para isso, há uma área especial de Web chamada *backend*, e muito provavelmente você irá encontrar esse termo por aí. Mas, uma boa notícia: **você não precisa ter que estudar outro apanhado de coisas para adicionar essas funcionalidades em suas aplicações.** Deixarei aqui minha recomendação do [Firebase](https://firebase.google.com/), uma tecnologia da Google que tenta preencher esse espaço, porém usando apenas o TS/JS que você aprendeu.

## É só isso?

Infelizmente, não... Há vários outros conteúdos que são importantes e você pode precisar uma hora ou outra, mas não quero deixar o post muito saturado. Não precisa se abduzir: ninguém sabe tudo desde o início! Acredito que o conteúdo que apresentei aqui abrirá sua mente para conseguir aprender melhor e saber galgar os próximos passos.

Alguns desses conteúdos são:

- **Git e Github**, usados para organização dos projetos. Para ver do que se trata, recomendo [esse conteúdo](https://www.youtube.com/watch?v=DqTITcMq68k) do canal da Rafaella Ballerini;
- **Introdução à computação,** onde você pode aprender nos [vídeos iniciais](https://www.youtube.com/watch?v=dpoU8ODXZGw&t=226s) do professor Dalton Serey;
- **Estruturas de dados e algoritmos,** onde você pode começar aprendendo por [esse site](https://joaoarthurbm.github.io/eda/) do professor João Arthur Brunet. Outra ótima dica é a plataforma [LeetCode](https://leetcode.com).

Confira também essas dicas extras sensacionais:

- [Developer Roadmap](https://github.com/kamranahmedse/developer-roadmap): várias trilhas de conteúdo para desenvolvedores;
- [Curso aberto de Ciência da Computação](https://github.com/ossu/computer-science): material aberto que cobra os conteúdos de uma graduação em CC.

Espero que tenha gostado. Fique à vontade pra contar a sua história ou fazer alguma sugestão :-)

(Muitíssimo obrigado a Emanuelly Assuéria, Izabella Morais, Matheus Monteiro, Thiago Granja e Viviane Oliveira que me ajudaram com ótimos feedbacks e também a Beatriz Cunha que fez uma belíssima revisão do texto)