Skip to content

Roadmap para ajudar pessoas que desejam entrar na área de desenvolvimento de software. Aqui você encontrará os fundamentos essenciais para iniciar sua jornada como pessoa desenvolvedora.

License

Notifications You must be signed in to change notification settings

marcieltorres/become-a-developer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Become a Developer

Este roadmap foi criado para ajudar pessoas que desejam entrar na área de desenvolvimento de software. Aqui você encontrará os fundamentos essenciais para iniciar sua jornada como pessoa desenvolvedora. O objetivo é fornecer uma base sólida para que você possa continuar evoluindo nos seus estudos. Lembrando que Desenvolvimento de Software é uma área densa, os tópicos que aqui estão foram resumidos e adaptados para um melhor entendimento visando facilitar o estudo de conceitos fundamentais que envolvem essa disciplina.

Público alvo

  • Pessoas que pretendem entrar na área de desenvolvimento.
  • Profissionais em transição de carreira.
  • Desenvolvedores iniciantes que querem consolidar seus conhecimentos.

Carreiras

Caso você esteja iniciando, não se preocupe pois você não precisa tomar nenhuma decisão nesse momento, poderá fazer essa escolha com mais calma durante a evolução dos seus estudos. Além disso, o conteúdo abordado aqui visa possibilitar a transição entre qualquer variação dentro da carreira em tecnologia

Existem diversas trilhas dentro da área do desenvolvimento, as mais comuns para pessoas desenvolvedoras são:

  • Frontend Developer: Foca no desenvolvimento da interface do usuário.
  • Backend Developer: Trabalha com a lógica e processamento de dados no lado do servidor.
  • Mobile Developer: Foco no desenvolvimento de aplicativos para dispositivos móveis (celulares e tablets).

Confira aqui uma matéria da Exame sobre carreiras em tecnologia.

1. Resolução de Problemas

O desenvolvimento de software vai além da escrita de código. Como pessoas desenvolvedoras, nossa principal função é resolver problemas utilizando tecnologia. Para isso, é essencial desenvolver habilidades analíticas e aprender a dividir problemas complexos em partes menores e mais gerenciáveis.

2. Linguagens de Programação

Tentando utilizar uma abordagem mais amigável e não tão tecnica, uma linguagem de programação é como um idioma que usamos para "conversar" com os computadores e dizer o que queremos que eles façam. Assim como usamos palavras e frases para nos comunicar com outras pessoas, usamos códigos e instruções específicas para explicar ao computador como realizar uma tarefa, como calcular algo, mostrar uma imagem ou enviar uma mensagem.

Por exemplo, se você quiser ensinar alguém a fazer um bolo, você dará instruções como "misture os ingredientes", "asse no forno por 30 minutos", etc. Na programação, fazemos algo parecido, mas as instruções são escritas em um formato que o computador consegue entender.

Existem diversas linguagens de programação, seguindo a pesquisa do Stack Overflow, em 2024 essas foram algumas das linguagens mais utilizadas no mercado: Javascript, Python, Java, C#, PHP e Golang.

Sugestão: Comece por uma linguagem que possua uma curva de aprendizado mais curta como Python ou Javascript por exemplo. Com o tempo vá explorando outras possibilidades, lembre-se de começar pelos fundamentos da programação que eles vão se aplicar a praticamente todas as linguagens

2.1 Paradigmas de Programação

Paradigmas de Programação são diferentes formas de pensar e organizar um programa de computador. É como se fossem diferentes estilos de cozinhar: algumas pessoas seguem receitas passo a passo, outras preferem improvisar com os ingredientes disponíveis, e algumas organizam tudo antes de começar.

Na programação, esses "estilos" influenciam a maneira como os códigos são escritos e estruturados. Aqui estão alguns exemplos:

Paradigma Imperativo: A pessoa programadora dá instruções passo a passo dizendo ao computador exatamente o que fazer, como em uma receita de bolo. Alguns ex: C, Assembly, Python, JavaScript.

Paradigma Orientado a Objetos: O código é organizado em "objetos", como se fossem peças de Lego, cada uma com suas funções e características, que interagem entre si. Alguns ex: Java, C#, Python, JavaScript, Ruby

Paradigma Funcional: Foca em funções matemáticas puras, evitando modificar valores depois de definidos, como se fosse uma fábrica que sempre produz o mesmo produto quando recebe os mesmos ingredientes. Alguns ex: Haskell, Lisp, Elixir, Clojure, Scala.

