Author Archive

Conversa Rápida Janeiro

Wednesday, January 4th, 2012

No dia 23 de Janeiro, às 20:00, teremos a primeira edição de 2012 do Conversa Rápida aqui na AdaptWorks.

O Conversa Rápida é um evento que tem como objetivo tirar as pessoas da zona de conforto. É um conjunto de 10 palestras de 5 minutos, seguidas por 5 minutos de perguntas. E os temas das palestras só são conhecidos no momento das palestras. Se quiser saber como foram as edições anteriores, dê uma olhada em nosso canal no youtube.

Nessa edição, os palestrantes confirmados até o momento são:

Se tiver interesse em assistir às palestras, envie um email para jabreu@adaptworks.com.br para confirmar sua presença, pois temos poucos lugares.

Cooperação entre times

Monday, September 19th, 2011

Recentemente tive uma conversa com o @cmilfont e o @lucascs via twitter (se é que é possível chamar isso de conversa…)

A conversa girou em torno de uma pergunta feita pelo Milfont:

Pq voce faz um pull request para um projeto open source e não admite fazer nada de graça para seu emrpegador?

Minha idéia inicial girou em torno de que são duas relações diferentes.

O mundo OpenSource inicialmente te dá tudo que ele tem e diz que se algum dia você tiver vontade, você pode contribuir de volta. Isso sem contar aquela sensação de estar trabalhando para um bem maior, etc.

Já o seu empregador, em geral apenas te dá algo se você der algo pra ele primeiro. Você só recebe o salário se trabalhar.

Eu achei que essa diferença de relação já era suficiente para desmotivar o profissional a colaborar com outros projetos da empresa.

Alguns dias depois, eu assiti à palestra do Magno sobre Metas Compartilhadas e isso me deu um estalo.

Será que o problema não é que os profissionais de nossas empresas se focam apenas nas metas do projeto, e não da empresa? Como podemos criar metas entre os projetos para incentivar a colaboração dentro da empresa inteira ao invéz de apenas no projeto? Será que é util para a empresa?

O que vocês acham?

Conversa Rápida @ AgileBrazil

Monday, July 18th, 2011

Durante o AgileBrazil desse ano, gravamos algumas palestras no modelo do Conversa Rápida.

Seguem os links :)

Se gostar dessas, ainda temos vagas para assistir ao Conversa Rápida do dia 1 de agosto, que já conta com ótimos palestrantes.

E se quiser saber de mais novidades sobre o Conversa Rápida, pode nos seguir no twitter

Conversa Rápida Agosto

Monday, July 11th, 2011

No dia 1 de agosto, às 19:30 teremos mais uma edição do Conversa Rápida aqui na AdaptWorks (http://bit.ly/qZGBue).

Se não sabe o que é o Conversa Rápida, clique aqui :)

Até o momento, os seguintes palestrantes confirmaram:

E estamos esperando a confirmação de outros (você pode seguir o twitter do Conversa Rápida para ser avisado).

Se tiver interesse em assistir às palestras, envie um email para conversarapida@adaptworks.com.br para confirmar. Mas não deixe para a última hora, pois temos poucos lugares.

Conversa Rápida Junho – Retrospectiva e Palestras

Wednesday, June 15th, 2011

A segunda edição do Conversa Rápida foi realizada ontem, dia 13.

Novamente foi bastante divertido. A sala de treinamentos ficou praticamente cheia dessa vez.

No total, foram 10 palestras (uma mudança que fizemos após a edição anterior). Melhoramos em alguns pontos e tivemos alguns problemas novos. A retrospectiva foi feita usando um modelo um pouco diferente e, como tínhamos algumas pessoas bem críticas, conseguimos colher um ótimo feedback e já temos diversas ações para melhorar o evento para a próxima edição (Julho ou Agosto, aguardem).

As palestras desta edição foram as seguintes:

1 ano de Coding Dojos na AdaptWorks

Wednesday, May 25th, 2011

No começo desse mês, completamos 1 ano de Coding Dojos aqui na AdaptWorks (o primeiro foi em 04/05/2010).

