Conheça 50 dicas para um programador iniciante

Não existe fórmula mágica para se tornar um programador/arranjar o primeiro emprego na área de tecnologia (provavelmente para qualquer área/carreira). Geralmente quem defende a ideia de "tudo que você precisa saber" ou "Do zero ao profissional" tem interesse apenas em ganhar dinheiro explorando sonhos alheios.

Durante minha carreira precisei iniciar meus estudos do zero algumas vezes e outras vezes ajudar pessoas a ter uma base teórica/prática sólida para ingressarem como desenvolvedores jrs. em projetos existentes.

Não acredito que exista um número finito, que pode ser determinado por qualquer tipo de experiência alheia que lhe faça atingir o sucesso, pois a quantidade de conhecimento necessário e a necessidade de cada um desses conhecimentos vai variar de acordo com as suas escolhas e das oportunidades/necessidades que a vida profissional lhe proporcionará.

Pessoalmente construí minha carreira através da educação formal (Graduação e mestrado em ciência da computação) e ainda vejo valor neste caminho, construindo bases teóricas fortes, com fixação de conteúdo através de repetição e não se baseando em tecnologias e frameworks. Contudo, entendo a avidez do mercado por profissionais (falta profissionais em ti pode chegar a 70 mil anuais) mudando o paradigma tradicional de ensino, para algo mais ágil, aceitando gaps de conhecimento e esperando que a própria trajetória profissional preencha estas lacunas.

Ou seja, não tem 5 anos para investir, tudo bem não precisa desistir...

Nesse contexto, criei algumas trilhas de estudo para desenvolvedores iniciantes e neste artigo compartilharei uma focada em desenvolvimento backend.

Se você está lendo este texto e está ponderando em começar a trabalhar com desenvolvimento de software, minhas primeiras indicações são dois cursos feitos pela USP e disponibilizaram gratuitamente no Coursera.

Introdução à Ciência da Computação com Python Parte 1

Introdução à Ciência da Computação com Python Parte 2

Invista um tempo, veja o que acha, se esses dois cursos despertarem seu interesse, siga em frente!

ou não siga... isso aqui é só um texto afinal.

Agora, você já tem conhecimentos na área e quer um direcionamento mais a nível de mercado, ou fez os cursos anteriores e quer agora um próximo passo puxe uma cadeira que vou apresentar alguns caminhos...

Não é um guia definitivo, apenas um indicativo do que considero muito bom caso um candidato jr. tenha um entendimento mínimo. Os cursos então espalhados entre Alura, Cod3r e Youtube, porém cursos semelhantes podem ser encontrados em diversas outras plataformas como a Pluralsight que hoje acredito ser uma das mais completas do mercado (Porém uma das mais caras).

Cao não seja exatamente uma lista de cursos que você esteja procurando, um conteúdo bem legal voltado para backend é Backend Developer. Eles possuem diversos "Roadmaps" que podem ser encontrados aqui.

Isso significa que C# seja a melhor linguagem para começar? Não. minha primeira linguagem foi o Pascal que possui suas vantagens para quem está começando, hoje acredito que a melhor linguagem seja o Python porém isto cada vez faz menos diferença. Nestes vídeos Fabio Akita comenta um pouco da não excepcionalidade das linguagens disponíveis:

Sua Linguagem NÃO É Especial! (Parte 1)
Sua Linguagem NÃO É Especial! (Parte 2)

Lembrando novamente que boa parte dos cursos aqui apresentados terão suas versões equivalentes em java, python, go, ruby, php. Lembre-se! São ferramentas de trabalho, não religiões!

Sendo assim dividi os cursos nos seguintes tópicos:

Programação Backend

  • Conceitos de programação em C#
  • Conceitos de banco de dados
  • Persistência com .Net
  • Api Rest com .Net
  • Testes de Unidade

Controle de versão

  • Git e Github

