Repositorio de apresentacoes sobre engenharia de software, cobrindo principios de design, arquitetura limpa, refatoracao de codigo legado e qualidade de codigo atraves de testes. O material e voltado para encontros de comunidades e guilds de engenharia, com foco em exemplos praticos e discussoes em grupo.
Todas as apresentacoes sao Jupyter Notebooks executaveis, com exemplos de codigo em Python que podem ser rodados interativamente.
Arquivo: SOLID.ipynb
Apresentacao didatica sobre os 5 principios SOLID, com exemplos comparativos de codigo "antes e depois" para cada principio:
- Single Responsibility (SRP) - Separacao de responsabilidades em classes
- Open/Closed (OCP) - Extensao sem modificacao via abstracoes
- Liskov Substitution (LSP) - Substituicao segura de subtipos
- Interface Segregation (ISP) - Interfaces especificas ao inves de genericas
- Dependency Inversion (DIP) - Depender de abstracoes, nao de implementacoes
Demonstra como a aplicacao iterativa dos principios SOLID leva naturalmente ao surgimento do Strategy Pattern.
Arquivo: Refatorando Codigo Legado com SOLID e Design Patterns.ipynb
Workshop pratico e interativo sobre refatoracao de codigo legado. Aborda:
- Complexidade essencial vs. acidental
- Identificacao de code smells: condicionais excessivas, classes gigantes, metodos longos
- Exercicios guiados de refatoracao aplicando SRP, OCP e Factory Method
- Estrategias para refatoracao incremental com cobertura de testes
Formato de oficina com pausas para os participantes pensarem e codificarem antes de ver a solucao.
Arquivo: 7o Forum da Guilda de Engenharia de Software.ipynb
Discussao guiada sobre Clean Architecture, apresentada no 7o Forum da Guilda de Engenharia de Software. Cobre:
- A regra de ouro: dependencias apontam para o dominio
- Componentes principais com exemplos de codigo: Entities, UseCases, Presenters, Services, Repositories, Adapters e Controllers
- Exemplo completo de Presenter com enriquecimento de dados
- Quando Clean Architecture parece "overengineering" e como lidar
- Aplicacao em projetos pequenos e legados
Inclui diagramas visuais da arquitetura e referencias bibliograficas.
Arquivo: Testes como ferramenta para identificar codigo que pede refatoracao.ipynb
Exercicios praticos que demonstram como a dificuldade em testar revela problemas de design:
- Acoplamento excessivo - Injecao de dependencia como solucao
- Violacao do SRP - Separacao de responsabilidades para testabilidade
- Violacao do DIP - Uso de Protocols/interfaces para facilitar mocks
- God Object - Decomposicao em classes coesas e independentes
Cada exercicio apresenta o codigo problematico, mostra por que e dificil testar e aplica a refatoracao com o resultado testavel.
Pasta: relatorio_o_lugar_que_ainda_nao_existe/
Pesquisa de mercado sobre um potencial espaco de coworking criativo/maker em Curitiba. Contem analise de 19 respostas com visualizacoes graficas sobre interesse, frequencia de uso, preco e colaboracao.
- Python 3.10+
- Jupyter Notebook
pip install -r requirements.txtComo notebooks interativos:
jupyter notebookPara gerar slides HTML:
jupyter nbconvert --to slides <notebook>.ipynb --post serveJohnny Wellington - CEO & Engenheiro de Software na Arbet Studio. 17+ anos de experiencia, com passagens por Nubank, QuintoAndar e Snowman Labs. Especialista em arquitetura de software, design de APIs, testes automatizados e CI/CD.
Este material e disponibilizado para fins educacionais.