Publicado por: andrefaria em: 14 Junho 2009
No ano passado eu tive a excelente oportunidade de participar do JavaOne 2008, foi uma experiência muito enriquecedora e apesar de este ano não poder estar lá presente, eu não poderia deixar de fazer um levantamento dos principais acontecimentos e novidades apresentadas no evento para ficar por dentro de tudo, e claro, deixar vocês, queridos leitores, em dia também.
Java = Inovação por JavaBahia
O Slogan do evento no passado foi Java +You ou Java + Você, neste ano houveram três: Java = Everywhere ou Java = Em toda a parte, Java + Community = Powerful ou Java + Comunidade = Poder e Java = Innovation ou Java = Inovação. Um outro acontecimento especial deste ano é o aniversário de 14 anos do Java, o vídeo abaixo, que foi exibido na abertura do evento, apresenta rapidamente alguns pontos fortes da evolução que a tecnologia sofreu ao longos dos anos:
O presidente da Oracle Corporation, Larry Elisson afirmou que a Oracle sempre investiu na plataforma Java e que agora investirá mais do que nunca. Veja alguns momentos no KeyNote no vídeo abaixo:
James Gosling apresentou a Java Store, um site que catalogará aplicações Java que poderão ser instaladas facilmente em seu computador, algumas delas simplesmente através de drag-and-drop no desktop (arrastar e soltar).
No segundo dia, houve uma General Session chamada Your Lifestyle: Mobile, TV and Beyond em foi demonstrado o uso de Java nos mais diversos dispositivos como celulares, televisores, Blu-ray, etc e destacou-se como o JavaFX poderá ampliar ainda mais este mercado em expansão.
Esse divertido vídeo foi apresentado em uma General Session e conta a história do Java.
Falou-se bastante sobre as novas tecnologias Java SE 7 SDK, Java EE 6 e Jaxa FX 1.2, mas principalmente sobre Java FX, essa tecnologia recebeu grandes investimento da Sun e promete transformar a forma com que se desenvolve aplicações de alta qualidade de ambiente gráfico com Java. Os dois vídeos abaixo publicados por Augusto Sellhorn do Blog Sellmic.com exibem parte de uma demonstração de JavaFx em que é possível ver ferramentas de animação JavaFX muito semelhante com que se conhece com Adobe Flash e Microsoft Silverlight.
O pessoal do JavaPosse entrevistou Octavian Tanase e Jacob Lehrbaum sobre o JavaFX, vale a pena conferir (em inglês).
Mais uma vez o Brasil foi muito bem representado por congressistase palestrantes que marcaram o evento. Magno Cavalcante e Clayton Chages apresentaram a Technnical Session: “Java™ in the Brazilian Digital TV: Interactivity and Digital Inclusion on TV“. Ainda sobre TV Digital, David Campelo apresentou a “TS-4453: New Java Digital TV Standard Goes Brazil“. A Dupla Marlon Luz e Bruno Oliveira, também deixaram suas contribuições brasileiras com a palestra Java ME Myth Busters, confira a entrevista (em português) realizada pelo Sérgio do JavaBahia.
O brasileiro Felipe Gaucho que atualmente trabalha na Suiça esteve no evento e postou em seu blog suas impressões. O Baiano, Serge Rehem doJavaBahia também participou do evento registrou sua impressões.
Mark Reinhold, Chief Engineer do Java SE, disse isso durante a demonstração da forma com que o Java 7 gerenciará módulos. Vale a pena dar uma olhada no projeto Jigsaw que tem como objetivo resolver de forma eficiente as questões da modularização no JDK, esse projeto está sendo construindo segundo a JSR 294: Improve Modularity Support in the Java Programming Language. Segundo Raja Islam o benefício principal que será alcançado com a modularização será a redução do tempo de carga e deploy de aplicações Java.
Microsoft no JavaOne
Pode parecer estranho, mas a Microsoft apresentou a General Session do terceiro dia do JavaOne. No momento em acontecem as General Sessions não há nenhuma outra apresentação ocorrendo simultaneamente e todos os congressistas presentes participam, ou seja, são apresentações de grande importância e alcançam a maior parte do publico do evento.
Dan’l Lewin, Vice Presidente Corporativo da Microsoft, falou sobre esforço que vem sendo realizado a cinco anos desde o inicio da parceria entre a Microsoft e Sun para promover a interoperabilidade entre aplicações Java e .NET, segundo Lewin em uma entrevista realizada pela Microsoft no ano passado com mais de 5 milhões de pessoas, constatou-se que 73% dos entrevistados trabalhando em ambientes mistos (Java + .NET). Para maiores informações visite www.interoperabilitybridges.com.
Ola Bini da ThoughtWorks, famoso por participar ativamente na comunidade open source e por desenvolver a linguagem de programação Ioke, também participou do evento e destacou o projeto Da Vinci, segundo ele, essa tecnologia contribuirá para que a Java Virtual Machine se torne melhor. Ola Bini também apresentou sua BOF 4434: Hacking JRuby.
BOF significa (Birds-of-a-Feather), as BOFs são palestras informais, interativas e flexíveis. No JavaOne, geralmente acontecem no final do dia com assuntos complementares aos discutidos nas technical sessions (TSs) ou palestras técnicas que acontecem durante o dia.
Charles Nutter também esteve lá falando sobre o projeto JRuby que … No vídeo abaixo, Nutter falou um pouco a tecnologia:
Rich Hickey falou sobre sua linguagem: Clojure, que também roda sobre a JVM. Para saber mais confira os slides de sua “TS-4164 Clojure: Dynamic Functional Programming for the JVM Machine“.
Neal Ford fez uma comparação entre as linguagens Ruby e Groovy em sua “TS-4955: Comparing Groovy and JRuby“.
Falou bastante sobre JRuby, Jython, Scala e Groovy. Nesta entrevista para o JavaOne, Guillaume Laforge da SpringSource comenta um pouco sobre isso:
Destacou-se também o lançamento da versão 1.6 da linguagem Groovy, confira a “TS-4215: What’s New in Groovy 1.6?” por Laforge.
Bill Venners, da Artima Inc., apresentou um pouco da linguagem Scala em sua “TS-4487: The Feel of Scala“.
Roberto Chinnici falou sobre programação funcional e orientada a objetos com JavaScript, seus slides podem ser visto neste link.
De acordo com Jim White, o Java 7 está previsto para ser lançado em Fevereiro de 2010. Jim participou de algumas palestras que tinham como tema principal a evolução do Java, e disse que muitas das decisões para o Java 7 ainda não foram tomadas, o que indica que ainda há bastante trabalho pela frente. Enquanto ao Java 6, White, diz que será lançado mais cedo, em Setembro de 2009.
Joseph Darcy da Sun Microsystems, na “Ts-4060: Small Language Changes in JDK Release 7” apresentou algumas das mudanças que serão feitas na linguagem Java. Darcy chamou a atenção da comunidade para que torne-se parte da evolução e que participando e contribuindo, através do projeto Coin que tem essa finalidade.
A especificação vem evoluindo através da JSR 315 e entre as principais novidades está a possibilidade de configurações toda a aplicação através de annotations ao invés de utilizar o arquivo web.xml e maior utilização do principio CoC (Convetion over Configuration) que visa diminuir a quantidade de configuração. Existem annotations para registrar Servlets, Filters, Listeners, e até mesmo para declarar regras de segurança e permissões de acesso.
Um outra recurso que ganhou bastante repercussão foram os novos Servlet Assíncronos, para maiores informações confira a “TS-3790: Java Servlet 3.0:Empowering Your Web Application With Async, Extensibility and More” apresentada por Rajiv Mordani, Greg Wikins e Jan Juehe.
Validação através de metadados nos JavaBeans como no Hibernate Validator. Confira a “TS-5184: Bean Validation: Declare Once, Validate Anywhere – A Reality?” apresentada por Emmanuel Bernard da JBoss sobre o assunto.
Ed Burns e Roger Kitain, ambos da Sun Microsystems, apresentaram a “TS-4640: A Complete Tour of the JavaServer Faces 2.0 Plataform” onde falaram sobre as principais novidades do JSF 2.0. Nesta nova versão do JSF teremos melhor suporte a Ajax, componentes compostos que possibilitará melhor reuso de código e melhor suporte a eventos. E para completar ainda mais a discussão sobre JSF no JavaOne, Kitto Mann da Virtua, na “TS-5205: Writing Killer JavaServer Faces 2.0 UI Components” apresenta diversos conceitos importantes se criar inovadores e eficientes componentes JSF 2.0 e David Allen da RedHat falou sobre fluxo de páginas (page flow) e conversação (converstation) com JSF na “TS-5045: Converstations and Page Flows on the JavaServer Faces Plataform“.
A evolução dos Enterprise Java Beans continua, na versão 3.0 pode-se notar grande avanço e uma simplicidade muito grande ao se comparar com versões anterior, nessa nova versão a meta de aumentar a simplicidade se manteve, por isso, a forma de empacotamento dos aplicativos foi simplificada e criou-se o EJB Lite API, que é um conjunto reduzido das funcionalidades disponíveis na especificação completa do EJB.
Além da simplicidade, novas funcionalidades foram incluídas como por exemplo, objetos Singleton, Callbacks de Startup e Shutdown, Timers baseado em Calendars, Session Beans assincronos e integração com JAX-RS. Para maiores informações confira a “TS-4605: Enterprise JavaBeans 3.1 Technology Overview” apresentada por Kenneth Saks, Senior Staff Engineer da Sun Microsystems.
Linda DeMichiel da Sun Microsystems, na “TS-5214: Java Persistence 2.0: What’s New?” apresentou as principais novidades da JPA que evolui através da JSR 317:
A Implementação de Referência ou Reference Implementation (RI) da especificação é o projeto EclipseLink que tem como base o antigo projeto da TopLink da Oracle. Andrei Badea da Sun e Dogule Clarke da Oracle apresentaram na “TS-5018: Developing Java Persistence API Applications with the NetBeans IDE and Eclipse Link” de forma um pouco mais prática como utilizar a nova API. Mike Keith da Oracle fez uma apresentação completa sobre os conceitos de mapeamento da JPA na “TS-5265: A Java Persistence API Mapping Magical Mystery Tour“.
Gavin King da RedHat apresentou na “TS-6726: Context and Dependency Injection for Java Plataform, Enterprise Edition (Java EE Plataform)” uma introdução o que a especificação JSR-299 trará de novo ao Java EE. Segundo King teremos um novo e rico modelo de gerenciamento de depedências com suporte a objetos statefull, integração da camada web com a camada transacional, será muito fácil construir aplicações utilizando EJB e JSF juntos, e frameworks terceiros poderão facilmente integrar-se a API.
Rod Johnson da Spring Source apresentou as novidades do Spring 3.0 na “TS-5225: Spring Framework 3.0: New and Notable“. Segundo Johnson, o trabalho em tornar o desenvolvimento de aplicações Java para Web mais simples e poderoso continua, por isso, os arquivos XML serão ainda mais curtos, havendo necessidade de utilizá-los somente quando for preciso externalizar algum recurso.
A nova versão traz suporte a REST, melhorias no MVC e expression language. O Spring 3.0 será compatível somente com Java 5+.
O Spring Roo é o mais novo projeto da Spring Source, e segundo Jim White, é uma espécie de Rails, também com muita meta-programação, que tem como base apenas Java e Spring. Rod Johnson disse que a missão do Roo é melhorar dramaticamente a produtividade de desenvolvedor Java sem comprometer a poder e flexibilidade através de geradores de código que proporcionarão a entrega rápida de aplicativos corporativos robustos e de alta performance.
E por falar em Spring, o Google Guice, também vem ganhando bastante espaço no mercado como framework de injeção de dependência, e os Googlers Bob Lee e Jesse Wilson, falaram sobre ele na “TS-5434 Introduction to Google Guice: The Java Programming Language Is Fun Again!“, confira.
Depois do Calisto, Europa e Ganymede, vem aí o Eclipse Galileo. O lançamento está previsto para 24 de Junho. O release incluirá 48 projetos, o destaca bastante crescimento, ao se comparar como o Ganymede que contemplava apenas 24 projetos. Em 26 de Junho, a Eclipse Foundation fará uma apresentação chamada Galileo in Action onde serão apresentadas as principais funcionalidades do novo realease.
Google App Engine
Como comentei no artigo anterior, o Google App Engine agora possui suporte a Java, e claro, isso não poderia deixar de ser assunto de destaque no JavaOne, por isso, os Googlers, Toby Reyelts, Max Ross, e Don Schwarz, apresentaram a “TS-3817: Google App Engine: Java Technology in the Cloud“.
Joshua Bloch do Google, que teve intensa participação do desenvolvimento da linguagem Java, desde o JavaOne 2007 vem de falando sobre boas práticas de programação, e destacando tópicos de seu livro Effective Java, em sua “TS-5217: Effective Java: Still Effective After All These Years” manteve o mesmo padrão dos anos passados.
No último dia do evento, James Gosling apresentou o Toy Show, onde foi apresentado diversas situações onde pessoas e empresas por todo o mundo utilizaram Java de forma inovadora, e também foram distribuídos os prêmios dos ganhadores do Duke’s Choice Award.
Slides e Vídeos
Os slides e vídeos das apresentações estão sendo paulatinamente disponibilizados no site da Sun Developer Network (SDN), não perca a oportunidade de baixar alguns slides para estudar, garanto que tem material de ótima qualidade publicado lá.
Alguns vídeos do CommunityOne também podem ser baixados aqui.
O JavaOne 2009 não trouxe tantas pessoas como anos anteriores, este ano apenas 9.000 pessoas se reunião enquanto em edições anteriores do evento mais de 25.000 estiveram presentes, é claro que existem diversos fatores para que isso tenha acontecido como a crise econômica e a gripe suína, por exemplo, mas de toda forma há uma grande diferentes que nos leva a reflexão. Neste ano o evento nos trouxe diversas tecnologias, frameworks, projetos e iniciativas que prometem manter a plataforma em constante evolução. Fiquemos Ligados!
Publicado por: andrefaria em: 1 Junho 2009
Aconteceu no Moscone Center em São Francisco nos dias 27 e 28 de maio de 2009 o evento do Google para desenvolvedores, o Google I/O. Apesar de não ter participado do evento assisti a diversos vídeos publicados no canal Google Developers do YouTube e gostaria de compartilhar com vocês alguns dos tópicos que achei mais interessantes e links para que possam buscar maior aprofundamento.
No Keynote do primeiro dia, Vic Gundontra ,vice presidente de engenharia do Google, liderou a apresentação com a ajuda de grandes personalidades do desenvolvimento de software. O principal assunto foi a “Web como plataforma de desenvolvimento de software” e de forma especial, como o HTML 5 poderá contribuir para o futuro da internet. Gundontra lembrou da tecnologia AJAX que infelizmente só foi explorada de maneira significativa muitos anos depois de sua concepção, “não queremos que o mesmo aconteça com o HTML 5“.
Cinco das principais funcionalidade do HTML 5 foram destadas:
Outro ponto bastante destacado foi o árduo trabalho que vem sendo realizado por todos os fornecedores de browser para melhorar o desempenho de programas JavaScript, segundo o vice-presidente da Mozilla, c, o Firefox 3.5 será 3 vezes mais veloz do que o que Firefox 3 e 10 vezes mais veloz que 2.0.
Um serviço muito interessante foi apresentado por DeWitt Clinton, Tech Lead, no Google: o Google WebElements, uma série de elementos como mapas, buscadores, agendas, chats, planílhas e apresentações que podem ser incorpadas ao seu site através de poucos cliques.
Além dos tópicos citados, falou-se ainda do suporte a Java no Google App Engine, um pouco de Google Web Toolkit, e claro, do Google Android.
Para maiores informações sobre esses novos recursos do HTML 5, assitam o Key Note do primeiro dia.
No Keynote do segundo dia, como você provavelmente já ouviu falar o Google apresentou sua nova plataforma de comunicação online, o Google Wave. O Google Wave agrega diversos serviços da web como e-mail, comunicação instantânea, wikis e redes sociais e promete grandes possiblidades de integração e mecanismos para que desenvolvedores possam extender suas funcionalidades. Não entrarei em maiores detalhes, porque seria chover no molhado, mas se você quiser mais informações, assita ao vídeo abaixo.
Publicado por: andrefaria em: 17 Maio 2009
É com grande satisfação que anuncio a publicação do artigo “Desenvolvendo com Agilidade” na revista Java Magazine Edição 68. Esta foi a primeira vez que escrevi um artigo para ser publicado em uma revista, e sem dúvida foi uma grande oportunidade que me trouxe excelentes experiências e maturidade. No artigo, procurei apresentar uma visão geral sobre o desenvolvimento ágil de software, sua origem, principais metodologias e práticas.
Espero que através de artigo mais pessoas entrem em contato com o desenvolvimento ágil e que tenham assim uma melhor experiência profissional. Escrevi sobre esse tema porque realmente acredito nele, e sei que pode trazer grandes benefícios ao dia-a-dia de muitas pessoas.
Críticas, sugestões e feedback serão sempre bem vindos.
Já nas bancas!
Publicado por: andrefaria em: 2 Maio 2009
Como anunciado anteriormente, neste último final de semana participamos do Porto Alegre Agile Weekend, foi a primeira fez que pisei em solo gaúcho. O evento foi realizado na PUC-RS, a universidade possui, sem dúvida, uma excelente estrutura.