Cursos Complementares

  • Boas práticas de desenvolvimento
  • Projetos ágeis
  • CI/CD
  • Containers
  • Serviços de mensageria

Esta lista de cursos (e os cursos em si) te darão um caminho de como as coisas funcionam, pra que servem te darão ideia de como utilizar cada uma das tecnologias. O que te transformará um programador é a prática. Para cada curso, busque exercícios relacionados online, tente fazer algo diferente do exemplo apresentado isso auxiliará a absorver o conhecimento.

Sem mais delongas e com o máximo de avisos prévios que consegui pensar, vamos para a lista:

Programação Backend

Neste primeiro bloco de cursos, separei o conteúdo em cinco partes: Conceitos de programação em C#, Conceitos de banco de dados, Persistência com .Net, Api Rest com .Net e Controle de versão.

Não sabe o que é Backend este texto da Alura vai te ajudar a entender.

Conceitos de programação em C Sharp

Os cursos deste primeiro módulo apresentam .Net, a linguagem C# com seus principais aspectos, estes doze cursos lhe darão a base, não tenha pressa, repita quantas vezes necessário, procure conteúdos extras e tente não avançar até que esteja confortável com os conteúdos apresentados.

Conceitos de programação em C#LinkTempo est.
C# parte 1: Primeiros passosLink do curso(Alura)8h
C# parte 2: Introdução à Orientação a ObjetosLink do curso(Alura)8h
C# parte 3: Entendendo herança e interfaceLink do curso(Alura)8h
C# parte 4: Entendendo exceçõesLink do curso(Alura)8h
C# parte 5: Bibliotecas DLLs, documentação e usando o NuGetLink do curso(Alura)8h
C# parte 6: Strings, expressões regulares e a classe ObjectLink do curso(Alura)8h
C# parte 7: Array e tipos genéricosLink do curso(Alura)8h
C# parte 8: List, lambda, linqLink do curso(Alura)8h
C# Parte 9: Entrada e saída(I / O) com streamsLink do curso(Alura)8h
C# Collections parte 1: Listas, arrays, listas ligadas, dicionários e conjuntosLink do curso(Alura)8h
C# Collections parte 2: Listas, arrays, listas ligadas, dicionários e conjuntosLink do curso(Alura)8h
C#: Eventos, Delegates e LambdaLink do curso(Alura)8h

Para cada um desses cursos listados acima eu recomendo que você separe a mesma carga horária para a prática. Existem alguns sites que você pode encontrar boas listas de desafios como:

Após passar algumas semanas praticando nas listas acima, uma boa pedida para desafios mais complexos pode ser a plataforma hackerrank. Esta plataforma inclusive é amplamente utilizada por empresas como parte do processo seletivo.

Terminou os passos acima? São quase 100 horas de curso e uma recomendação de mais 100 horas de pratica. Se tudo isso faz sentido para você neste momento, parabéns! Vamos em frente, e fique tranquilo, daqui pra frente só piora!

Conceitos de bancos de dados

Esse bloco de cursos recomendados foi centrado em fundamentos e aplicabilidade prática de banco de dados relacionais. Como esta sequencia de cursos é focada em tecnologias da Microsoft, a lista inclui alguns cursos de SQL Server, porém é bem fácil encontrar cursos semelhantes para outras distribuições de bancos relacionais como o MySQLe o PostGreSQL.

E o tal do NoSQL? Eu sugiro que você foque em entender bem os conceitos de bancos relacionais primeiro, para depois expandir o conhecimento e entender as vantagens de abordagens.

Não sabia nem que existia essa coisa de NoSQL? Essa publicação do geekhunter vai ter ajudar a ter uma ideia.