Sugestão: Foque nos dois primeiros paradigmas e depois evolua para o paradigma funcional se tiver interesse. Java ou C# são duas boas opções para utilizar recursos da Orientação a Objetos.

2.2 Frameworks

Frameworks são conjuntos de ferramentas e bibliotecas que facilitam o desenvolvimento. Eles fornecem uma estrutura básica para acelerar a implementação e garantir boas práticas.

Sugestão: Primeiro tente dominar (ou esteja bem familiarizado) alguma linguagem de programação. Após, escolha algum framework amplamente utilizado na linguagem que você está estudando, para isso você pode utilizar a pesquisa do StackOverflow que já foi mencionada nesse documento.

3. Estruturas de Dados e Algoritmos

O conhecimento em estruturas de dados e algoritmos é essencial para otimizar aplicações e lidar com grandes volumes de dados de forma eficiente. As principais estruturas incluem listas, pilhas, filas, árvores e grafos.

Além disso, compreender a complexidade de algoritmos (Big O Notation) permite escrever códigos mais eficientes, garantindo melhor desempenho e escalabilidade.

Sugestão: não se preocupe tanto com isso nesse primeiro momento (principalmente se é seu primeiro contato com programação), apenas entenda que esse tema é muito relevante e será muito útil no decorrer de sua carreira. Após avançar nos seus estudos, volte nesse tópico e tente explorar esse tema com maior profundidade.

4. Banco de Dados

Os bancos de dados são estruturas para armazenar e gerenciar informações em aplicações. Existem diferentes tipos, cada um adequado para necessidades específicas.

4.1 Banco de Dados Relacional

Bancos de dados relacionais organizam os dados em tabelas com relações definidas. Utilizam a linguagem SQL para consultas. Exemplos: MySQL, PostgreSQL, SQL Server, Oracle DB.

4.2 Banco de Dados Não Relacional

Bancos NoSQL são mais flexíveis e ideais para aplicações que lidam com grandes volumes de dados não estruturados. Exemplos: MongoDB, Redis, Cassandra.

Sugestão: Comece pelo banco de dados relacional e depois evolua para o não relacional

5. Principais Tipos de Aplicações

As aplicações podem ser desenvolvidas para diferentes plataformas. Conhecer suas características ajuda a escolher a melhor abordagem.

5.1 Web

Aplicações web rodam em navegadores e podem ser acessadas de qualquer dispositivo com conexão à internet. São desenvolvidas com tecnologias como HTML, CSS, JavaScript e frameworks como React e Angular.

5.2 Mobile

Aplicações mobile são feitas para dispositivos móveis como smartphones e tablets. Podem ser nativas (Swift para iOS, Kotlin para Android) ou híbridas (Flutter, React Native).

5.3 Desktop

Softwares desktop são executados diretamente no sistema operacional do usuário. Exemplos incluem editores de texto, navegadores e ferramentas de produtividade. Linguagens comuns incluem C#, Java e Python.

Sugestão: Comece pelas aplicações Web aprendendo HTML, CSS e Javascript. Construa páginas estáticas simples (sites) e vá evoluindo gradualmente mesclando os conhecimentos entre frontend e backend. Após, se for de seu interesse, evolua para aplicações mobile e/ou desktop

6. Testes

Os testes são fundamentais para garantir a qualidade e a confiabilidade. Eles ajudam a prevenir erros, melhoram a manutenção do código e facilitam refatorações sem comprometer o funcionamento da aplicação, esses são os tipos mais comuns:

  • Testes unitários: verificam o comportamento de partes isoladas do código, como funções ou métodos individuais. São rápidos e garantem que cada componente funciona corretamente.
  • Testes de integração: avaliam a comunicação entre diferentes módulos do sistema, garantindo que eles funcionem corretamente em conjunto.
  • Testes funcionais: verificam se o software atende aos requisitos especificados, testando funcionalidades do ponto de vista do usuário.
  • Testes de performance: avaliam a velocidade, escalabilidade e estabilidade da aplicação sob diferentes condições de carga.

Sugestão: Comece pelos testes unitários, estude profundamente os recursos de testes da linguagem que você escolheu aprender, faça testes mesmos dos exercícios mais simples, assim você irá incorporar a cultura de testes no seu processo de aprendizado. Saber testar é tão importante quanto saber programar.