Auditório Principal
Ao chegar, pegamos o final da palestra “Anti-Práticas Ágeis” do Peleteiro da Globo.com. Peleteiro ressaltou a importância da prática e da vivência das metodologias ágeis, e alertou sobre a cilada de pensar que “Agile By the Book” funciona, mencionou a consagrada estória do taxista que foi publicada há algum tempo atrás no blog do Alexandre Magno para ilustrar a importância de se ter o cliente presente, e respondeu a diversas perguntas sobre Scrum na Globo.com.
Depois do delicioso coffe break voltei ao auditório e assisti a palestra do Bruno Lichot: “Como o Scrum mudou a forma da Borland de Entregar Software“. Lichot apresentou um pouco da história dos métodos ágeis na Borland e falou sobre sua conversão pessoal aos métodos ágeis. “Scrum fez a ponte entre o gerenciamento e a execução“, disse, e completou “Mantemos o foco em agregar valor a empresa com projetos mais curtos e um relacionamento mais estreito com o cliente“.
A Borland foi eleita pela a Scrum Allience um dos maiores casos de sucesso de Scrum. Lichot apresentou um pouco do perfil das equipes da Borland: 70% dos projetos da empresa utilizam métodos ágeis, o tamanho dos sprints varia de acordo com o perfil de cada equipe e as necessidades de cada projeto, o perfil de cada profissional é respeitado, o plano de testes é gerado no levantamento de requisitos, procura-se remover obstáculos ao invés de encontrar culpados, utiliza-se kanban digital para equipes distribuídas.
Lichot deixou ainda algumas dicas: “Mudança sempre gera conflito“, afirmou, e ao alertar sobre os céticos, aqueles que apresentaram resistência as mudanças, Lichot aconselhou: “ganhe dos céticos, apresente resultados, afinal contra fatos não há argumentos, mostre software pronto e que funciona.“
Alguns dos benefícios alcançados pela Borland com a adoção de Scrum:

