/treinamento-desafios-tecnicos-backend-junior

Este repositório é um roteiro de treinamento para desafios técnicos destinados a vagas de desenvolvedores back-end de nível júnior.

Jornada de treinamento para um desafio técnico de um desenvolvedor Back-end Júnior

O objetivo desse repositório é criar uma jornada para mentoria e treinamento de um desenvolvedor Back end Júnior.

A idéia inicial é que um desenvolvedor back-end júnior encontre um mentor (não obrigatório) e aplique os passos aqui definidos para desenvolver um projeto inicial que atenda aos requisitos propostos, como uma forma de treinamento, estudo e preparação para entrevistas técnicas.

Quando disponível, o papel do mentor é o de auxiliar nas etapas de desenvolvimento inicial (1) code review e correções (2) e de implementação de alguns padrões de design (3).

Passo a passo da jornada:

1 - Desenvolver o desafio individualmente, buscando consultar na internet ou ao mentor em caso de dúvidas

2 - Revisão do código desenvolvido para encontrar erros ou pontos de melhoria que devem ser implementados

3 - Implementar alguns padrões de design mais avançados utilizados no mercado

Ideias de aplicações:

  1. Cadastro de Clientes: Desenvolva uma aplicação que permita cadastrar e gerenciar clientes. Os usuários podem fazer login, adicionar novos clientes fornecendo informações básicas, como nome, endereço, telefone, e-mail, etc. Ao inserir o CEP do cliente, a aplicação deve fazer uma chamada à API de busca de endereço por CEP para preencher automaticamente o restante das informações de endereço, como rua, bairro, cidade e estado.

Requisitos da aplicação:

  1. Autenticação de usuários na aplicação (acesso somente após login): Implementar um sistema de autenticação seguro que exija que os usuários façam login para acessar a aplicação. Garantir que apenas usuários autenticados tenham permissão para utilizar a aplicação.
  2. CRUD com diversos tipos de relacionamentos (1:1, 1:N, N:N): Desenvolver operações CRUD (Create, Read, Update, Delete) que abranjam diferentes tipos de relacionamentos entre entidades, como relacionamentos um-para-um, um-para-muitos e muitos-para-muitos.
  3. Responsividade (compatibilidade com desktop e mobile): Criar uma interface responsiva que funcione de forma adequada tanto em dispositivos desktop quanto em dispositivos móveis, garantindo uma experiência de uso consistente em diferentes telas.
  4. Validação de dados no front-end e no back-end: Implementar mecanismos de validação para os dados fornecidos pelos usuários, tanto no lado do cliente (front-end) quanto no lado do servidor (back-end), a fim de garantir a integridade e a consistência dos dados.
  5. Categorização / agrupamento de itens: Criar recursos que permitam aos usuários categorizar ou agrupar itens dentro da aplicação, facilitando a organização e a navegação dos dados.
  6. Sugestão de pesquisa: Adicionar um recurso de sugestão de pesquisa que auxilie os usuários a encontrar informações relevantes de maneira mais eficiente. Ao digitar termos de pesquisa, a aplicação deve fornecer sugestões de palavras ou frases relacionadas para melhorar a precisão dos resultados.
  7. Integração via API com algum serviço externo: Realizar integração com um serviço externo por meio de APIs, permitindo que a aplicação interaja com outras plataformas ou serviços para ampliar suas funcionalidades e recursos.

Observações:

  • Os projetos são agnósticos de linguagem, qualquer linguagem / framework com foco em back-end pode ser utilizado a depender das skills do mentor / mentorado.
  • Não hesite em fazer perguntas em qualquer etapa da jornada. O papel do seu mentor é te ajudar.
  • Se você não conseguir atender a algum requisito, não se sinta culpado. Peça ajuda ou entregue o que conseguir realizar.
  • Pratique e aprimore seu "Google-Fu" - suas habilidades de pesquisa online - para encontrar soluções e informações relevantes.
  • Pratique o conceito de "Don't ask to ask, just ask" (Não peça para perguntar, apenas pergunte).
  • É importante definir prazos para cada etapa da jornada, garantindo um melhor aproveitamento do processo como um todo.