Conceitos de Bancos de DadosLinkTempo est.
1 - Modelagem de banco de dados relacional: Entidades, relacionamentos e atributosLink do curso(Alura)10h
2 - Modelagem de banco de dados relacional: Modelo e Álgebra RelacionalLink do curso(Alura)6h
3 - Modelagem de banco de dados relacional: Diagrama ER e Modelo RelacionalLink do curso(Alura)10h
4 - Modelagem de banco de dados relacional: NormalizaçãoLink do curso(Alura)10h
5 - Modelagem de banco de dados relacional: Entendendo SQLLink do curso(Alura)10h
6 - SQL Server: Introdução ao SQL com Microsoft SQL Server 2019Link do curso(Alura)10h

Aqui reuni cerca de 60 horas de conteúdo de banco de dados novamente, recomendo ao menos 20 horas extras de prática de modelagem e consulta.

Se o conceito de banco de dados estiver meio confuso ainda, tente assistir ao vídeo abaixo do Akita, nele ele tenta explicitar o que seria esse tal banco de dados:

Fiz um servidor de "SQL"?? | Entendendo Banco de Dados

Persistência com .Net

Ok, agora eu sei que tem esses bancos de dados... Como que o código acessa essas coisas?

A resposta é, como quase tudo em desenvolvimento de software: Tem um milhão de formas diferentes, cada uma com suas vantagens e desvantagens... Mesmo dentro de uma mesma linguagem existem diferentes ORMs que possibilitam acesso a informações em bancos de dados externos. A seguir apresento quase 60 horas de conteúdo sobre o linq e Entity Framework.

Persistência com .NetLinkTempo est.
1 - Entity LinQ parte 1: Crie queries poderosas em C#Link do curso(Alura)11h
2 - Entity LinQ parte 2: Store Procedures e consultas com o LinQPadLink do curso(Alura)8h
3 - Entity Framework Core: Banco de dados de forma eficienteLink do curso(Alura)16h
4 - Entity Framework Core parte 1: Mapeando um banco pré-existenteLink do curso(Alura)12h
5 - Entity Framework Core parte 2: Mapeando um banco pré-existenteLink do curso(Alura)12h

API Rest com .Net

Um conceito que não vai fugir de uma entrevista técnica clichê por aí é: Você conhece os verbos HTTP? Muito provavelmente você precisará desenvolver ou dar manutenção em alguma api durante a vida, segue uma lista de cursos primeiramente explicando o tal do HTTP e como trabalhar com esse cara usando C#:

API Rest com .NetLinkTempo est.
1 - HTTP: Entendendo a web por baixo dos panosLink do curso(Alura)14h
2 - API Rest com .NET 5: operações essenciais com verbos HTTPLink do curso(Alura)8h
3 - .NET 5 e EF Core: relacionando entidadesLink do curso(Alura)8h
4 - .NET 5 e Identity: implementando controle de usuárioLink do curso(Alura)10h
5 - .NET 5 e Identity: autenticando e autorizando usuáriosLink do curso(Alura)8h
6 - .NET 5 REST API Tutorial: 05 Persisting entities with MongoDBLink do curso(youtube)1h
7 - .NET 5 REST API Tutorial: 06 Tasks, Async and AwaitLink do curso(youtube)1h
8 - .NET 5 REST API Tutorial: 07 Secrets and Health ChecksLink do curso(youtube)1h

Testes de Unidade

Este também é assunto que de nada adianta ser estudado, antes da primeira parte tenha sido bem absorvida, isso não diminui a importância de testes. O conteúdo a seguir apresenta o básico necessário para você trabalhar com testes unitários em qualquer empresa:

Testes de UnidadeLinkTempo est.
1 - C#: Testes de unidade e TDD com xUnitLink do curso(Alura)8h
2 - Mocks em C#: testes de Integração com xUnit e MoqLink do curso(Alura)8h
3 - Test Driven Development in C#Link do curso(Pluralsight)4h

Controle de versão

Este é assunto mandatório em desenvolvimento de software, versionar repositórios de forma a manter a organização em equipes de variados tamanho e que mudam com frequência, existem diversas tecnologias de controle de versão porém foquei aqui apenas em git e guithub.

