• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Clean Code
 

Clean Code

on

  • 5,044 views

 

Statistics

Views

Total Views
5,044
Views on SlideShare
3,186
Embed Views
1,858

Actions

Likes
11
Downloads
66
Comments
0

5 Embeds 1,858

http://www.agilecode.com.br 1505
http://agilecode.com.br 342
http://www.linkedin.com 9
http://twitter.com 1
https://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Clean Code Clean Code Presentation Transcript

    • Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.brIntrodução ao Clean Code
    • @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenciamento de Projetos - FGVCertificaçõesSCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
    • Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 palestras em eventosLíder da área de desenvolvimento na GenneraAutor da revista Java MagazinePalestranteInstrutor da Academia Java e Agile da GlobalcodeCriador dos treinamentos de Clean Code, Selenium eMaven da Agile CodeTrabalhou com as empresas:EDS, HP, GM, Citibank, OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed, Suntech, Vale do Rio
    • O conteúdo deste treinamento vai afetar na sua zona de conforto
    • Sobre o que vamos falar?
    • Profissionalismo e Felicidade!
    • Insatisfação com o fracasso!
    • Existe diferença?
    • Insatisfação com o trabalho
    • Você se sente profissional?
    • Você se sente profissional?
    • Você se sente profissional?
    • Poderia ser mais produtivo?
    • Sensação de impotência
    • Se sente sempre fazendo umtrabalho braçal e desgastante?
    • Qual é a diferença entre cansaço e stress?
    • Já teve vontade de largar tudo?
    • O que mais motiva um desenvolvedor?
    • “Quem trabalha apenas pelosalário, ganhe o que for, será sempre mal pago.” (Autor desconhecido)
    • “Qual é a sua obra? Quando você se for, o vai restar?” (Mario Cortella)
    • Afinal, quanto custa a bagunça para a empresa?
    • Alta rotatividade
    • Demora no lançamento de novas funcionalidades
    • Dificuldade na hora de realizar qualquer modificação...
    • Alta incidência de bugs?
    • Quanto custa a falta deconfiança do seu cliente?
    • Quanto tempo você perdetentando entender o código para corrigir um bug?
    • Conclusão: Passamos a maiorparte do tempo lendo o código!
    • Evolução da Produtividade Uncle Bob – Robert C. Martin
    • Debate: Dois programadores são mais produtivos que um? (Pair)
    • O que é Clean Code?
    • Você teria medo de tomar o remédio?
    • Código feito com cuidado
    • Que revela suas intenções
    • Simples
    • Fácil de entender
    • “Qualquer tolo consegue escrevercódigo que um computador entenda.Bons programadores escrevem código que humanos possam entender.” (Martin Fowler)
    • Funcionar é o mínimo que se espera.
    • Qualidade Externa x Interna
    • Qualidade externa é aquela que você percebe logo de cara. Se ausabilidade da interface for ruim, aperformance for sofrível e defeitos acontecem com frequência, a pessoa logo percebe e sequer compra o software.
    • Qualidade interna é aquela que você só percebe com o tempo.Infelizmente o comercial não vende esse tipo de qualidade. Noentanto, é ela que atrasa o negócio e mata a empresa aos poucos, sufoca e aumenta oscustos. É ela que gera boa parte da rotatividade.
    • Como medir a qualidade do código?
    • Linhas de código?Número de métodos?Número de classes?Linhas de código por método?Complexidade ciclomática?Número de estruturas de decisão? ?
    • WTF?
    • WTF?WTF?
    • WTF?WTF?WTF?WTF?
    • Dificuldade para entender
    • Nível máximo de sujeira
    • Debate: Até que ponto vale apena continuar mantendo um projeto vivo?
    • Falar é fácil!
    • O desafio é criar código de qualidade!
    • No entanto, falar é o primeiro passo rumo a melhoria!
    • Quatro estágios necessários para adquirir novos hábitos
    • Estágio 1“Inconsciente e sem habilidade” Ignoramos o comportamento e o hábito
    • Estágio 2“Consciente e sem habilidade”Conhecemos o comportamentomas ainda não temos o hábito de aplicá-lo”
    • Estágio 3 “Consciente e habilidoso”Nos sentimos confortáveis com pela prática que vamos adquirindo com o tempo
    • Estágio 4“Inconsciente e habilidoso”O hábito se torna uma coisa natural
    • Escrever código limpo requer muita prática e habilidade!
    • Começando a treinar
    • Nomes estranhos
    • Limitação histórica
    • 1. READ INPUT TAPE A1, B1, C1;2. 501 FORMAT A1;3. IF (A1) 777, 777, 7774. IF (B1) 888, 888, 8885. IF (C1) 999, 999, 9996. STOP 17. 799 S = FLOATF(A1 + B1 + C1) / 2.08. WRITE TO TAPE S9. END PROCESSAs linguagens não ajudavam
    • Os ambientes não ajudavam
    • Os computadores não ajudavam
    • Recebendo a herança maldita!
    • Aprendendo com os mestres
    • 1. // Descrição da maquina2. String m_desc;3. // Resultado parcial da soma4. int s1;5. // Cor dos olhos6. String cOlhos;7. // Valor do índice temporário8. int aux;
    • Revelando a intenção
    • 1. // Descrição da maquina2. String m_desc;3. // Resultado parcial da soma4. int s1;5. // Cor dos olhos6. String cOlhos;7. // Valor do índice temporário8. int aux;
    • 1. // Descrição da maquina2. String descricaoDaMaquina;3. // Resultado parcial da soma4. int resultadoParcialSoma;5. // Cor dos olhos6. String corDosOlhos;7. // Valor do índice temporário8. int valorDoIndiceTemporario;
    • 1.2. String descricaoDaMaquina;3.4. int resultadoParcialSoma;5.6. String corDosOlhos;7.8. int valorDoIndiceTemporario;
    • 1. String descricaoDaMaquina;2. int resultadoParcialSoma;3. String corDosOlhos;4. int valorDoIndiceTemporario;
    • Não seja genérico
    • 1. // Processa folha de pagamento2. void processa();3. // Calcula o imposto de renda ret.4. void calcula();5. // Renderiza o relatório de alunos6. void renderiza();7. // Totaliza as estatísticas da ligação8. void totaliza();
    • 1. // Processa folha de pagamento2. void processaFolhaPagamento();3. // Calcula o imposto de renda ret.4. void calculaImpostoRetido();5. // Renderiza o relatório de alunos6. void renderizaRelatorioAlunos();7. // Totaliza as estatísticas da ligação8. void totalizaEstatisticasLigacao();
    • 1.2. void processaFolhaPagamento();3.4. void calculaImpostoRetido();5.6. void renderizaRelatorioAlunos();7.8. void totalizaEstatisticasLigacao();
    • 1. void processaFolhaPagamento();2. void calculaImpostoRetido();3. void renderizaRelatorioAlunos();4. void totalizaEstatisticasLigacao();
    • Simplificando estruturas de decisão
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (hora > 22:00 || hora < 06:00) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if () {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
    • 1. ...2. double calculaValorDaCorrida() {3. if (ehBandeiraDois()) {4. return distancia * 3.90;5. } else {6. return distancia * 2.10;7. }8. boolean ehBandeiraDois() {9. return hora > 22:00 || hora < 06:00;10. }11. ...
    • Magic numbers
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia *;6. } else {7. return distancia *;8. }9. }10. ...
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * PRECO_B_2;6. } else {7. return distancia * PRECO_B_1;8. }9. }10. ...
    • 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * PRECO_BANDEIRA_2;6. } else {7. return distancia * PRECO_BANDEIRA_1;8. }9. }10. ...
    • Saindo do labirinto
    • 1. double calculaValorDaCorrida() {2. if (hora > 22:00 || hora < 06:00) {3. return distancia * 3.90;4. } else {5. if (diaDaSemana eq Domingo) {6. return distancia * 2.9;7. else {8. return distancia * 2.10;9. }10. }
    • Distância da margem
    • 1. double calculaValorDaCorrida() {2. if (hora > 22:00 || hora < 06:00) {3. return distancia * 3.90;4. } else {5. if (diaDaSemana eq Domingo) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
    • 1. double calculaValorDaCorrida() {2. if () {3. return distancia * 3.90;4. } else {5. if () {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. } else {5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10.
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10.
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9.10.
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9.10.
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9. }
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia *;4. }5. if (ehHorarioDeDomingo()) {6. return distancia *;7. }8. return distancia *;9. }
    • 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * PRECO_BANDEIRA_2;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * PRECO_DE_DOMINGO;7. }8. return distancia * PRECO_BANDEIRA_1;9. }
    • Medo de estragar algo?
    • Test-Driven Development
    • Economize, teste mais cedo!
    • Ferramentas – Hudson + Sonar