📚 Guia de Boas Práticas: Marp para Aulas

🎯 Princípios Fundamentais para Slides Educacionais

📖 1. Pedagogia Primeiro

  • Conteúdo define o design, não o contrário
  • Um conceito por slide - evite sobrecarga cognitiva
  • Progressão lógica - do simples ao complexo
  • Interatividade visual - mesmo sem cliques reais

🎨 2. Design Acessível

  • Contraste alto (texto escuro + fundo claro)
  • Fontes grandes (mín. 28px para projeção)
  • Cores consistentes com significado
  • Hierarquia visual clara

⚙️ Configuração Base Recomendada

📝 Template Padrão para Aulas:

---
marp: true
theme: default
paginate: true
backgroundColor: #ffffff
header: "**[Nome da Disciplina]** | [Tópico da Aula]"
footer: "Prof. [Seu Nome] | [Data] | Slide **{pageNo}**"
style: |
  section {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    font-size: 28px;            /* Tamanho mínimo para projeção */
    line-height: 1.4;           /* Espaçamento confortável */
    padding: 60px;              /* Margem adequada */
  }
  h1 { 
    color: #2c3e50; 
    font-size: 48px; 
    text-align: center;
    margin-bottom: 30px;
  }
  h2 { 
    color: #34495e; 
    border-left: 5px solid #3498db;
    padding-left: 15px;
    font-size: 36px;
  }
  h3 {
    color: #27ae60;
    font-size: 32px;
  }
  code { 
    background: #f8f9fa; 
    color: #d63384; 
    font-weight: bold; 
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 24px;            /* Código legível */
  }
  pre {
    background: #f8f9fa;
    border: 2px solid #dee2e6;
    border-radius: 8px;
    padding: 20px;
    font-size: 22px;            /* Código em bloco */
  }
  /* Cores para status/feedback */
  .success { color: #27ae60; }
  .warning { color: #f39c12; }
  .error { color: #e74c3c; }
  .info { color: #3498db; }
---

📐 Estrutura Pedagógica Eficaz

1. 🎬 Slide de Abertura (Título)

<!-- _class: title -->

Deve conter:

  • 🎯 Objetivo claro da aula
  • 📋 Agenda/roteiro
  • ⏱️ Duração estimada
  • 💡 Benefício para o aluno (“Ao final você saberá…“)

Exemplo:

<!-- _class: title -->
 
# 🚀 Test-Driven Development (TDD)
 
**Aprendendo a programar com qualidade**
 
### 🎯 Ao final desta aula você saberá:
 
- ✅ O que é TDD e por que usar
- ✅ Aplicar o ciclo Red-Green-Refactor
- ✅ Criar testes em Java com JUnit
- ✅ Desenvolver um projeto completo com TDD
 
**⏱️ Duração:** 90 minutos | **📅 Data:** [Data]

2. 📋 Slide de Agenda

# 📋 Roteiro da Aula
 
| Tempo        | Atividade                    | Tipo      |
| ------------ | ---------------------------- | --------- |
| **0-15min**  | 🧠 Conceitos de TDD          | Teoria    |
| **15-30min** | ⚙️ Configuração ambiente     | Prática   |
| **30-60min** | 💻 Projeto prático           | Hands-on  |
| **60-75min** | 🏆 Desafio individual        | Aplicação |
| **75-90min** | 🎯 Revisão e próximos passos | Síntese   |
 
### 💡 **Metodologia:** 40% teoria + 60% prática

3. 🧠 Slides Conceituais

Princípios:

  • Analogias visuais (exemplo: TDD = controle de qualidade)
  • Exemplos do mundo real
  • Progressão: O que → Por que → Como

Exemplo:

## 🏗️ TDD é como Construção Civil
 
### 🏛️ **Método Tradicional:**
 
1. 🧱 Construir a casa
2. 🔍 Testar se não cai
3. 😰 Torcer para dar certo
 
### ✨ **Método TDD:**
 
1. 📋 Fazer planta (teste)
2. 🏗️ Construir seguindo a planta (código)
3. ✅ Verificar se está conforme (executar teste)
 
### 💡 **Resultado:**
 
**Construção segura** vs **Construção no "achismo"**

💻 Boas Práticas para Código

1. 📏 Tamanhos e Formatação

### ✅ **FAÇA - Código Legível:**
 
```java
@Test
public void deveCalcularMediaCorretamente() {
    // Arrange
    CalculadoraNotas calc = new CalculadoraNotas();
 
    // Act
    double media = calc.calcularMedia(8.0, 7.0, 9.0);
 
    // Assert
    assertEquals(8.0, media);
}
```

EVITE - Código Muito Longo:

@Test
public void deveCalcularMediaCorretamenteParaTresNotasComValoresDiferentesValidandoSeOMetodoCalcularMediaDaClasseCalculadoraNotasRetornaOValorCorretoQuandoRecebeParametrosValidosEntreZeroEDez() {
    CalculadoraNotas calculadoraParaCalcularMediaDeTresNotasEscolares = new CalculadoraNotas();
    double mediaCalculadaPeloMetodoCalcularMediaDaCalculadoraNotas = calculadoraParaCalcularMediaDeTresNotasEscolares.calcularMedia(8.0, 7.0, 9.0);
    assertEquals(8.0, mediaCalculadaPeloMetodoCalcularMediaDaCalculadoraNotas);
}

### 2. **🎨 Syntax Highlighting Eficaz**

**Linguagens mais usadas em aulas técnicas:**
```markdown
```java        // Para Java
```python      // Para Python
```javascript  // Para JS/TS
```bash        // Para terminal/comandos
```json        // Para configurações
```xml         // Para Maven/configs
```yaml        // Para configurações modernas
```sql         // Para banco de dados

### 3. **🔍 Foco Visual no Código**

```markdown
### 🎯 **Destaque Partes Importantes:**

```java
@Test  // ← Esta anotação marca um teste
public void testeConverterDolarParaReal() {
    Conversor conversor = new Conversor();

    double resultado = conversor.converter(10.0);  // ← Linha principal

    assertEquals(50.0, resultado);  // ← Verificação
}

💡 Use comentários inline para explicar:

  • ✅ Conceitos novos
  • ✅ Sintaxe específica
  • ✅ Pontos de atenção

---

## 🎭 Elementos Visuais Eficazes

### 1. **🎨 Sistema de Cores Semântico**

```css
/* Defina cores com significado pedagógico */
.success { color: #27ae60; }  /* Verde - Correto/Aprovado */
.warning { color: #f39c12; }  /* Laranja - Atenção */
.error { color: #e74c3c; }    /* Vermelho - Erro/Reprovado */
.info { color: #3498db; }     /* Azul - Informação */
.highlight { background: #fff3cd; border-left: 4px solid #ffc107; padding: 1em; }

Uso consistente:

### Status do Teste:
 
- <span class="success">✅ PASSOU</span> - Código funcionando
- <span class="error">❌ FALHOU</span> - Precisa correção
- <span class="warning">⚠️ PENDENTE</span> - Ainda não implementado

2. 📊 Indicadores de Progress

### 🎯 **Progresso da Aula:**

████████████████████░░ 90% Concluído


### 📈 **Checkpoint de Aprendizado:**
- [x] ✅ Conceitos básicos
- [x] ✅ Configuração ambiente
- [x] ✅ Primeiro teste
- [ ] ⏳ Projeto completo

3. 🎪 Callouts Educacionais

<div class="highlight">
 
### 💡 **Dica de Ouro**
 
No VS Code, use `Ctrl + .` para importar automaticamente as classes necessárias!
 
</div>
 
### ⚠️ **Erro Comum**
 
> Muitos alunos esquecem de adicionar a dependência do JUnit no `pom.xml`.
> **Sintoma:** Linhas vermelhas em `@Test` e `assertEquals`.
> **Solução:** Verificar se a dependência está configurada.
 
### 🎯 **Para Relembrar**
 
- **Red:** Teste falha (normal!)
- **Green:** Código passa (celebrate!)
- **Refactor:** Melhorar sem quebrar (profissional!)

🎮 Técnicas de Engajamento

1. ❓ Slides Interativos (Mesmo Sendo Estáticos)

## 🤔 Pergunta para Reflexão
 
### **Cenário:** Você mudou uma linha de código e 15 testes quebraram.
 
### **O que fazer?**
 
**A)** 😰 Deletar todos os testes  
**B)** 🤷‍♂️ Ignorar os erros  
**C)** 🔍 Investigar por que quebraram  
**D)** ☕ Tomar um café e fingir que não aconteceu
 
---
 
### **Resposta:** C) 🔍 Investigar
 
**Por quê?** Os testes são seus "alarmes de incêndio" - eles estão te protegendo!

2. 🏆 Gamificação Visual

## 🎮 Desafio: Implementar Calculadora
 
### 🏅 **Níveis de Conquista:**
 
| Level | Badge         | Descrição                    |
| ----- | ------------- | ---------------------------- |
| 1⭐   | 🥉 **Bronze** | Cálculo básico funcionando   |
| 2⭐   | 🥈 **Prata**  | + Validação de entrada       |
| 3⭐   | 🥇 **Ouro**   | + Todos os testes passando   |
| 4⭐   | 🏆 **Master** | + Código limpo e documentado |
 
### 🎯 **Tempo:** 25 minutos
 
### 🤝 **Modo:** Individual com ajuda permitida

3. 📈 Demonstrações Antes/Depois

## 🔄 Transformação: Antes vs Depois TDD
 
<div style="display: flex; gap: 20px;">
 
<div style="flex: 1;">
 
### 😰 **ANTES (Sem TDD):**
 
```java
public class App {
    public static void main(String[] args) {
        // Será que funciona? 🤷‍♂️
        System.out.println("Hello World");
    }
}
```

Problemas:

  • ❌ Como sei se funciona?
  • ❌ E se mudar alguma coisa?
  • ❌ Como documentar o que faz?

😌 DEPOIS (Com TDD):

@Test
void deveCumprimentarCorretamente() {
    App app = new App();
    assertEquals("Hello World", app.saudar());
}

Benefícios:

  • ✅ Comportamento garantido
  • ✅ Mudanças seguras
  • ✅ Documentação viva
```

📏 Layout e Organização

1. 📱 Slides Responsivos

/* CSS para diferentes tipos de conteúdo */
.grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 30px;
  align-items: start;
}
 
.grid-3 {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 20px;
}
 
.center {
  text-align: center;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
 
.split-code {
  display: flex;
  gap: 20px;
}
.split-code > div {
  flex: 1;
}

2. 🎯 Hierarquia Visual Clara

# 📚 SEÇÃO PRINCIPAL (H1)
 
## 🎯 Tópico Importante (H2)
 
### 💡 Conceito Específico (H3)
 
#### 📝 Detalhe (H4)
 
**Texto em destaque** para palavras-chave
_Texto em itálico_ para ênfase sutil
`Código inline` para termos técnicos

3. ⚡ Slides de Transição

<!-- _class: title -->
<!-- _backgroundColor: "#3498db" -->
<!-- _color: "#ffffff" -->
 
# 🎯 PARTE 1 CONCLUÍDA!
 
### ✅ Você aprendeu:
 
- Conceitos básicos de TDD
- Configuração do ambiente
- Primeiro teste prático
 
### 🚀 Próximo:
 
**Hands-on: Projeto Completo**
 
---

🛠️ Aspectos Técnicos

1. 📁 Organização de Arquivos

projeto-aula/
├── slides-aula.md              # Apresentação principal
├── demo-recursos.md            # Exemplos e demos
├── exercicios.md               # Atividades práticas
├── images/
│   ├── diagrams/              # Diagramas UML/fluxos
│   ├── screenshots/           # Capturas de tela
│   └── icons/                 # Ícones personalizados
├── code-samples/              # Códigos de exemplo
└── handouts/                  # Material de apoio PDF

2. ⚙️ Configurações Úteis

---
# Configuração base para aulas
marp: true
theme: default
paginate: true
backgroundColor: #ffffff
# Metadados
title: "TDD em Java"
description: "Aula prática sobre Test-Driven Development"
author: "Prof. [Nome]"
keywords: ["TDD", "Java", "JUnit", "Testing"]
# Visual
headingDivider: 2 # H2 cria nova seção automaticamente
# Estilo global para todos os slides
style: |
  section {
    font-size: 28px;
    justify-content: flex-start;  /* Alinha conteúdo ao topo */
  }
  /* Slides especiais */
  section.title {
    justify-content: center;
    text-align: center;
    background: linear-gradient(45deg, #3498db, #9b59b6);
    color: white;
  }
  section.code {
    font-family: 'Fira Code', monospace;
  }
---

3. 🔄 Versionamento e Backup

# Git para controle de versão
git init
git add slides-aula.md
git commit -m "Versão inicial da aula TDD"
 
# Tags para versões específicas da aula
git tag v1.0-turma-2026-1
git tag v1.1-ajustes-pos-aula

♿ Acessibilidade e Inclusão

1. 👁️ Visual

style: |
  /* Alto contraste */
  section {
    color: #000000;                    /* Preto puro */
    background-color: #ffffff;         /* Branco puro */
  }
 
  /* Tamanhos adequados */
  h1 { font-size: 54px; }             /* Extra grande para títulos */
  h2 { font-size: 42px; }
  p, li { font-size: 32px; }          /* Legível à distância */
  code { font-size: 28px; }           
 
  /* Espaçamento confortável */
  section { line-height: 1.6; }
  li { margin-bottom: 8px; }

2. 🎨 Cores Acessíveis

/* Palette com bom contraste */
:root {
  --primary: #2c3e50; /* Azul escuro - WCAG AA+ */
  --success: #27ae60; /* Verde legível */
  --warning: #f39c12; /* Laranja contrastante */
  --error: #c0392b; /* Vermelho escuro */
  --info: #2980b9; /* Azul informativo */
}
 
/* Nunca use apenas cor para transmitir informação */
.success::before {
  content: "✅ ";
}
.error::before {
  content: "❌ ";
}
.warning::before {
  content: "⚠️ ";
}

3. 📝 Alt-text e Descrições

![Diagrama do ciclo TDD mostrando as três fases: Red (teste falha), Green (código passa), Refactor (melhoria)](./images/tdd-cycle.svg "Ciclo completo do Test-Driven Development")
 
<!-- Para gráficos complexos, adicione descrição textual -->
 
### 📊 Descrição do Gráfico:
 
O gráfico mostra que projetos com TDD têm 40% menos bugs...

📊 Métricas e Feedback

1. 🎯 Slides de Checkpoint

## 📋 Checkpoint: Você consegue responder?
 
### 🤔 **Auto-avaliação (30 segundos):**
 
1. **O que significa TDD?**
   - [ ] Sei explicar com minhas palavras
   - [ ] Tenho uma ideia vaga
   - [ ] Preciso revisar
 
2. **Qual a ordem correta?**
   - [ ] Red → Green → Refactor
   - [ ] Green → Red → Refactor
   - [ ] Não tenho certeza
 
### 🚨 **Se mais de 50% marcou "preciso revisar":**
 
**→ Vamos fazer uma revisão rápida!**

2. 📈 Progresso Visual

## 🎯 Onde Estamos na Aula

Conceitos ████████████████████ 100% ✅ Ambiente ████████████████████ 100% ✅
Prática ████████████████░░░░ 80% ⏳ Desafio ░░░░░░░░░░░░░░░░░░░░ 0% ⏸️


### **⏳ Tempo restante:** 25 minutos
### **🎯 Próximo:** Implementar calculadora de notas

⚡ Troubleshooting Comum

1. 🖥️ Problemas de Projeção

<!-- Slide de backup para problemas técnicos -->
 
## 🚨 Sem Projetor? Sem Problema!
 
### 📋 **Roteiro Alternativo:**
 
1. **Explicação no quadro** - diagramas manuais
2. **Código no papel** - exercícios escritos
3. **Discussão em grupos** - conceitos abstratos
4. **Live coding individual** - cada um no seu notebook
 
### 💡 **Lembre-se:**
 
**Tecnologia falha, boa didática não!**

2. ⏰ Gestão de Tempo

## ⏱️ Slides de Controle de Tempo
 
### 🎯 **Check de Ritmo (slide oculto para professor):**
 
<!-- Use para se orientar durante a aula -->
 
**⏰ Minuto 15:** Devemos estar na configuração do ambiente
**⏰ Minuto 30:** Primeiro teste funcionando  
**⏰ Minuto 60:** Projeto básico concluído
**⏰ Minuto 75:** Iniciando desafio final
 
### 🚨 **Se atrasou:**
 
- Pule slides teóricos extras
- Foque no hands-on
- Deixe conceitos avançados para próxima aula

🎯 Checklist Final

Antes de dar a aula:

📋 Conteúdo:

  • Um objetivo claro por slide
  • Progressão lógica do conteúdo
  • Exemplos práticos e relevantes
  • Atividades hands-on balanceadas
  • Slide de conclusão/resumo

🎨 Design:

  • Fontes grandes (28px+)
  • Contraste alto
  • Código legível e comentado
  • Cores consistentes
  • Layout limpo e organizado

⚙️ Técnico:

  • Slides testados no projetor
  • Backup em PDF
  • Códigos testados e funcionando
  • Links verificados
  • Material de apoio pronto

🎭 Pedagógico:

  • Analogias preparadas
  • Perguntas interativas planejadas
  • Checkpoints de compreensão
  • Cronograma realista
  • Plano B para problemas técnicos

🚀 Exemplo Prático Completo

Slide Modelo Seguindo Todas as Boas Práticas:

---
marp: true
theme: default
paginate: true
backgroundColor: #ffffff
header: "**TDD em Java** - ETEC 2026"
footer: "Prof. João Silva | 02/03/2026 | Slide **{pageNo}**"
style: |
  section {
    font-family: 'Segoe UI', sans-serif;
    font-size: 32px;
    line-height: 1.5;
    padding: 60px;
  }
  h1 { color: #2c3e50; font-size: 48px; text-align: center; }
  h2 { color: #34495e; border-left: 5px solid #3498db; padding-left: 15px; }
  code { background: #f8f9fa; color: #d63384; padding: 4px 8px; font-size: 28px; }
  pre { background: #f8f9fa; border: 2px solid #dee2e6; padding: 20px; font-size: 24px; }
  .success { color: #27ae60; }
  .error { color: #e74c3c; }
  .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
---
 
<!-- _class: title -->
 
# 🧪 Primeiro Teste TDD
 
### 🎯 **Objetivo:** Criar um teste que falha (Red)
 
**⏱️ Tempo:** 10 minutos | **🤝 Modo:** Individual com suporte
 
---
 
## 💻 Código do Teste
 
### 📝 **Arquivo:** `ConversorTest.java`
 
```java
@Test
public void testeConverterDolarParaReal() {
    // Arrange - Preparar os dados
    Conversor conversor = new Conversor();  // ❌ Erro esperado!
 
    // Act - Executar a ação
    double resultado = conversor.converter(10.0);
 
    // Assert - Verificar resultado
    assertEquals(50.0, resultado);  // 10 × 5 = 50
}
```

🎯 Padrão AAA: ArrangeActAssert


🔴 Resultado Esperado: ERRO!

😌 Isso é NORMAL no TDD:

  • ✅ Classe Conversor não existe ainda
  • ✅ VS Code mostra linhas vermelhas
  • ✅ Estamos no estágio RED 🔴
  • ✅ O teste define o que queremos

🎯 Próximas etapas:

  1. 🔴 RED ← Estamos aqui
  2. 🟢 GREEN ← Criar código mínimo
  3. 🔵 REFACTOR ← Melhorar código

💡 Dica: Use Ctrl + . para imports automáticos!


❓ Checkpoint de Compreensão

🤔 Pergunta rápida (30 seg):

Por que começamos com um teste que FALHA?

A) 😅 Porque somos pessimistas
B) 🎯 Para definir o comportamento esperado
C) 🤷‍♂️ Porque é tradição
D) 💻 Porque o VS Code gosta

Resposta: B) 🎯

Explicação: O teste é nossa “especificação executável” - ele documenta exatamente o que queremos que aconteça!



---

## 🎉 Conclusão

### 🌟 **Marp + Boas Práticas = Aulas Eficazes**

Seguindo este guia, você criará apresentações que:
- ✅ **Engajam** os alunos visualmente
- ✅ **Comunicam** conceitos claramente
- ✅ **Suportam** diferentes estilos de aprendizagem
- ✅ **Funcionam** mesmo com problemas técnicos

### 🚀 **Lembre-se:**
**O melhor slide é aquele que ajuda o aluno a aprender, não o que impressiona pela tecnologia!**

---

*Este guia foi criado com base em boas práticas de design instrucional e experiência em salas de aula técnicas.*