Quando eu iniciei de fato no mundo da programação, lá por 2012, não tinha muito conteúdo que direcionasse pro caminho correto quem estava com disposição para aprender sozinho essa arte. Hoje, até há muito conteúdo na web pro pessoal buscar conhecimento sozinho, só que hoje tem tanta coisa que acaba deixando a galera bem perdida. Isso gera perguntas como: O que eu aprendo pra poder ser programador? Qual linguagem? Que tipo de HTML, CSS.. tem mais de um? Uso lógica para alguma coisa? Por onde vou começar? 

Bem, nesse artigo(dividido em duas partes) vou ajudar você a pelo menos ter um caminho para seguir, com duas opções: Desenvolvedor Web ou Programador Mobile.

Base comum — O que todos precisam saber

Aqui já fique sabendo que programar é mais do que um Hobbie ou profissão, é um estilo de vida. Programar muda sua mente e sua maneira de perceber as coisas. Como? Meu querido e minha querida, você vai se tornar um ser muito mais lógico!

O primeiro passo rumo ao cargo de programador/desenvolvedor é aprender lógica de programação. Sério, aqui você já pode achar um pouco chato/difícil/cansativo, mas é assim mesmo no começo, você precisa mudar sua maneira de pensar pra entender como a lógica de programação funciona e por isso muitas pessoas demorem pra entender. 

Eu recomendo fortemente você aprender lógica de programação, com uma pseudo linguagem chamada portugol. Mas Fábio, como e onde eu vou aprender isso? Calma, aqui está um curso com tudo que você precisa saber de lógica de programação e inteiramente grátis. O link para curso está aqui.

As aulas são ministradas pelo professor Gustavo Guanabara, com uma excelente didática, tornando fácil o aprendizado. Estude bem lógica, pode gastar de duas semanas a um mês só fazendo exercícios, criando algoritmos próprios, isso deve estar bem no seu sangue antes de dar prosseguimento a nova fase hein![1]

A Divisão por objetivo

Aqui, você deve saber(escolher) o seu objetivo no ramo do desenvolvimento. Isso, porque aí você deve saber quais linguagens aprender, qual sistema operacional usar e outras variáveis. Eu aqui vou apresentar um caminho para o desenvolvimento Web e para Mobile Nativo[2].

Desenvolvimento Web

No desenvolvimento web, nós temos três tipos de profissional. Temos o Desenvolvedor Front-end, o Desenvolvedor Back-end e o Desenvolvedor Full-Stack.

Front-end

O Desenvolvedor Front-end é o indivíduo que cuida da interface e do funcionamento da interface de sistemas web e de sites. Sim, o carinha que faz os efeitos legais, e que faz a integração exibindo os dados. Se é isso que você quer, então siga a trilha a seguir:

1- HTML e CSS

HTML e CSS são as tecnologias que exibem tudo que é visível em um website. Então, já entendeu a importância delas né? É bem importante entender bem como funciona o HTML e o CSS, pois eles precisam estar bem feitos e bem estruturados para continuidade dos projetos.  Para aprender HTML você pode ler o manual da MDN(Mozilla) aqui  , você pode usar essa trilha de conhecimento do html.net aqui , e se você é o tipo de pessoa que prefere assistir uma aula, você pode ver o curso de HTML do Gustavo Guanabara aqui

Lembrando sempre de praticar, tentar fazer as coisas sozinhos, pois é praticando que realmente se fixa o conhecimento.

Para aprender o CSS, você pode ler o manual da MDN aqui , ou mesmo se basear no curso de HTML5 do Guanabara, já citado acima. Dicas a mais para você:  Curso de HTML e CSS essencial Free Cursos IAG aqui Curso prático de HTML e CSS na codecademy aqui

2- Javascript 

O Javascript é muito importante, pois com ele você vai manipular os elementos na tela, criar comportamentos no site e etc. Javascript é o que faz a mágica acontecer no Browser. Importante: Foque-se apenas no Javascript para manipular elementos e eventos! Não use ferramentas como Bibliotecas e frameworks enquanto você não tiver entendido de verdade o Javascript. É que atualmente o Javascript é uma linguagem que se pode fazer tudo, mas no final eu explico mais sobre isso, principalmente na parte de Full-Stack.  Vamos aos passos para aprender e entender o Javascript para um desenvolvedor Front-end. Primeiro você deve aprender o básico da linguagem, que é sintaxe, como declarar variáveis, trabalhar com laços de repetição(…), e para isso você pode consultar o manual da Mozilla em inglês(eles que criaram o Javascript) aqui ou você pode ler esse livro que a comunidade Brazil JS traduziu, chamado Eloquent Javascript, pode ser encontrado aqui . Para os coleguinhas que se sentem melhores aprendendo por meio de video aulas, o School of Net está oferecendo esse curso de Javascript básico(não se iluda achando que básico é sinônimo de fácil), com tudo que você precisa saber sobre aqui.

* Novamente ressalto que você faça praticamente as coisas. Faça algum projetinho simples, vá praticando e melhorando como desenvolvedor.*

3- Chrome DevTools 

Aprenda a mexer com o Chrome DevTools, pois é uma ferramente que irá te ajudar muito. Se você precisar fazer um exemplo básico de Javascript, você pode usar o console do Chrome DevTools, se você precisa saber que elemento é aquele do site que você gostou, você pode usar o Inspecionar Elemento do Chrome DevTools. Se você quiser ver uma Série de vídeos oficiais do Google ensinando a usar, você pode fazer isso clicando aqui ,são em português, e fáceis de acompanhar.

