voce tem orgulho do seu codigo

Post on 19-Dec-2014

1.321 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

Samuel Crescêncio e Victor Hugo Germano

Você tem orgulho do seu código?

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

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 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

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 {

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; return value; } } 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) 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 { 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;

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; return value; } } 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) 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 { 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;

} } 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) 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 { 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;

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 { 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;

{ 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;

!!!!!!!!!!!!!

Qual o nosso papel?

Qualidade?

Qualidade? Pra quem?

E nós?

http://www.flickr.com/photos/danielankers/2639889958/

Até quando?

Até quando?

Mas não é fácil!

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”

Robert Uncle Bob

Fábrica de Elásticos

Debugging sucks! Testing Rules!

Testes

TestesJUnit

TestesJUnit

dbUnit

TestesJUnit

dbUnit

SQLUnit

TestesJUnit

dbUnit

SQLUnit CppUnit

TestesJUnit

dbUnit

NUnit

SQLUnit CppUnit

TestesJUnit

dbUnit

NUnit

Fitnesse

SQLUnit CppUnit

TestesJUnit

dbUnit

NUnit

Fitnesse

Selenium

SQLUnit CppUnit

TestesJUnit

dbUnit

NUnit

Fitnesse

Selenium

SQLUnit CppUnit

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 SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

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/

A API

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/

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/

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/

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, 20);

long time = c.getTime();

http://www.slideshare.net/gvespucci/refactoring-an-introduction

long time = october(20, 2008);

http://www.slideshare.net/gvespucci/refactoring-an-introductionhttp://www.flickr.com/photos/schoeband/3861094589/sizes/l/

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/

Como medir Clean Code??

Como medir Clean Code??

cleanCode = WTF / sec

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

WTF?!

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

WTF?!

WTF?!

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

WTF?!

WTF?!

WTF?!

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/

TDD

Test all the Fucking time!

Automatização!

Ant / Gant / PythonAutomatização!

Ant / Gant / Python

Maven / Javagems

Automatização!

Ant / Gant / Python

Maven / Javagems

JUnit / Selenium

Automatização!

Ant / Gant / Python

Maven / Javagems

Cuise Control

JUnit / Selenium

Automatização!

Ant / Gant / Python

Maven / Javagems

Cuise Control

Findbugs

JUnit / Selenium

Automatização!

Doxygen

Collaboration

Call Hierarchy

Dot Representation

Documentation

http://www.stack.nl/~dimitri/doxygen

pair programming

http://www.flickr.com/photos/menlopics/3928252097/in/set-72157607305293501/

Código Coletivo

Estude! Atualize-se!

Integração Contínua

Integração Contínua

Injeção de Dependência

Integração Contínua

Injeção de Dependência

DSLs

Integração Contínua

Injeção de Dependência

DSLs

Design Patterns

Integração Contínua

Injeção de Dependência

DSLs

Design Patterns

Design by Contract

Integração Contínua

Injeção de Dependência

DSLs

Design Patterns

Design by Contract

Orientação a Ojetos

Integração Contínua

Injeção de Dependência

DSLs

Design Patterns

Design by Contract

Orientação a OjetosTDD

Integração Contínua

Injeção de Dependência

DSLs

Design Patterns

Design by Contract

Orientação a OjetosTDD

Uma linguagem nova por ano

Scrum MasterTrabalhe em Equipe!!!

Obrigado!

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

samuel.crescencio@oncast.com.br@oncast

Dúvidas?

top related