Skip to content

raphaelkaique1/study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

274 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ROADMAP

COMPUTER SCIENCE: FULL STACK CYCLE

1. Fundamentos de Computação

1.1 Hardware e Software

  • Arquitetura de Computadores

    • Componentes de hardware (CPU, memória, dispositivos de armazenamento).
    • Organização de sistemas computacionais.
    • Arquiteturas de processadores.
  • Sistemas Operacionais (Windows, Linux)

    • Funcionamento e gerenciamento de sistemas operacionais e de recursos.
    • Configuração e administração de ambientes Windows e Linux.
    • Virtualização e máquinas virtuais.
  • Conhecimentos de Prompt de Comando/Terminal

    • Uso básico e avançado do prompt de comando/terminal.
    • Navegação e manipulação de arquivos.
    • Automação de tarefas por linha de comando.
    • Scripting em ambientes de linha de comando.
  • Redes de Computadores

    • Fundamentos de redes (TCP/IP, DNS, DHCP).
    • Tipos de redes (LAN, WAN, MAN).
    • Protocolos de comunicação.
    • Configuração e administração de redes locais.
    • Segurança em redes.

1.2 Conceitos Básicos

  • Lógica de Programação

    • Estruturas condicionais e de repetição.
    • Construção de algoritmos simples e complexos.
    • Manipulação de variáveis, tipos e estruturas de dados.
    • Resolução de problemas computacionais.
  • Estruturas de Dados

    • Arrays, listas, filas, pilhas.
    • Estruturas de dados dinâmicas (árvores, grafos).
    • Algoritmos de ordenação e busca.
    • Operações e manipulações em estruturas de dados.
  • Algoritmos

    • Desenvolvimento e análise de algoritmos.
    • Otimização de algoritmos.
    • Algoritmos de busca, classificação, ordenação e recursividade.
    • Análise de complexidade.

2. Linguagens de Programação

2.1 C++

  • Sintaxe e Semântica

    • Detalhes da sintaxe e semântica da linguagem.
    • Manipulação de variáveis, tipos de dados, operadores, estruturas de controle.
  • Estruturas de Dados e Algoritmos

    • Implementação de estruturas de dados (listas, árvores, grafos).
    • Algoritmos de ordenação e busca.
  • Programação Orientada a Objetos (OOP)

    • Conceitos de OOP (encapsulamento, classes, herança, polimorfismo).
  • Programação Concorrente e Paralela

    • Desenvolvimento de aplicações que exploram concorrência e paralelismo.
    • Uso de threads e bibliotecas para programação paralela.
  • Desenvolvimento de Sistemas Embarcados

    • Concepção de software para sistemas com recursos limitados.
    • Programação para microcontroladores e sistemas embarcados.
  • Otimização de Código e Desempenho

    • Estratégias para otimização de código em C++.
    • Utilização eficiente de recursos de hardware.

2.2 JavaScript

  • Sintaxe e Funcionalidades ECMAScript+

    • Características do ECMAScript.
    • Arrow functions, destructuring, let/const, etc.
  • Manipulação DOM

    • Manipulação de elementos HTML.
    • Event handling e interação com o DOM.
  • Assincronismo (Promises, Async/Await)

    • Uso de Promises para gerenciamento de operações assíncronas.
    • Implementação de funções assíncronas com Async/Await.
  • AJAX

    • Utilização de XMLHttpRequest e Fetch API para comunicação assíncrona com servidores.
    • Tratamento de dados JSON.
  • Server-side Rendering (SSR)

    • Implementação de renderização no servidor em aplicações web.
    • Vantagens e desvantagens do SSR.
  • Progressive Web Apps (PWAs)

    • Desenvolvimento de aplicações web progressivas.
    • Uso de tecnologias para melhorar a experiência do usuário offline.
  • Desenvolvimento de Extensões do Navegador

    • Criação de extensões para navegadores.
    • Integração com APIs específicas do navegador.

2.3 Python

  • Sintaxe e PEP 8

    • Conformidade com as diretrizes do PEP 8.
    • Práticas recomendadas para a escrita de código.
  • Manipulação de Arquivos e Strings

    • Leitura e escrita de arquivos em Python.
    • Operações, formatação e manipulação avançada de strings.
  • Programação Funcional em Python

    • Utilização de funções de ordem superior.
    • Conceitos de programação funcional.
  • Python (Tkinter, PyQt)

    • Tkinter: Construção de interfaces gráficas usando a biblioteca padrão Tkinter.
    • PyQt: Desenvolvimento de aplicações desktop com a biblioteca PyQt.
  • Ciência de Dados e Machine Learning

    • Utilização de bibliotecas como NumPy, Pandas, e scikit-learn.
    • Desenvolvimento de modelos de machine learning com Python.
  • Desenvolvimento Web com Django e Flask

    • Construção de aplicações web utilizando Django ou Flask.
    • Integração de banco de dados, templates e rotas.
  • Automação de Tarefas com Python

    • Desenvolvimento de scripts para automação de tarefas.
    • Utilização de bibliotecas específicas para automação.