P-47 Thunderbolt, Força Aérea Brasileira / Brazilian Air Force por Luigi Brasile
O segundo dia foi aberto com chave de ouro pelo famoso trio da Sea Tecnologia (Alexandre Gomes, Bruno Pedroso e Renato Willi), eles apresentaram o case do projeto ágil que desenvolveram na Força Aérea Brasileira. Esse, sem dúvida, é um dos cases mais interessantes que já conheci, principalmente por causas dos desafios culturais que precisaram ser enfrentados por ambas as partes: cliente e equipe de desenvolvimento.
O pessoal da Sea também apresentou algumas lições aprendidas: quebrar tarefas complexas em tarefas menores e mais simples faz com o que o projeto evolua mais rápido e com que todos acompanhem a evolução com maior transparência; retirar baias, ou qualquer barreira física melhora a comunicação entre a equipe; o tempo proporciona mais segurança para estimar e dá a equipe maior capacidade de analisar impactos; a cultura do cliente, seus valores e princípios devem ser respeitados.
Um diferencial muito interessante que nos foi apresentado, foram os mantras utilizados pela equipe da Sea, esses mantras são afirmações ou frases que representam ações que devem ser tomadas para que algo seja melhorado no processo. Os mantras podem ficar escritos em algum local que seja de fácil visão para os membros da equipe, para que assim todos possam lembrar da ação que deve ser tomada. Alguns exemplos de mantras seriam: “Eu vou escrever testes unitários”, “Eu vou rodar os testes ander de dar commit”, etc..
Confira os slides da apresentação no SlideShare.