Isso é o que você basicamente deve saber para se tornar um desenvolvedor front-end iniciante. O Felipe Fialho, fez uma tradução completa de um artigo que é um verdadeiro caminho das pedras, com exercícios e tudo mais sobre como se tornar um Front-end Developer(nome mais bonitinho pro Linkedin né :p). Você pode acessá-lo aqui

Back-end

Aqui é onde você que quer fazer as coisas funcionarem por baixo da tela, comunicação com o banco de dados, segurança da aplicação, editar, apagar e inserção de novas informações no banco via programação. É particularmente uma parte que me dá muito prazer de fazer. Vamos ao que você deve fazer para se tornar um desenvolvedor back-end: 

1- Linguagem de programação

Você deve escolher uma linguagem de programação para abraçar e dominar. O programador back-end precisa saber além da sintaxe da sua linguagem, saber também como ela funciona, saber quais são as melhores práticas para usá-la de maneira correta nos projetos. Aqui um monte de pessoas se perdem, afinal existem uma infinidade de linguagens de programação, então as pessoas acham que talvez seja muito difícil escolher uma só, ou que devam aprender várias de uma vez. Mas vai com calma aê!! O foco é muito importante, e como foco aqui me refiro a escolha e prática de UMA linguagem de programação até o domínio da mesma. 

No mercado há atualmente uma demanda por Java, C#, Python, PHP, Node(Javascript no servidor), Ruby, C++, e outras. Você pode testar um Hello World[3] em cada linguagem e ver qual você acha melhor. Escolhendo uma delas, você pode praticar de maneira procedural[4] até ter domínio da linguagem.

2- Orientação a Objetos 

Existem muitos paradigmas de programação, mas talvez o mais importante é a orientação a objetos. A orientação a objetos é muito importante porque além de resolver bem questões de segurança, ela faz um ótimo reaproveitamento de código, que é essencial no desenvolvimento de qualquer aplicação e/ou sitema hoje em dia. Para entender orientação a objetos no conceito, você deve entender pelo menos 4 conceitos, que são:

Abstração

Pode ser definida a grosso modo como a transformação um objeto do mundo real em um objeto na computação. Esse objeto também tem propiedades como no mundo real. Você pode criar um objeto Pessoa e esse objeto ter propiedades como idade, nome, cor dos olhos e etc. É realmente passar objetos do mundo real para o algorítmo, lógico que com você escolhendo as propiedades que vão te satisfazer na resolução de algum problema.

Encapsulamento

Encapsulamento é uma técnica de segurança, que você verá quando estiver estudando o que fazer com os objetos abstraídos. Isso é um pilar importante, e você deve estudar sobre isso. Deixarei material ao final.

Herança

Herança é muito importante, é aqui que nós aproveitamos nosso código para economizar um tempo. Com a herança, podemos reaproveitar certas propiedades que se repetem. Por exemplo, você tem um objeto Pai, um objeto Avô e um objeto Neto. O que todos esses objetos tem em comum? Eles são pessoas, que vão ter propiedades iguais. Então eu posso criar um objeto chamado Pessoa e fazer cada um desses objetos herdarem as propiedades do objeto Pessoa que é genérico, precisando escrever nos objetos só propiedades únicas não inerentes ao objeto Pessoa.

Polimorfismo

Esse eu não irei explicar muito, pois é algo que só fazendo na prática para você entender bem. Mas, é basicamente quando você usa herança e precisa modificar algo herdado para atender uma necessidade diferente.

Você pode ver um curso no Youtube sobre orientação a objetos aqui, também ministrado pelo Gustavo Guanabara, e também pode adquirir o livro Orientação a Objetos da casa do Código.

É claro, você pode aprender o conceito e aplicá-lo logo a sua linguagem escolhida.

Banco de Dados

É importante que você aprenda também sobre banco de dados, afinal será importante armazenar dados e trabalhar com eles nas aplicações que você criará. Eu deixo aqui mais um curso em forma de vídeo aula para você.

Concluindo

Enfim, esse é o caminho básico para um desenvolvedor, Front-end e/ou Back-end. Aprendendo esses conceitos, logo você estará pronto para aprender coisas mais complexas e que vão surgindo com naturalidade. Após aprender esses conceitos, se esforce em fazer uma aplicação do zero, pois te tratá muito experiência. Na parte dois do artigo, eu falarei como começar no mundo da programação mobile e falarei um pouco sobre o desenvolvedor full-stack.

Notas

[1] : Há controvérsias. Existe um grupo de pessoas que relata que dá para aprender a lógica enquanto se aprende uma linguagem, ainda de maneira procedural. Eu não pertenço a esse grupo, pois acho que o pseudocódigo ajuda muito, inclusive depois quando você precisa resolver um problema e ainda não sabe como fazer na tecnologia sendo usada.

[2] Se você ainda não sabe, há uma maneira de desenvolver aplicativos usando tecnologias que geralmente são usadas para a Web, como Javascript, HTML e CSS. Por isso, eu coloquei nativo, que é a linguagem oficial para o desenvolvimento, e é específica para a plataforma, como Swift para o desenvolvimento para iOs.

[3]Algorítimo básico usado para aprender o corpo básico de um programa em qualquer linguagem. No Python, por exempo: Crie um arquivo chamado ola.py e dentro escreva print “Hello World” 

[4] Basicamente na programação procedural nós temos uma sequência de ações que um programa deve executar, um após o outro no mesmo arquivo, usando a sintaxe característica de cada linguagem. Você pode pesquisar mais a respeito.