3. Bancos de Dados

3.1 SQL

  • Modelagem de Dados

    • Conceitos de modelagem de dados.
    • Estruturação de dados relacionalmente.
    • Modelagem de entidades e relacionamentos.
    • Normalização e desnormalização de esquemas.
  • Consultas Complexas

    • Consultas avançadas com joins, subconsultas e agregações.
    • Otimização de consultas.
  • Normalização e Desnormalização

    • Benefícios e desvantagens de normalizar e desnormalizar.
    • Estratégias de desnormalização quando necessário.
  • MySQL, PostgreSQL, SQLite

    • Características e diferenças entre sistemas de gerenciamento de banco de dados.
    • Configuração e administração básica.
    • Utilização de recursos específicos de cada banco.

3.2 NoSQL

  • Conceitos Básicos (Document, Key-Value, Graph)

    • Características e modelos de dados para bancos NoSQL.
    • Utilização de cada tipo em cenários específicos.
    • Comparação e compreensão entre os diferentes tipos de bancos de dados NoSQL.
  • MongoDB, Redis, Neo4j

    • Utilização e configuração de bancos NoSQL específicos.
    • Características e aplicação prática de bancos de dados NoSQL específicos.
    • Modelagem de dados em bancos NoSQL.

4. DevOps

4.1 Ferramentas de Desenvolvimento

  • Continuous Integration e Continuous Deployment (CI/CD)

    • Implementação de pipelines de CI/CD.
    • Integração entre desenvolvimento e operações.
    • Práticas de Continuous Integration e Continuous Deployment (CI/CD).
    • Ferramentas populares como Jenkins, GitHub Actions, GitLab CI/CD.
    • Automação no desenvolvimento e entrega de software.
    • Automação de testes, construção e deploy contínuo.
  • Controle de Versão (Git/GitHub)

    • Versionamento de código com Git para controle de versão.
    • Uso do GitHub (fork e etc).
    • Estratégias de branching.
  • Ambientes Virtuais (venv, virtualenv)

    • Criação e gestão de ambientes virtuais.
    • Isolamento de dependências.
  • Docker e Containers

    • Virtualização de aplicações com Docker.
    • Criação e configuração de containers.
    • Utilização avançada de Docker para criação de ambientes isolados.
    • Orquestração de múltiplos containers com Docker Compose.

4.2 Cloud Computing

  • AWS, Google Cloud, Azure
    • Conhecimento e utilização de serviços oferecidos por plataformas de nuvem.
    • Configuração e escalabilidade em ambientes de nuvem.

4.3 Ferramentas de Monitoramento

  • Prometheus, Grafana
    • Configuração e utilização do Prometheus para monitoramento.
    • Visualização de métricas e dados com Grafana.

5. Desenvolvimento Web

5.1 Fundamentos da Web

  • Protocolos HTTP/HTTPS
    • Funcionamento do protocolo HTTP/HTTPS.
    • Códigos de status e métodos de requisição.
    • Métodos HTTP (GET, POST, etc.).
    • Segurança em comunicações web.
    • Configuração e obtenção de certificados SSL/TLS.

5.2 Frontend

  • HTML5, CSS3, SASS/LESS

    • Estruturação semântica com HTML5.
    • Estilização avançada com CSS3.
    • Pré-processadores CSS (SASS, LESS).
  • Frameworks CSS (Bootstrap, Tailwind)

    • Utilização de frameworks para desenvolvimento ágil e design responsivo.
    • Personalização e extensão de frameworks.
  • Frameworks JavaScript

    • Desenvolvimento de componentes reutilizáveis.
    • Estado e gerenciamento de dados.
    • Integração com APIs.
  • TypeScript

    • Uso de tipos em JavaScript.
    • Tipagem estática e funcionalidades adicionadas ao JavaScript.
    • Migração de projetos JavaScript para TypeScript.

