# Python ## Nivel 1 - [ ] **Python - Fundamentos**: - Conhecer os tipos primitivos - Declarar variáveis, considerando os diferentes tipos - Usar estruturas condicionais ('if', 'else') - Conhecer os operadores de comparação - Usar estruturas de repetição e laços ('while', 'for') - Usar funções, passando parâmetros e argumentos - Manipular métodos - Manipular arrays e listas - Obter dados de uma API - Fazer chamadas assíncronas - Criar construtores - Funções anônimas - [ ] **Conceitos de Orientação a Objetos**: - A Programação Orientada a Objetos é um paradigma de programação de software baseado na composição e interação entre diversas unidades chamadas de 'objetos' e as classes, que contêm uma identidade, propriedades e métodos). Ela é baseada em quatro componentes da programação: abstração digital, encapsulamento, herança e polimorfismo. - Como funcionam objetos - Criar e utilizar construtores - O que são classes - Criar e utilizar métodos - Como funciona encapsulamento - O que é herança - O que é polimorfismo - Como funcionam interfaces - O que são abstrações - [ ] **Estruturas de Dados**: - Conhecer as principais estruturas de dados - Implementar as principais estruturas de dados - [ ] **Python - Métodos Especiais**: - Entender o conceito de métodos especiais (ou mágicos) - Conhecer os principais métodos mágicos e como usá-los - [ ] **Python - Coleções**: - Utilizar listas e tuplas - Utilizar polimorfismo nas coleções - Utilizar conjuntos e dicionários ## Nivel 2 - [ ] **Python - Testes**: - Usar testes unitários - Usar testes de integração - Usar testes de comportamento (behavior) - Usar mocks - [ ] **Flask**: - Criar aplicações web - Definir rotas, redirecionamentos e templates - Validar formulários - [ ] **Design Patterns**: - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software. - Conhecer e aplicar os principais Design Patterns - [ ] **Python - Mixins**: - Usar orientação a objetos - Entender o uso de herança múltipla - [ ] **Python - Sobrecarga de operadores**: - Definir métodos para um operador - Realizar operações com objetos - [ ] **Django**: - Criar aplicações web - Entender a arquitetura de uma aplicação feita com Django - Criar o admin de uma página - Utilizar templates e rotas - Criar formulários - [ ] **Django Rest Framework**: - Desenvolver APIs - Trabalhar com modelos, serializers e views - Incluir filtros, buscas e ordenação - Limitar o número de requisições ## Nivel 3 - [ ] **Python - Tipagem estática**: - Utilizar tipagem estática em Python - [ ] **Python - Corrotinas**: - Escrever aplicações assíncronas - Lidar com concorrência - Conhecer o conceito de objetos aguardáveis - Criar tarefas concorrentemente - [ ] **Python - Geradores**: - Criar objetos iteradores - Usar avaliação preguiçosa - Executar tarefas simultâneas - Uso da palavra reservada yield - [ ] **Python - Metaprogramação**: - Escrever um programa que manipula outros programas - [ ] **Python - MVC e MTV**: - Entender o padrão MVC - Entender o padrão MTV - Compreender a diferença entre os padrões MVC e MTV - [ ] **Python - Pooling de processos**: - Executar processos em paralelo - Conhecer a classe Pool ## Habilidade Auxiliar: Infraestrutura e boas práticas - [ ] **HTML - Fundamentos**: - Aprender quais tags são necessárias para um HTML básico - Criar um parágrafo de texto - Exibir uma imagem - Conhecer a diferença entre 'h1', 'h2', 'h3', etc - Criar um texto com hyperlink - Criar um formulário com campos relevantes - Criar uma lista de itens ordenada ou não ordenada - Criar uma lista de itens dentro de uma lista suspensa (dropdown list) - Conectar com um arquivo de CSS - Criar uma tabela - Adicionar IDs e classes - [ ] **CSS - Fundamentos**: - Aprender a estrutura visual de uma página, com 'margin' e 'padding' - Estabelecer o tamanho com 'width' e 'height' - Aprender sobre a posição de um elemento ('static', 'relative' ou 'absolute) - Aprender sobre o 'display' de exibição de um elemento ('block', 'inline', 'inline-block') - Aprender a posicionar imagens em relação ao texto - Aprender sobre alinhamento - Aprender sobre estilo de fontes - Aprender as diferenças e vantagens de usar as diferentes unidades de medida em CSS (%, relativas, etc) - Conectar com os elementos (IDs, classes) de um arquivo HTML - Alterar características de um elemento quando o mouse passar por cima dele ('hover') - Aprender box-sizinh - Aprender Flexbox - Aprender Grid - [ ] **JavaScript - Fundamentos**: - Conhecer os tipos primitivos - Declarar variáveis, considerando a diferença entre 'var', 'let' e 'const' - Usar estruturas condicionais ('if', 'else') - Conhecer os operadores de comparação ('=', '==', '===') - Usar estruturas de repetição e laços ('while', 'for') - Usar funções, passando parâmetros e argumentos - Manipular arrays e listas - Aprender o conceito de Orientação a Objetos - Fazer um CRUD - Obter dados de uma API - Fazer chamadas assíncronas usando 'Async/Await', 'Promise', etc - [ ] **Estratégias de SEO**: - Escolher palavras-chave - Entender como o Google classifica páginas - Conhecer os fatores de rankeamento - Fazer Link Building ## Habilidade Auxiliar: Front-end - [ ] **HTML - Fundamentos**: - Aprender quais tags são necessárias para um HTML básico - Criar um parágrafo de texto - Exibir uma imagem - Conhecer a diferença entre 'h1', 'h2', 'h3', etc - Criar um texto com hyperlink - Criar um formulário com campos relevantes - Criar uma lista de itens ordenada ou não ordenada - Criar uma lista de itens dentro de uma lista suspensa (dropdown list) - Conectar com um arquivo de CSS - Criar uma tabela - Adicionar IDs e classes - [ ] **CSS - Fundamentos**: - Aprender a estrutura visual de uma página, com 'margin' e 'padding' - Estabelecer o tamanho com 'width' e 'height' - Aprender sobre a posição de um elemento ('static', 'relative' ou 'absolute) - Aprender sobre o 'display' de exibição de um elemento ('block', 'inline', 'inline-block') - Aprender a posicionar imagens em relação ao texto - Aprender sobre alinhamento - Aprender sobre estilo de fontes - Aprender as diferenças e vantagens de usar as diferentes unidades de medida em CSS (%, relativas, etc) - Conectar com os elementos (IDs, classes) de um arquivo HTML - Alterar características de um elemento quando o mouse passar por cima dele ('hover') - Aprender box-sizinh - Aprender Flexbox - Aprender Grid - [ ] **JavaScript - Fundamentos**: - Conhecer os tipos primitivos - Declarar variáveis, considerando a diferença entre 'var', 'let' e 'const' - Usar estruturas condicionais ('if', 'else') - Conhecer os operadores de comparação ('=', '==', '===') - Usar estruturas de repetição e laços ('while', 'for') - Usar funções, passando parâmetros e argumentos - Manipular arrays e listas - Aprender o conceito de Orientação a Objetos - Fazer um CRUD - Obter dados de uma API - Fazer chamadas assíncronas usando 'Async/Await', 'Promise', etc - [ ] **Estratégias de SEO**: - Escolher palavras-chave - Entender como o Google classifica páginas - Conhecer os fatores de rankeamento - Fazer Link Building