Luiz Faias Jr.
Esse foi o tema da palestra do meu amigo e colega de trabalho Luiz Faias Junior. Nesta primeira participação da Bluesoft em um evento de métodos ágeis, Faias apresentou o processo da Bluesoft e diversas dicas para a construção de uma equipe e de um ambiente ágil: comentou sobre a criação do quadro magnético de scrum; testes unitários para propiciar a equipe de desenvolvimento mais segurança para realizar alterações no software e agregar qualidade ao produto; integração contínua para que seja tomada alguma providência rápida se um teste for quebrado.

CML - Caipira Modeling Language
A audiência pareceu ter gostado bastante da “Caipira Modeling Language“, uma mistura de UML, Desenhos de Telas, Fluxogramas, e tudo o que você puder imaginar que faça sentido em um desenho de modelagem.
Um outro tópico interessante foram as Technical Sessions ou Reuniões Técnicas. São reuniões de 1 hora que acontecem todas as quartas-ferias na Bluesoft durante o horário de trabalho. Nessas reuniões qualquer membro da equipe pode escolher um determinado tema que tenha relação com alguma tecnologia utilizada no projeto ou alguma tecnologia que possa melhorar a dia-a-dia da equipe. Faias, citou o exemplo do JQuery, um framework JavaScript que começou a ser utilizado depois de apresentado em uma technical session e trouxe muita produtividade ao trabalho da equipe. O mesmo aconteceu com Git e com o Spring Framework. As technical sessions oferecem a todos a oportunidade de ensinar e aprender.
Fique ligado, em breve mais detalhes sobre a apresentação serão publicados no blog da Bluesoft.
Sem sombra de dúvidas o evento foi um verdadeiro sucesso! As palestras foram excelentes e as dicussões muito enriquecedoras, gostaria de parabenizar a toda a equipe do Porto Alegre Agile Weekend pelo ótimo trabalho realizado, e de forma especial agradeço também ao Daniel Wildt por nos ter convidado a participar do evento.
Confira também as impressões de Maurício Aniche e Victor Hugo Germano.
Publicado por: andrefaria em: 20 Dezembro 2008
Já faz algum tempo que a programação em par se tornou uma realidade do meu dia-a-dia, confesso que nos meus primeiros contatos com Extreme Programming (XP) essa era a prática que eu menos gostava, mas depois, ao me envolver mais com práticas ágeis comecei a perceber seus benefícios e inclusive passei a propagar a idéia, porém agora, senti um mais de perto como realmente funciona e gostaria de compartilhar um pouco do que venho aprendendo.
A programação em par é uma técnica que sugere que todo e qualquer código produzido em um projeto de desenolvimento de software seja implementado por duas pessoas juntas, diante do mesmo computador, revezando-se no teclado [1]. A Pessoa quem está com teclado em mãos é chamada de condutor e a outra de navegador.
“Unir-se é um bom começo, manter a união é um progresso, e trabalhar em conjunto é a vitória.”
(Henry Ford)
Temos o mundo inteiro de informação e recursos ao alcance de alguns cliques. A internet, o correio eletrônico, o feed reader, somos tentados o tempo todo a nos distrair, e perder o foco do nosso objetivo principal: escrever código. A programação em par nos ajuda a manter o foco, afinal de contas, temos alguém sentado ao lado interessando em ver o problema resolvido, assim, com certeza, mesmo que tentados iremos evitar fazer outra coisa senão concentrar nossas energias em resolver o problema em questão. Isso não quer dizer que seja proibido consultar algo na internet, ou ler e-mails, na Bluesoft, por exemplo, sempre temos algumas máquinas disponíveis para esse tipo de coisa, porém, garanto que a freqüência desse tipo de atividade é bem menor quando se trabalha em par, e não são somente as distrações que são reduzidas, segundo Laurie Williams [3], as pessoas são menos interrompidas por outras quando trabalhando em par do que quando trabalhando sozinhas.
“Aprender é a única coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende.“
(Leonardo da Vinci)
Todos nós somos diferentes, pensamos de forma diferente e sabemos coisas diferentes, programando em par essas diferenças podem se complementar de forma positiva trazendo mais qualidade ao trabalho e muito aprendizado a ambos os envolvidos, não somente conhecimentos técnicos, mas também muito conhecimento sobre o domínio de negócio são trocados todo o tempo.
“uhmmm…, esse problema é só com fulano mesmo, ele quem desenvolveu e sempre deu manutenção nisso, nem adianta tentar porque ninguém mais vai conseguir resolver isso “.
Quem nunca ouviu algo assim? Eu já, e muitas vezes. É comum, especialmente em contextos em que não são aplicadas metodologias ágeis, existirem ilhas de conhecimento, essas ilhas são representam o conhecimento retido por pessoas que não o com outras, muitas vezes por falta de oportunidade, outras por pensar que dessa forma se tornaram insubistituiveis, bobagem.
Ilhas de conhecimento podem se tornar um grande problema, porque a manutenção do software fica extremamente dependente da pessoa que retêm o conhecimento, e essa pessoa pode a qualquer momento sair da empresa, ficar de férias, estar viajando, etc… Mas e quando ocorrer um problema crítico e a pessoa não estiver presente? O grande problema é que tudo fica dependendo da ilha.
A programação em par estimula a troca de conhecimento, faz com que todo a equipe compartilhe o código e saiba um pouco de tudo o que foi desenvolvido, tornando assim, a toda a equipe capacitada a resolver qualquer problema a qualquer momento, se um membro da equipe estiver ausente, provavelmente não haverá poblemas por isso.
A programação em par aumenta a qualidade do software sem impactar de forma significativa no prazo [2]. Apesar de ser contra senso que duas pessoas trabalhando em um único computador podem produzir mais valor do que trabalhando separadamente, sem dúvida é fácil de acreditar que irão entregar um trabalho de muito mais qualidade, e essa qualidade adicional, por si só, trará grandes ganhos mais tarde.
Laurie Williams da universidade de Utah em Salt Lake City comprovou que a programação é em média apenas 15% mais lenta do que a programação individual, porém, produz 15% menos bugs [5]. Considerando que testar e debugar é na maioria da vezes muito mais custoso do que a programação inicial, esse é um resultado no mínimo significativo.
Segundo Vinícus Teles, “a pessoa que está conduzindo o teclado (condutor) tem um campo de observação diferente do seu parceiro. Quem digita normalmente está olhando sobretudo para a linha que está editando e adjacências. O navegador, por sua vez, tem uma visão mais ampla e olha não apenas a linha que está sendo editada, mas também o restante do código que aparece na tela. Ao fazer isso, ele acaba tendo uma visão complementar que freqüentemente revela problemas que o condutor não percebe com a mesma rapidez” [1], dessa forma, o código está sendo revisado o todo o tempo, sem contar que programar em par evita que caiamos na tentação de não escrever testes unitários ou deixar refactorings de lado [4].
Ping-pong Programming [12] é um técnica que une programação em par e test driven development tornando o a programação em par mais divertida [13], dinâmica e interativa, consiste nos seguintes passos:
Pare! Tome um café. Coma alguma coisa. Converse com outras pessoas além do seu par [7]. Tudo isso será bom para que descanse um pouco, se distraia e se prepare para voltar mais disposto e dar continuidade na tarefa.
Estabeleça um time-box para discussões. É comum que dois programadores discordem ao tentar decidir as melhores formas de implementar algo, quando isso acontecer, procure ouvir as razões da outra pessoa e apresentar suas argumentações, tentem chegar a um meio termo, se isso não for possível chame uma terceira pessoa para dar uma opnião. Não resista em ceder quando perceber que outro pode estar certo, lembre-se você está aprendendo e ensinando o tempo todo, não há problema algum em estar errado de vez em quando.
Martin Fowler uma das personalidades mais respeitadas no mundo do desenvolvimento de software escreveu um artigo em 2006 levantando alguns dos principais enganos sobre programação em par. Fowler esclarece em seu artigo que “não é necessário programar em par para estar praticando um processo ágil” [11], nem mesmo para se pode dizer que para aplicar Extreme Programming você é obrigado a programar em par, o máximo que se pode dizer é que alguém aprender XP, deve tentar programar em par e ver se funciona em seu caso em particular [11]. A programação em par não é nem mesmo citada no manifesto ágil, porém, é uma prática altamente recomendada para que se alcance os principios ágeis.
Um outro engano muito comum é pensar que a produtividade dos desenvolvedores cairá pela metade, como discutimos anteriormente, na maioria dos casos essa afirmação será falsa.
Segundo Fowler, muitas pessoas surpreendem-se e começam a gostar de programar em par depois de tentar, por isso, experimente antes de dizer de não gosta!
Concluo com a citação de Mary e Tom Poppendieck no livro “Implementing Lean Software Development”:
Programação em Par não é para todos, nem para todas as situações, porém, a programação em par cria sinergia: Duas pessoas vão frequentement entregar um código mais integrado, testado e sem defeitos, trabalhando juntas [...]. A Programação em par é uma das melhores formas de se atigir os beneficíos de revisões de código [...] .
[1] Improvit – Programação em Par
[2] Extreme Programming Rules – Pair Programming
[3] Williams, Laurie (2003). Pair Programming Illuminated, Addison-Wesley
[4] Beck, Kent (2000). Extreme Programming Explained, Addison-Wesley
[5] Cunningham & Cunningham – PairProgramming
[6] Mark Needham – Pair Programming: What works for me
[7] Brian Guthrie – The Way I Pair
[8] thekua.com@work – How I like to pair
[9] InfoQ – Pair Programming Debate
[10] InfoQ – Common misconceptions about paired programming
[11] Martin Fowler – Pair Programming Misconceptions
[12] Pair Programming Ping Pong Pattern
[13] Ping Pong Pairing: Even More Fun!
[14] Poppendieck, Tom and Mary (2007). Implementing Lean Software Development, Addison-Wesley