5.3 Backend

  • Servidores Web (Node, Express)

    • Configuração e criação de servidores com Node.js e Express.
    • Roteamento e middleware.
  • Administração de Servidores Linux

    • Configuração e administração avançada de servidores Linux.
    • Implementação de serviços e segurança.
  • RESTful APIs / Fetch API / Consumo e Criação de APIs

    • Princípios RESTful.
    • Consumo de APIs utilizando a Fetch API.
    • Desenvolvimento de APIs RESTful.
  • Banco de Dados (SQL e NoSQL)

    • Modelagem de dados relacional (SQL).
    • Operações CRUD em bancos de dados relacionais.
    • Utilização de bancos de dados NoSQL.
  • Configuração de Redes Avançadas

    • Projeto e implementação de redes complexas.
    • Configuração de roteadores, switches e firewalls.

5.4 Segurança, Autenticação e Autorização

  • Práticas de Segurança em Desenvolvimento Web

    • Identificação e prevenção de vulnerabilidades comuns.
    • Configuração segura de servidores web.
  • Segurança de Rede

    • Estratégias para proteção contra ameaças em redes.
    • Monitoramento e detecção de atividades suspeitas.
  • Criptografia

    • Conceitos de criptografia.
    • Implementação de criptografia em comunicações.
  • OAuth2:

    • Entendimento do protocolo OAuth2.
    • Implementação de autenticação e autorização baseadas em OAuth2.
  • JWT (JSON Web Tokens)

    • Compreensão do formato e funcionamento dos JSON Web Tokens.
    • Utilização de JWT para autenticação.
  • OWASP Top 10

    • Compreensão das principais ameaças de segurança.
    • Estratégias para mitigação.

6. Desenvolvimento Desktop

6.1 Introdução ao Desenvolvimento de Software para Desktop

  • Conceitos e Fundamentos

    • Definição de software para desktop e suas características principais.
    • Compreensão do ciclo de vida de desenvolvimento de software para desktop.
    • Diferenças entre aplicações desktop e aplicações web.
  • C# (Windows Forms, WPF)

    • Windows Forms: Desenvolvimento de interfaces com Windows Forms.
    • WPF (Windows Presentation Foundation): Utilização de recursos avançados para criação de interfaces.

6.2 Linguagens de Programação para Desktop

  • C

    • Conhecer a sintaxe e semântica da linguagem
    • Uso e configuração de framework
  • Java (JavaFX, Swing)

    • JavaFX: Desenvolvimento de interfaces modernas e responsivas.
    • Swing: Criação de interfaces gráficas tradicionais em Java.
  • Electron (para desenvolvimento multiplataforma)

    • Utilização do Electron para criar aplicações desktop multiplataforma usando tecnologias web.

6.3 SDK (Software Development Kit) e Ferramentas

  • Utilização de SDKs Específicos para Desenvolvimento Desktop (gcc, make, cmake)

    • Estudo de SDKs específicos para o desenvolvimento embarcado.
    • Exploração de SDKs para plataformas específicas.
    • Configuração e uso de ferramentas de desenvolvimento.
  • Ferramentas de Desenvolvimento Integradas (IDEs) para Desktop

    • Escolha e configuração de IDEs adequadas para o desenvolvimento desktop.
  • Integração Avançada com Sistemas Operacionais

    • Exploração de recursos avançados oferecidos pelos sistemas operacionais.
    • Configuração e ajustes específicos para cada plataforma.

6.4 Interface Gráfica do Usuário (GUI)

  • Design de Interfaces para Desktop (UI/UX)

    • Princípios de design de interface e experiência do usuário.
    • Guidelines específicas para cada plataforma.
  • Interação com o Usuário

    • Compreensão da interação homem-máquina.
    • Elementos de interface como botões, campos de texto, etc.
  • Usabilidade

    • Estratégias para melhorar a usabilidade das aplicações desktop.
    • Testes de usabilidade.

6.5 Conectividade e Comunicação

  • Integração de APIs para Desktop

    • Consumo de APIs em aplicações desktop.
    • Desenvolvimento de APIs para integração com outras aplicações.
  • Comunicação em Rede

    • Protocolos de comunicação em redes locais e remotas.
    • Configuração e utilização de sockets.
  • WebSocket e Outras Tecnologias

    • Implementação e utilização de WebSocket para comunicação em tempo real.
    • Exploração de outras tecnologias de comunicação avançada.

6.6 Segurança em Aplicações Desktop

  • Práticas de Segurança

    • Implementação de boas práticas de segurança no código.
    • Prevenção de vulnerabilidades comuns.
  • Criptografia

    • Utilização de técnicas de criptografia para proteger dados sensíveis.
    • Algoritmos de criptografia aplicados a aplicações desktop.
  • Autenticação e Autorização em Aplicações Desktop

    • Estratégias de autenticação segura.
    • Controle de acesso e autorização.

6.7 Testes e Depuração

  • Estratégias de Teste para Aplicações Desktop

    • Desenvolvimento e execução de testes unitários e de integração.
    • Testes de usabilidade.
  • Ferramentas de Depuração

    • Utilização de ferramentas de depuração para identificar e corrigir erros.