Nesse período, realizamos 13 sessões (que temos algum registro. Tivemos outras sessões, mas não guardamos nada delas), das quais 64 pessoas participaram (e 8 pessoas vieram em mais de 10 sessões).

A nossa menor sessão contava com 6 pessoas (sem contar o Fabio Massa e eu) e a maior teve 23 (ontem!).

Pessoas no Dojo

A sessão de ontem foi bem interessante. Além de ser o nosso recorde de público com 23 pessoas e Scala ser a linguagem do Dojo (valeu Paulo!) tivemos alguns participantes da Alemanha. Como eles não falam português (e nós não falamos alemão), escolhemos inglês como a lingua oficial da sessão.

Participantes me ajudando a organizar a montanha de post-its

Isso foi tão bem aceito na retrospectiva que decidimos escolher a lingua que será falada no início de cada sessão, assim além de praticar técnicas de programação, também poderemos praticar inglês durante as sessões.

Enfim, muito obrigado a todos que participaram dos Coding Dojos da AdaptWorks e que sejam ainda mais divertidas as próximas sessões.

Testes devem ser independentes

Tuesday, May 24th, 2011

Testes devem começar dessa forma:

Primeiro, Deus criou o céu e a terra…
E Deus disse, “Haja luz”…

E devem terminar da seguinte:

a besta que viste, era e não é, está para emergir do abismo e caminha para a destruição

Quando você começa a escrever o teste, não deve existir nenhuma dependência com o estado de um teste anterior. Se você vai usar o banco, ele deve estar vazio. Se vai usar uma classe que guarda estado em um campo static (ugh!), precisa (além de refatorar esse código), reiniciá-la.

Tem uma razão para que isso seja feito. Cada teste deve se comportar como um experimento que sempre dará o mesmo resultado (desde que você não mude o código) não importa quantas vezes você o rode.

Porque você quer isso? Para que não aconteçam falsos negativos e nem falsos positivos. Seus testes precisam ser confiáveis ou você vai passar a ignorá-los.

Imaginem o seguinte caso:


public void testaQueSalvaOsDados(){
	//Código que salva "bobagem"

	String dado = //código que recupera "bobagem";
	assertEquals("bobagem", dado);
}

public void testaQueListaDados(){
	List<String> dados = //código que busca todos os dados;

	assertEquals(1, dados.size());
	assertEquals("bobagem", dados.get(0));
}

Se você rodasse esses testes, o segundo teste passaria apenas na primeira vez. Após isso, ele iria falhar no primeiro assert (o do tamanho da lista).

Esse é um caso bem óbvio de utilização de efeitos colaterais de outro teste. E pode acontecer coisa pior. Imagine que depois de rodar os testes a primeira vez, você quebra o “código que busca todos os dados” e ele passa a trazer apenas o primeiro encontrado. Você terá um bug muito difícil de encontrar, porque os testes passam.

Novamente, esse é um caso bem óbvio. Interações bem mais sutis que essas podem acontecer e você vai sofrer muito para encontrar.

Por isso, sempre que seu teste causar algum efeito colateral, desfaça esse efeito. A sanidade dos programadores que vão dar manutenção no seu código agradece.

Se quiser aprender mais sobre testes, dê uma olhada em nosso treinamento Scrum Developer Skills.

A minha parte eu fiz.

Thursday, May 19th, 2011

Semana passada eu presenciei uma cena inusitada (talvez nem tanto). Estava esperando minha namorada sentado em um estabelecimento comercial, quando o dono do lugar sobe as escadas nitidamente irritado e, sem ligar muito para mim ou os outros dois clientes que estavam na sala, começa a discutir com a secretária, perguntando porque Fulano não foi fazer a entrega à Ciclano. A resposta da secretária foi curta, simples e precisa. “A minha parte eu fiz”. Ela complementou a frase com algo que nem lembro mais, mas essa primeira frase foi marcante.

O que estava acontecendo? Uma entrega não foi feita. Um cliente está insatisfeito. Um chefe está irritado e a secretária não quer correr o risco de ser culpada pela entrega não feita.

