Este documento tem por objetivo descrever e orientar o estágio do Justiça Fácil.
A rotina do estágio será dividida em:
- Estudo teórico: dividido em algumas áreas, como Algoritmos, Arquiteturas de Software, Python, etc.;
- Prática deliberada: prática do uso de ferramentas e de conhecimentos teóricos;
- Contribuições (não se limitando a):
- Entregas de issues
- Participação do controle de qualidade
- Participação ou criação de projetos no ambiente de trabalho
- Conduta do CW
- Repasse de conhecimentos
- Report diário às 15:30 para o estagiário explicar o que ele aprendeu desde a último report;
- Feedbacks dos mentores no dia 1º e 15º de cada mês;
- Assessment de leituras todo dia 1º;
- Leitura de um artigo por dia (dentro do contexto de soft e hard skills definidas no plano de estágio);
- Prosas: pelo menos duas por mês (data e assunto a serem escolhidos pelo próprio estagiário).
Os níveis definidos abaixo, tem por objetivo facilitar o reconhecimento do grau de compreensão por parte do estagiário. Por conhecimento, aqui, vamos entender qualquer ferramenta, assunto, disciplina, tecnologia, etc.
- Conhecer: Saber que uma determinada conhecimento existe e para quê serve;
- Saber usar: Saber como e quando aplicar o básico de algum conhecimento;
- Entender: Saber como os mecanismos internos de um determinado conhecimento se relacionam;
- Relacionar: Além de entender o conhecimento, também compreender o todo, como aquilo se relaciona com outros conhecimentos.
Nem sempre essa sequência segue uma ordem exata, e podemos, por exemplo, entender como alguma coisa funciona antes mesmo de saber usar, mas de forma geral, essa é a régua que mediremos o conhecimento de agora em diante.
- Algoritmos e estruturas de dados
- Expressões regulares
- Tabelas hash
- Árvores balanceadas
- Lista, pilha e fila
- Listas encadedas e duplamente encadeadas
- Versionamento
- Semantic versioning
- Comandos do GIT
- init
- commit
- merge
- branch
- pull/push
- rebase
- Git Flow
- Boas práticas de versionamento
- Linux
- SSH
- GPG (OpenPGP)
- Conhecimento de shell script básico
- Básico sobre arquitetura de computadores
- Containerização
- Banco de dados
- SQL Básico
- Uso do índice
- Configuração de algum banco
- Python
- Domínio da linguagem
- Django e suas ferramentas
- Django
- Django Rest Framework
- DjangoRQ
- Mixins
- Arquitetura de software
- Herança e composição de classes
- Modularização e micro serviços
- Injeção e inversão de dependência
- Web
- RFC 2616
- Arquitetura REST
- Arquitetura cliente-servidor
- Requisições Web
- Sessões
- Cabeçalhos
- Payload e query string
- Uso do navegador para compreensão de uma requisição HTTP
- Ferramentas como
curl
epython requests
- Compreensão de HTML e JavaScript
- Testes
- Testes unitários e de integração
- Mocks, stubs e doubles
- Test Driven Development
- Tecnologias
- Redis
- Postgresql
- S3
Diretrizes para o desenvolvimento de softskills:
- Comunicação verbal e escrita
- Exemplos:
- Verbal: Explicar uma ideia de forma compreensivel
- Escrita: Transimitir o máximo de informações sem que haja necessidades de perguntas
- Exemplos:
- Reconhecer limite de suas capacidade e pedir ajuda
- Exemplo: Não deve ficar mais de um dia sem avanço qualquer e sem pedir ajuda
- Atitude
- Exemplo: corrigir problemas identificados sem a necessidade de uma força externa
- Negociação
- Exemplos:
- Negociar prazos antes que eles vençam;
- Saber argumentar o porquê de algo;
- Exemplos:
- Planejamento
- Exemplos:
- Priorizar atividades
- Definir deadlines
- Exemplos:
- Feedbacks (dar e receber)
- Autodidatismo
- Exemplos:
- Ter um ou mais canais de atualização
- Demonstrar novos conhecimentos periodicamente
- Exemplos:
Textos e livros a serem lidos durante o estágio.
- Depoimento do Herberth Amaral sobre como trabalhar no JF;
- Clean code, do Robert Martin;
- 12factor;
- Manual de conduta do JF;
Alguns métodos interessantes a serem utilizados durante o estágio (não se limitando a estes):
- TDD
- Pair programming
- Dojos