http://www.flickr.com/photos/caravinagre/1364614919/




Você tem orgulho do
    seu código?

Samuel Crescêncio e Victor Hu...
Samuel Crescêncio
Victor Hugo Germano




      / victorhg
/* I realize that this program is a messy
compilation of inefficient coding, and
perhaps even stands as
something blasphem...
Public static int getTestcell()
    {
       int i, neighbor, male, female, empty, value, num;
       male = 0;
       fem...
if (spotvalue[neighbor + 20] == 1)
     male = male + 1;
  if (spotvalue[neighbor + 20] == 2)
     female = female + 1;
}
...
}
      }
      else
      {
        value = 0;
        return value;
      }
    }
    if (n == 19)
    {
       if (spot...
female = female + 1;
        }
        if (spotvalue[neighbor + 19] == 0)
           empty = empty + 1;
        else
     ...
value = 0;
      return value;
  }
}
if (n == 380)
{
   if (spotvalue[neighbor + 1] == 0)
      empty = empty + 1;
   else...
!!!!!!!!!!!!!
Qual o nosso papel?
Qualidade?
Qualidade?
Pra quem?
E nós?
Até quando?




     http://www.flickr.com/photos/danielankers/2639889958/
Até quando?
Mas não é fácil!
http://www.mypix.com.br/site/pixpocketmag/super-geek-cinto-de-utilidades-ou-quase-isso/
Por que seria diferente?
Seu código fede?
“Nos dias de hoje, entregar uma
linha de código sem que ela seja
   testada é Irresponsabilidade
           Profissional”
 ...
Fábrica de Elásticos
Debugging
 sucks!     Testing Rules!
Testes
JUnit

        Testes
JUnit

        Testes
    dbUnit
JUnit


SQLUnit Testes
     dbUnit
JUnit


SQLUnit Testes CppUnit
     dbUnit
JUnit
                 NUnit

SQLUnit Testes CppUnit
     dbUnit
Fitnesse
 JUnit
                    NUnit

SQLUnit Testes CppUnit
     dbUnit
Fitnesse
 JUnit
                    NUnit

SQLUnit Testes CppUnit
     dbUnit
               Selenium
Fitnesse
 JUnit
                       NUnit

SQLUnit Testes CppUnit
         dbUnit
                  Selenium
JMeter
Quão Sexy é o
 seu código?
Quão Sexy é o
 seu código?
O código
// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", _sm...
Session session = this.loadDefaultConfiguration();
 

Message email = this.createEmailMessage(
                           ...
A API
class Email {
   public Email() { ... }
   public void setFrom(String from) { ... }
   public void setTo(String to) { ... ...
Email email = new Email ( );
email.setFrom( “test@localhost.net”);
email.setTo (“destino@localhost.net”);
email.setSubject...
new EmailMessage( )
  .from("teste@localhost.net")
  .to("destination@address.com")
  .withSubject("Fluent Mail Example")
...
Quão Sexy é
o seu código?
O que este código faz?

java.util.Calendar c =
  java.util.Calendar.getInstance();
c.set(2005, java.util.Calendar.NOVEMBER...
long time = october(20, 2008);




http://www.flickr.com/photos/schoeband/3861094589/sizes/l/   http://www.slideshare.net/g...
What is a Clean Code?

“Quando você olha para o código, percebe que
  ele faz exatamente o que você esperava”
            ...
Como medir
Clean Code??
Como medir
   Clean Code??

cleanCode = WTF / sec
// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", _sm...
// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", _sm...
// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", _sm...
// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", _sm...
new EmailMessage( )
  .from("teste@localhost.net")
  .to("destination@address.com")
  .withSubject("Fluent Mail Example")
...
TDD
Test all the Fucking
        time!
Automatização!
Automatização!   Ant / Gant / Python
Automatização!   Ant / Gant / Python

                   Maven / Javagems
Automatização!   Ant / Gant / Python

                   Maven / Javagems

                    JUnit / Selenium
Automatização!   Ant / Gant / Python

                   Maven / Javagems

                    JUnit / Selenium

         ...
Automatização!   Ant / Gant / Python

                   Maven / Javagems

                    JUnit / Selenium

         ...
Doxygen

  Collaboration
  Call Hierarchy
  Dot Representation
  Documentation


http://www.stack.nl/~dimitri/doxygen
Código Coletivo




                                                                             pair programming




http...
Estude! Atualize-se!
Integração Contínua
Integração Contínua




Injeção de Dependência
Integração Contínua
                         DSLs




Injeção de Dependência
Integração Contínua
                         DSLs


Design Patterns




Injeção de Dependência
Integração Contínua
                         DSLs
             Design by Contract
Design Patterns




Injeção de Dependênc...
Integração Contínua
                         DSLs
             Design by Contract
Design Patterns
               Orientaçã...
Integração Contínua
                         DSLs
             Design by Contract
Design Patterns
               Orientaçã...
Integração Contínua
                         DSLs
             Design by Contract
Design Patterns
               Orientaçã...
Trabalhe em Equipe!!!
      Scrum Master
Obrigado!

        @victorhg
 http://google.com/profiles/victorhg


          @oncast
samuel.crescencio@oncast.com.br
Dúvidas?
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
Upcoming SlideShare
Loading in...5
×

Voce Tem Orgulho Do Seu Codigo

1,401

Published on

O quanto você está satisfeito com o código que produz? Mais ainda: o quanto você está satisfeito como profissional? Na busca pela melhoria de nossas aplicações, caímos num grande desafio: melhorar a nós mesmos!
Numa conversa franca e descontraída, Samuel e Victor tentarão apresentar idéias sobre como você pode melhorar seu próprio trabalho e sentir orgulho do que faz.

Published in: Technology
2 Comments
6 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,401
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
61
Comments
2
Likes
6
Embeds 0
No embeds

No notes for slide

Voce Tem Orgulho Do Seu Codigo

  1. 1. http://www.flickr.com/photos/caravinagre/1364614919/ Você tem orgulho do seu código? Samuel Crescêncio e Victor Hugo Germano
  2. 2. Samuel Crescêncio
  3. 3. Victor Hugo Germano / victorhg
  4. 4. /* I realize that this program is a messy compilation of inefficient coding, and perhaps even stands as something blasphemous in your eyes. Coming midterms forced me to write the program as is because this format required the least amount of thinking as well as the least amount of time. Therefore, I only ask one thing of you: Be gentle. */ http://www.thedailywtf.com
  5. 5. Public static int getTestcell() { int i, neighbor, male, female, empty, value, num; male = 0; female = 0; empty = 0; value = 0; num = 0; if (spotvalue[n] == 0) { neighbor = n; if (n == 0) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else {
  6. 6. if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 21] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 21] == 1) male = male + 1; if (spotvalue[neighbor + 21] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0;
  7. 7. } } else { value = 0; return value; } } if (n == 19) { if (spotvalue[neighbor - 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 1] == 1) male = male + 1; if (spotvalue[neighbor - 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2)
  8. 8. female = female + 1; } if (spotvalue[neighbor + 19] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 19] == 1) male = male + 1; if (spotvalue[neighbor + 19] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else
  9. 9. value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
  10. 10. !!!!!!!!!!!!!
  11. 11. Qual o nosso papel?
  12. 12. Qualidade?
  13. 13. Qualidade? Pra quem?
  14. 14. E nós?
  15. 15. Até quando? http://www.flickr.com/photos/danielankers/2639889958/
  16. 16. Até quando?
  17. 17. Mas não é fácil!
  18. 18. http://www.mypix.com.br/site/pixpocketmag/super-geek-cinto-de-utilidades-ou-quase-isso/
  19. 19. Por que seria diferente?
  20. 20. Seu código fede?
  21. 21. “Nos dias de hoje, entregar uma linha de código sem que ela seja testada é Irresponsabilidade Profissional” Robert Uncle Bob
  22. 22. Fábrica de Elásticos
  23. 23. Debugging sucks! Testing Rules!
  24. 24. Testes
  25. 25. JUnit Testes
  26. 26. JUnit Testes dbUnit
  27. 27. JUnit SQLUnit Testes dbUnit
  28. 28. JUnit SQLUnit Testes CppUnit dbUnit
  29. 29. JUnit NUnit SQLUnit Testes CppUnit dbUnit
  30. 30. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit
  31. 31. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit Selenium
  32. 32. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit Selenium JMeter
  33. 33. Quão Sexy é o seu código?
  34. 34. Quão Sexy é o seu código?
  35. 35. O código
  36. 36. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo)); else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  37. 37. Session session = this.loadDefaultConfiguration();   Message email = this.createEmailMessage( fromName, replyTo, subject, message );   this.sendMessage(session, email); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  38. 38. A API
  39. 39. class Email { public Email() { ... } public void setFrom(String from) { ... } public void setTo(String to) { ... } public void send() { // YOUR HOT CODE HERE } } http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  40. 40. Email email = new Email ( ); email.setFrom( “test@localhost.net”); email.setTo (“destino@localhost.net”); email.setSubject (“Teste email”); email.setMessage (“Mensagem”); email.send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  41. 41. new EmailMessage( ) .from("teste@localhost.net") .to("destination@address.com") .withSubject("Fluent Mail Example") .withBody("What a nice code!") .send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  42. 42. Quão Sexy é o seu código?
  43. 43. O que este código faz? java.util.Calendar c = java.util.Calendar.getInstance(); c.set(2005, java.util.Calendar.NOVEMBER, 20); long time = c.getTime(); http://www.slideshare.net/gvespucci/refactoring-an-introduction
  44. 44. long time = october(20, 2008); http://www.flickr.com/photos/schoeband/3861094589/sizes/l/ http://www.slideshare.net/gvespucci/refactoring-an-introduction
  45. 45. What is a Clean Code? “Quando você olha para o código, percebe que ele faz exatamente o que você esperava” Howard Cunningham http://railsconf.blip.tv/file/2089545/
  46. 46. Como medir Clean Code??
  47. 47. Como medir Clean Code?? cleanCode = WTF / sec
  48. 48. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo)); else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  49. 49. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); WTF?! Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo)); else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  50. 50. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); WTF?! Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, else _fromName + " on behalf of " + replyTo)); WTF?! newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  51. 51. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); WTF?! Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, else _fromName + " on behalf of " + replyTo)); WTF?! newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage WTF?! Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  52. 52. new EmailMessage( ) .from("teste@localhost.net") .to("destination@address.com") .withSubject("Fluent Mail Example") .withBody("What a nice code!") .send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  53. 53. TDD
  54. 54. Test all the Fucking time!
  55. 55. Automatização!
  56. 56. Automatização! Ant / Gant / Python
  57. 57. Automatização! Ant / Gant / Python Maven / Javagems
  58. 58. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium
  59. 59. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium Cuise Control
  60. 60. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium Cuise Control Findbugs
  61. 61. Doxygen Collaboration Call Hierarchy Dot Representation Documentation http://www.stack.nl/~dimitri/doxygen
  62. 62. Código Coletivo pair programming http://www.flickr.com/photos/menlopics/3928252097/in/set-72157607305293501/
  63. 63. Estude! Atualize-se!
  64. 64. Integração Contínua
  65. 65. Integração Contínua Injeção de Dependência
  66. 66. Integração Contínua DSLs Injeção de Dependência
  67. 67. Integração Contínua DSLs Design Patterns Injeção de Dependência
  68. 68. Integração Contínua DSLs Design by Contract Design Patterns Injeção de Dependência
  69. 69. Integração Contínua DSLs Design by Contract Design Patterns Orientação a Ojetos Injeção de Dependência
  70. 70. Integração Contínua DSLs Design by Contract Design Patterns Orientação a Ojetos TDD Injeção de Dependência
  71. 71. Integração Contínua DSLs Design by Contract Design Patterns Orientação a Ojetos TDD Uma linguagem nova por ano Injeção de Dependência
  72. 72. Trabalhe em Equipe!!! Scrum Master
  73. 73. Obrigado! @victorhg http://google.com/profiles/victorhg @oncast samuel.crescencio@oncast.com.br
  74. 74. Dúvidas?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×