Já viram algo semelhante na empresa onde trabalham? Acho que muitos vão responder afirmativamente.

A ação do dono do lugar nitidamente foi uma caça às bruxas. Ele nem pensou que talvez resolver o problema do cliente fosse melhor que procurar o culpado.

Mas o que me chamou a atenção dessa vez foi a ação da secretária.

Sem pensar duas vezes, ela se exime da culpa. Após se eximir da culpa, ela foi tentar solucionar o problema. Essa sequencia de ações mostra que existe algo de muito errado dentro dessa empresa.

Se antes de procurar qualquer solução a pessoa precisa deixar claro que não é culpado, nitidamente existe uma relação de opressão (afinal, se ela for a culpada e o cliente importante, ela pode ser demitida). A cultura dessa empresa não permite erros. Se não permite erros, não permite aprendizado.

Deixemos essa empresa de lado e pensemos em nossas empresas. Trabalhamos com TI, correto? Seja desenvolvendo, gerenciando, dando treinamentos, ou qualquer outra coisa. Para TI, aprendizado e inovação são simplesmente vitais. A cada dia temos que fazer coisas que ninguém nunca fez antes. Cada linha de código nunca foi escrita antes (pelo menos não por aquela pessoa naquele projeto). Com certeza vamos errar. E quando errarmos, o que vai acontecer? Se você estiver em um ambiente opressivo, aprendizado não vai ser a sua primeira preocupação.

Uma das coisas que aprendi lendo o Artful Making do Lee Devin (e depois com o incrível treinamento homônimo também do Lee) é que para trabalhos criativos (como é o desenvolvimento de software) é necessário que exista um ambiente seguro para você errar, pois senão não conseguirá ir para frente. Errar deve fazer parte do seu dia a dia e não ser algo temido. Deve ser visto como uma oportunidade de aprendizado e não como um atraso no projeto.

Scrum é um processo empírico, correto? E processo empírico implica em errar e aprender com os erros. Para que Scrum funcione corretamente na sua empresa muitas vezes são necessárias mudanças culturais e comportamentais. Essa é uma delas.

Conversa Rápida Junho

Wednesday, May 18th, 2011

No dia 13 de Junho, das 19:30 às 22:00, teremos a segunda edição do Conversa Rápida aqui na AdaptWorks.

Para os que não viram a primeira edição, todas as palestras estão no YouTube.

Nessa edição do Conversa Rápida, teremos 10 palestras de aproximadamente 5 minutos.

Os palestrantes confirmados são:

Como temos poucos lugares, caso tenha interesse em assistir as palestras, por favor envie um email para jabreu@adaptworks.com.br confirmando.

Tiny Types

Monday, May 16th, 2011

Enquanto eu resolvia o primeiro desafio de expressividade que postei no VidaGeek.net, me deparei com uma situação comum para programadores Java.

Eu precisava que a classe java.lang.String fosse capaz de fazer coisas (como inverter a string) que ela não é.

A solução mais comum seria criar uma classe Strings (seguindo o padrão da java.util.Collections) que conteria o comportamento.

Daí para usá-la, seria da seguinte forma:


Strings.inverte(suaString);

O problema é que isso espalha o comportamento que deveria pertencer à String (que não temos como alterar).

Ao invéz de solucionar o problema dessa forma, resolvi usar um Tiny Type para encapsular essa string (chamei de BinaryString).

Essa BinaryString é capaz de se inverter, além de eu poder dar os nomes que eu quiser para os métodos (deixando mais expressivo).

Mas a maior vantagem de ter usado esse Tiny Type é que ele me abriu possibilidades que não existiam no código sem ele e eu mudei completamente a solução que pretendia criar. A nova solução ficou (na minha opnião) mais elegante e expressiva.

Se tiverem maior interesse sobre Tiny Types, eu escrevi sobre o assunto aqui e tem um post do Darren Hobbs que é onde eu entrei em contato com o assunto.

Além disso, no nosso novo treinamento Scrum Developer Skills, vários assuntos relacionados à expressividade são abordados, incluindo Tiny Types.