Controle de VersãoLinkTempo est.
1 - Git e Github: Controle e compartilhe seu códigoLink do curso(Alura)6h
2 - Git e Github: Estratégias de ramificação, Conflitos e Pull RequestsLink do curso(Alura)8h

Ok, com o conteúdo apresentado até aqui, com prática, buscando outras fontes... você já tem um ótimo inicio. Mas é só isso? Não...

Agora é que a coisa começa a ficar mais ramificada.

Cursos Complementares

A intenção dessa próxima lista é mostrar algumas tecnologias e estratégias de desenvolvimento que são muito difundidas no mercado, ou no mínimo cobradas em entrevistas.

Alguns assuntos aqui são bem mais complexos, e demandarão anos para um bom domínio, ou seja... Nesta sessão, para um primeiro momento, você pode se preocupar apenas em tem uma ideia de alguns temas.

Cursos ComplementaresLinkTempo est.
1 - SOLID com C#: Princípios da programação orientada a objetosLink do curso(Alura)8h
2 - Design Patterns C# I: Boas práticas de programaçãoLink do curso(Alura)8h
3 - Design Patterns C# II: Boas práticas de programaçãoLink do curso(Alura)24h
4 - Docker: criando e gerenciando containersLink do curso(Alura)10h
5 - Kafka: Produtores, Consumidores e streamsLink do curso(Alura)8h
6 - Integração Contínua: mais qualidade e menos risco no desenvolvimentoLink do curso(Alura)6h
7 - Entrega Contínua: confiabilidade e qualidade na implantação de softwareLink do curso(Alura)6h
8 - Domain-Driven Design FundamentalsLink do curso(Pluralsight)5h
9 - Modern Software Architecture: Domain Models, CQRS, and Event SourcingLink do curso(Pluralsight)6h
10 - Scrum: Agilidade em seu projetoLink do curso(Alura)10h
11 - Kanban parte 1: Fundamentos EssenciaisLink do curso(Alura)6h

Estes eram os cursos que tinha para apresentar. Não tenho a pretensão de achar que tudo que é necessário foi coberto nessas poucos linhas acima, porém realmente acredito que com um bom domínio do que foi aqui apresentado, você será um profissional bem requisitado no mercado.

Como Continuar?

Por fim, reuni algumas referências para que você possa seguir por sua conta agora. Alguns livros importantes, alguns canais no youtube, podcasts, blogs e contas de twitter de pessoas relevantes para a comunidade de desenvolvimento de software.

Livros

Algoritmos - Teoria e Prática (Thomas Thomas Cormen) image.png

Conceitos de Linguagens de Programação (Robert W. Sebesta) image.png

Código limpo: Habilidades práticas do Agile Software (Robert C. Martin) image.png

Arquitetura limpa: O guia do artesão para estrutura e design de software (Robert C. Martin) image.png

Refatoração: Aperfeiçoando o Design de Códigos Existentes (Martin Fowler) image.png

Padrões de Projetos: Soluções Reutilizáveis de Software Orientados a Objetos (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ) image.png

Mythical Man-Month (Frederick P. Brooks Jr.) image.png

Domain-Driven Design: Atacando as complexidades no coração do software (Eric Evans) image.png

Nesta última sessão, decidi compartilhar alguns links interessantes, blogs, contas de twitter, canais no youtube e podcasts de pessoas que produzem um conteúdo que vale a pena ter o hábito de acompanhar.

Blogs:

Podcasts:

Contas twitter (para tecnologias Microsoft)

Canais no youtube (para tecnologias Microsoft)

O texto ficou bem longo (bem mais das 50 dicas), talvez no futuro eu separe ele em algumas paras porém, por hora que estes sejam bons caminhos para continuar o processo de aprendizagem.

Precisa de ajuda ou tenha dúvida sobre algum conteúdo? Entre em contato comigo, que tentarei ajudar com o que for de meu conhecimento. :)

Por hora é isso. Valeu!