Voce Tem Orgulho Do Seu Codigo

  • 1,320 views
Uploaded 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 …

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.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • podes encontrar alguma coisa por aqui:
    https://www.assembla.com/wiki/show/gameXP
    Are you sure you want to
    Your message goes here
  • Oi Victor,

    gostei muito da sua palestra.
    Fiquei bem curioso pra ver um código seu.
    Você tem algum software open source que eu possa ver?
    Afinal vc deve estar louco pra mostrá-lo. rs

    Abraço,

    Daniel
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
1,320
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
61
Comments
2
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. http://www.flickr.com/photos/caravinagre/1364614919/ Você tem orgulho do seu código? Samuel Crescêncio e Victor Hugo Germano
  • 2. Samuel Crescêncio
  • 3. Victor Hugo Germano / victorhg
  • 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. 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. 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. } } 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. 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. 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. !!!!!!!!!!!!!
  • 11. Qual o nosso papel?
  • 12. Qualidade?
  • 13. Qualidade? Pra quem?
  • 14. E nós?
  • 15. Até quando? http://www.flickr.com/photos/danielankers/2639889958/
  • 16. Até quando?
  • 17. Mas não é fácil!
  • 18. http://www.mypix.com.br/site/pixpocketmag/super-geek-cinto-de-utilidades-ou-quase-isso/
  • 19. Por que seria diferente?
  • 20. Seu código fede?
  • 21. “Nos dias de hoje, entregar uma linha de código sem que ela seja testada é Irresponsabilidade Profissional” Robert Uncle Bob
  • 22. Fábrica de Elásticos
  • 23. Debugging sucks! Testing Rules!
  • 24. Testes
  • 25. JUnit Testes
  • 26. JUnit Testes dbUnit
  • 27. JUnit SQLUnit Testes dbUnit
  • 28. JUnit SQLUnit Testes CppUnit dbUnit
  • 29. JUnit NUnit SQLUnit Testes CppUnit dbUnit
  • 30. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit
  • 31. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit Selenium
  • 32. Fitnesse JUnit NUnit SQLUnit Testes CppUnit dbUnit Selenium JMeter
  • 33. Quão Sexy é o seu código?
  • 34. Quão Sexy é o seu código?
  • 35. O código
  • 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. 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. A API
  • 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. 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. 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. Quão Sexy é o seu código?
  • 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. long time = october(20, 2008); http://www.flickr.com/photos/schoeband/3861094589/sizes/l/ http://www.slideshare.net/gvespucci/refactoring-an-introduction
  • 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. Como medir Clean Code??
  • 47. Como medir Clean Code?? cleanCode = WTF / sec
  • 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. // 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. // 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. // 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. 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. TDD
  • 54. Test all the Fucking time!
  • 55. Automatização!
  • 56. Automatização! Ant / Gant / Python
  • 57. Automatização! Ant / Gant / Python Maven / Javagems
  • 58. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium
  • 59. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium Cuise Control
  • 60. Automatização! Ant / Gant / Python Maven / Javagems JUnit / Selenium Cuise Control Findbugs
  • 61. Doxygen Collaboration Call Hierarchy Dot Representation Documentation http://www.stack.nl/~dimitri/doxygen
  • 62. Código Coletivo pair programming http://www.flickr.com/photos/menlopics/3928252097/in/set-72157607305293501/
  • 63. Estude! Atualize-se!
  • 64. Integração Contínua
  • 65. Integração Contínua Injeção de Dependência
  • 66. Integração Contínua DSLs Injeção de Dependência
  • 67. Integração Contínua DSLs Design Patterns Injeção de Dependência
  • 68. Integração Contínua DSLs Design by Contract Design Patterns Injeção de Dependência
  • 69. Integração Contínua DSLs Design by Contract Design Patterns Orientação a Ojetos Injeção de Dependência
  • 70. Integração Contínua DSLs Design by Contract Design Patterns Orientação a Ojetos TDD Injeção de Dependência
  • 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. Trabalhe em Equipe!!! Scrum Master
  • 73. Obrigado! @victorhg http://google.com/profiles/victorhg @oncast samuel.crescencio@oncast.com.br
  • 74. Dúvidas?