8. Deploy | Monitoramento | Logs

Deploy é o processo de disponibilizar um software para uso. Pode ser feito manualmente ou de forma automatizada. Alguns exemplos: Nova versão de uma aplicação web, nova versão de um aplicativo, correção de um bug em um sistema crítico, etc. Esse fluxo é de extrema importância em um software real, uma boa esteira de deploy garante a disponibilidde do software mesmo durante o deploy de uma correção ou nova versão. Além de garantir mais segurança no desenvolvimento de novos recursos nesse software.

Após o deploy devemos garantir que nosso sofware esteja funcionando corretamente, para isso utilizamos algumas práticas como: monotoramento, métricas e logs para entender no detalhe o que de fato esta ocorrendo com o sistema. Geralmente para a coleta dessas métricas um APM (Application Performance Monitoring) pode ser utilizado, vai depender muito da realidade desse software.

  • DevOps: DevOps é uma cultura que une desenvolvimento e operações para otimizar processos de entrega de software. Ferramentas como Docker, Kubernetes e Terraform são frequentemente usadas para garantir escalabilidade e eficiência.
  • CI/CD: (Continuous Integration/Continuous Deployment) é uma prática que permite automação de testes e deploys, garantindo que novas versões do software sejam lançadas rapidamente e com qualidade.
  • APM: Application Performance Monitoring é o processo de usar ferramentas de software e dados de telemetria para monitorar a performance de aplicações críticas para os negócios.
  • Logs: São registros no formato de texto que sua aplicação pode gerar, são muito importante para rastrear possíveis problemas e identificar erros.

Sugestão: Saiba o que são esses conceitos e como eles são utilizados, porém não foque tanto assim no início, volte nesse tópico quando você já conseguir construir uma aplicação completa

9. Ferramentas

Dominar as principais ferramentas do dia a dia é essencial para um desenvolvedor. Isso inclui ambientes de desenvolvimento, controle de versão e infraestrutura.

9.1 Máquina Local / Configure seu ambiente

Ter um ambiente de desenvolvimento bem configurado facilita a produtividade. Isso inclui instalar um bom editor de código (VS Code, IntelliJ, ou algum outro de sua preferência), configurar um terminal eficiente e utilizar gerenciadores de pacotes. Lembrando que cada ambiente terá seus recursos próprios (Windows, Linux, MacOS), então busque as melhores configurações que fiquem mais confortáveis para você.

9.2 Git

Git é um sistema de controle de versão que permite gerenciar código-fonte de forma eficiente. O GitHub, GitLab e Bitbucket são plataformas populares para hospedar repositórios e colaborar com outras pessoas.

9.3 Docker

O Docker é um software de código aberto usado para implantar aplicativos dentro de containers virtuais. A conteinerização permite que vários aplicativos funcionem em diferentes ambientes complexos. Confira aqui uma documentação mais detalhada sobre Docker.

Sugestão: Você precisa ir se familiarizando com essas ferramentas, então conforme for evoluindo em seus estudos vá incluindo essas ferramentas no seu dia-a-dia. Para um primeiro momento você pode focar apenas em criar um ambiente local para desenvolvimento, ou até mesmo iniciar com algum ambiente completamente online.

10. Soft Skills

Além do conhecimento técnico, soft skills são fundamentais par o desenvolvimento de sua carreira como desenvolvedor ou desenvolvedora de software. A capacidade de comunicação, trabalho em equipe e resolução de problemas são tão importantes quanto saber programar. Outra habilidade essencial é o aprendizado contínuo. Nossa área evolui rapidamente e constantemente, uma boa pessoa desenvolvedora deve estar sempre se atualizando com novas ferramentas e práticas.

Sugestão: Seja uma boa pessoa e cultive o hábito do aprendizado contínuo :)

Sugestões

Uma série de sugestões de livros, podcasts e canais para ajudar na continuidade de seu aprendizado. Sinta-se livre para escolher a forma que você considera mais proveitosa para incrementar seus estudos.

Livros

Podcasts

Canais

About

Roadmap para ajudar pessoas que desejam entrar na área de desenvolvimento de software. Aqui você encontrará os fundamentos essenciais para iniciar sua jornada como pessoa desenvolvedora.

Resources

License

Stars

Watchers

Forks