Your SlideShare is downloading. ×
Voce Tem Orgulho Do Seu Codigo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Voce Tem Orgulho Do Seu Codigo

1,333
views

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 …

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,333
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
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?