6.8 Desenvolvimento Multiplataforma

  • Abordagens para Desenvolvimento Multiplataforma

    • Estratégias para garantir a compatibilidade em diferentes sistemas operacionais.
    • Considerações sobre design responsivo.
  • Considerações sobre Compatibilidade

    • Adaptação de interfaces e funcionalidades para diferentes plataformas.

7. Desenvolvimento IoT

7.1 Desenvolvimento para IoT (Internet of Things)

  • Conceitos Básicos de IoT

    • Definição e características da Internet das Coisas.
    • Exemplos práticos de aplicações IoT.
  • Sensores e Atuadores

    • Tipos de sensores e atuadores utilizados em aplicações IoT.
    • Configuração e leitura de dados.
  • Comunicação com Dispositivos IoT

    • Protocolos de comunicação com dispositivos IoT.
    • Integração de sensores e atuadores.
  • Protocolos de Comunicação IoT (MQTT, CoAP)

    • Utilização de protocolos específicos para comunicação em dispositivos IoT.
  • Desenvolvimento de Aplicações para IoT

    • Desenvolvimento de software para controle e monitoramento de dispositivos IoT.
  • Plataformas IoT (Arduino, Raspberry Pi)

    • Desenvolvimento de projetos práticos utilizando Arduino e Raspberry Pi.
    • Integração com plataformas populares.

8. Desenvolvimento Avançado

8.1 Arquitetura de Solução

  • Conceitos de Arquitetura

    • Escolha adequada da arquitetura de acordo com requisitos do projeto.
    • Entendimento e aplicação de arquiteturas como Model-View-Controller (MVC), Model-View-View-Model (MVVM), entre outras.
  • Padrões de Projeto (Design Patterns)

    • Uso de padrões de projeto para reutilização de código e escalabilidade.
    • Escolha adequada de padrões para cenários específicos.
    • Aplicação de padrões de design para resolver problemas recorrentes.
    • Exemplos de Design Patterns comuns: Singleton, Factory, Observer, Strategy.
    • Implementação de padrões como Singleton, Observer, Factory, etc.
    • Utilização de design patterns como ferramenta para estruturar o código.
    • Implementação prática dos padrões em linguagens modernas.

8.2 Arquitetura de Software

  • Escalabilidade e Desempenho, Estratégias de Otimização, Caching

    • Estratégias para escalabilidade e otimização de desempenho.
    • Implementação de cache para melhoria de performance.
  • Testes Automatizados, TDD (Jasmine, Mocha, Jest, Test-Driven Development) e Behavior-Driven Development (BDD)

    • Princípios do desenvolvimento orientado a testes.
    • Implementação de testes automatizados.
    • Adoção de Test-Driven Development (TDD) como prática de desenvolvimento.
    • Benefícios do TDD e BDD na qualidade do código.
    • Ferramentas populares para testes automatizados.
    • Uso de frameworks de teste como Jasmine, Mocha, Jest.
    • Implementação prática com frameworks como Jest, Mocha e PyTest.

8.3 Future of Web

  • web3, Blockchain, Tokenization, Smart Contracts & Metaverse
    • Web3 Development
    • Funcionamento da Blockhain
    • Criação de Smart Contracts
    • Tokenização de ativos
    • Desenvolvimento no Metaverso (SandBox)

9. Boas Práticas

9.1 Clean Code

  • Clean Code & more

    • Boas práticas de desenvolvimento de código limpo.
    • Princípios do Clean Code (legibilidade, simplicidade e organização).
    • Nomes descritivos e significado semântico no código.
    • Estruturação adequada de funções e classes.
    • Evitando comentários desnecessários com código autoexplicativo (automentado).
  • Princípios SOLID

    • Single Responsibility Principle (SRP) – Princípio da Responsabilidade Única.
    • Open/Closed Principle (OCP) – Princípio Aberto/Fechado.
    • Liskov Substitution Principle (LSP) – Princípio da Substituição de Liskov.
    • Interface Segregation Principle (ISP) – Princípio da Segregação de Interface.
    • Dependency Inversion Principle (DIP) – Princípio da Inversão de Dependência.

9.2 Metodologias de Desenvolvimento

  • Metodologias Ágeis (Agile, Scrum, Kanban)
    • Princípios do Manifesto Ágil.
    • Scrum: papéis, eventos e artefatos.
    • Kanban: fluxo contínuo de desenvolvimento.
    • Benefícios e aplicação no ciclo de vida do software.

Copyright © 2026 Raphael Kaíque Dias Santos

Contributors