SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Deixando o código mais
amigável para as próximas
gerações
Fabio Perrella
Eng. Computação Poli 2004
Líder Técnico @ Locaweb
- Líder em Hosting no Brasil
- Eleita umas das melhores empresas para se trabalhar
- https://www.locaweb.com.br/carreira/
Como ter assunto para fazer uma
palestra?
http://www.greaterthancode.com/podcast/008-sandi-metz-and-katrina-owen/
2017
2016
https://github.com/fabioperrella/my-changelog/blob/master/CHANGELOG.md
Como deixar o código mais amigável
para as próximas gerações!
Agenda
- Introdução
- Documentação
- Histórico de commits
- Clareza do código
- Testes claros
- Merge requests construtivos
Por que falar desse assunto?
Migração de sistemas legado para novo
Sistema Legado
- Dificuldade pra entender
- Medo de alterar
Sistema novo
- Fácil de alterar
- Uso de tecnologias novas
- Mas….. Pode virar o legado de amanhã! (literalmente)
Passo 1: Documentação
Tomdoc - tomdoc.org
Padrão para documentação de métodos para Ruby
asciiflow.com
Documente códigos sem contexto
Keepachangelog.com
Documentação de gems
- Ajuda muito na hora de precisar atualizar de uma versão X para Y
http://code.locaweb.com.br/paas/provisioning-core/blob/master/CHANGELOG.md
Documente tudo que possa gerar dúvidas
Exemplo no crontab
Clean Code
Uncle Bob
Código claro > Comentários
Clean Code - Necessary Comments
http://blog.cleancoder.com/uncle-bob/2017/02/23/NecessaryComments.html
“But it does happen; and when it does nothing can be more helpful than a well
written, well thought through, comment.”
Histórico de commits
Contando a história do código através dos commits
https://about.futurelearn.com/blog/telling-stories-with-your-git-history/
Commits atômicos
“The smallest amount of code changed which delivers value”
Explicar o porquê e não só o “como”
Padrão para commits: http://chris.beams.io/posts/git-commit
Utilize o corpo do commit para explicar o porquê
Remover commits de wip, typo, fix, etc..
$ git rebase -i master (usando squash)
Preferir rebase para atualizar feature branches
Merge só quando for mergear o MR
Commit --fixup para atualizar commit antigo
https://robots.thoughtbot.com/autosquashing-git-commits
git add .
git commit --fixup add92db
git rebase -i --autosquash HEAD~6
Clareza do código
Cuidado com excesso de indireções
Indireção: despachar uma mensagem através de um intermediário
https://jaysoo.ca/2015/11/21/avoid-unnecessary-indirection/
Clareza SOLID
DRY
Perguntas para avaliar um código
- O quão difícil foi para se escrever?
- O quão difícil é para se entender?
- Quando custará para alterar?
O quão difícil é responder perguntas sobre o domínio olhando o código?
- Quais são os estados de um farol?
- Qual a sequência de cores do farol?
Extraído do livro “99 bottles of OOP - Sandi Metz”
Composição > Herança
https://www.sitepoint.com/composition-inheritance/
Evitar o uso de includes
Composição > Includes !
Module prepend para ações secundárias (ex: logs)
http://gshutler.com/2013/04/ruby-2-module-prepend/
Module prepend
Vantagens sobre a gem aspector:
- fica explícito no código!
- aparece no stacktrace explicitamente em caso de exceção
Mais clareza com keyword arguments
http://gshutler.com/2013/04/ruby-2-module-prepend/
Nomear funções anônimas
Remoção de código obsoleto
gem debride
https://github.com/seattlerb/debride
Testes mais claros!
Proposta
Proposta
- Não se importe muito com DRY. Caso se importe, prefira uso de métodos
- Evite o uso de LETs e BEFOREs
- Tudo bem colocar mais de 1 expect dentro dos ITs
- Separe em 3 blocos: setup, exercise e verify
http://blog.locaweb.com.br/geral/melhorando-o-entendimento-de-testes-com-rspec
Merge requests contrutivos
Merge requests construtivos
- Torna o código mais entendível
- Reduz chance de bugs
- Espalha conhecimento entre membros
- Serve de referência para futuras consultas
Sugestão: definir um Guideline!
Dúvidas?
@fabioperrella

Mais conteúdo relacionado

Mais procurados

Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
Demoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaDemoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaVanderson Silva
 
Python Brasil[9] - Entrega Contínua
Python Brasil[9] - Entrega Contínua Python Brasil[9] - Entrega Contínua
Python Brasil[9] - Entrega Contínua Renzo Nuccitelli
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...Renato Groff
 
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...Renato Groff
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoRogerio Fontes
 

Mais procurados (11)

Oracle x PostgreSQL
Oracle x PostgreSQLOracle x PostgreSQL
Oracle x PostgreSQL
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
Demoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaDemoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a hora
 
Python Brasil[9] - Entrega Contínua
Python Brasil[9] - Entrega Contínua Python Brasil[9] - Entrega Contínua
Python Brasil[9] - Entrega Contínua
 
Evolucao php2
Evolucao php2Evolucao php2
Evolucao php2
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - Campinas .NET ...
 
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...
ASP.NET Core 2.1: conhecendo algumas das novidades previstas - .NET SP - Maio...
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - Introdução
 

Semelhante a Deixando código mais amigável para gerações futuras

Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesfabio perrella
 
QCon 2011
QCon 2011QCon 2011
QCon 2011Ismael
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...tdc-globalcode
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Marco Rosner
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHPVinícius Krolow
 
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...Renato Groff
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Fernanda Bernardo
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featuretdc-globalcode
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Rogerio Prado de Jesus
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Mario Guedes
 
HTML 5 - Semana da Computação - UFF
HTML 5 - Semana da Computação - UFFHTML 5 - Semana da Computação - UFF
HTML 5 - Semana da Computação - UFFLeonardo Balter
 
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Comunidade CanalSharePoint
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Renato Groff
 

Semelhante a Deixando código mais amigável para gerações futuras (20)

Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
 
QCon 2011
QCon 2011QCon 2011
QCon 2011
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHP
 
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...
7 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - .NET SP - ...
 
Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
GDB e Análise de Bugs
GDB e Análise de BugsGDB e Análise de Bugs
GDB e Análise de Bugs
 
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
 
HTML 5 - Semana da Computação - UFF
HTML 5 - Semana da Computação - UFFHTML 5 - Semana da Computação - UFF
HTML 5 - Semana da Computação - UFF
 
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 

Mais de fabio perrella

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecfabio perrella
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...fabio perrella
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Railsfabio perrella
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosfabio perrella
 

Mais de fabio perrella (7)

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspec
 
Efficient rails
Efficient railsEfficient rails
Efficient rails
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails
 
Ruby profiling
Ruby profilingRuby profiling
Ruby profiling
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dados
 

Deixando código mais amigável para gerações futuras