April 16th, 2008Running Java 6 on a Mac

Following the recent trends on Planet TW, George and I decided to share our homage to those who, like us, miss (or don’t) running Java 6 on a Mac :-)

 

Running Java 6 on a Mac

 

Post to Twitter

If you ever got your Mac screen dimming or your Screen Saver running in the middle of a presentation, here’s a quick tip: give you Mac some Caffeine. Before discovering this I used to play around with Energy Settings but always forgot to change it to ‘Custom’ and, let’s face it, switching this functionality on and off in one click is always better than two! Enjoy! :-)

 

Post to Twitter

It’s been a while since I read the 2nd Edition of “XP Explained” and I really enjoyed the emphasis on separating practices from values and principles. If you try to map the original 12 XP Practices to the new primary and corollary practices, you will notice that it’s not a one-to-one map. And that’s great! Practices are good when you are at the Shu level of learning, but they should be tailored to specific situations, and understanding the underlying principles and values is what will help you do that.

Besides Pair Programming and Test-Driven Development, most of the original XP practices are distilled in more than one practice in the second book. Refactoring and Simple Design are better exposed as Incremental Design, while the Planning Game can be recognized in a list of practices such as: Stories, Weekly Cycle, Quarterly Cycle, and even Slack. Although Coding Standards are not explicitly cited as a practice, you can see its importance when reading about Shared Code and Single Code Base. But you will miss one practice in particular from the first book: the System Metaphor.

The System Metaphor was probably the less adopted practice and usually one of the hardest to explain. If you’re able to express and design your system in a shared metaphor such as “Payroll is like an Assembly Line”, you will see the benefits of this practice shining through: communication with domain experts will be easier and the gap between domain model and implementation will become much shorter. But as it turns out, it is not easy to find a useful metaphor for every system.

If you miss this practice from XP and is looking for the underlying principles behind it, I strongly recommend reading Domain Driven Design, by Eric Evans. Striving to find an Ubiquitous Language to bridge the communication gap between developers and domain experts, and isolating complexity in a rich domain model are goals worth fighting for. In Eric’s words:

 

System Metaphors are not useful on all projects. Large-scale structure in general is not essential. In the 12 practices of Extreme Programming, the role of a System Metaphor could be fulfilled by a Ubiquitous Language. Projects should augment that language with System Metaphors or other large-scale structures when they find one that fits well. 

 

Other patterns for large-scale structure are discussed in the book, as well as a lot of other precious material. So if you still haven’t done it, go read the book!

 

Post to Twitter

April 7th, 2008Git tip for Brazilians

While working with Git on my current project, my pair and I noticed a source of waste when synchronizing with the master repository: in Portuguese “Puxe” means pull, which sounds exactly like push, but with the opposite meaning. Push in Portuguese is “Empurre”. Because of that, it always take me a few seconds before figuring out which command to execute. Since we are all for eliminating waste, here’s the visual solution in our pairing station… :-)

 

Git push or pull?

 

Post to Twitter

Working for ThoughtWorks is a very rewarding experience. After finishing my first project and delivering a Rails app in 1 month, last Friday I had the opportunity to attend QCon London. Overall it was a really nice day and my feeling at the end of the day was that I should have been there on Wednesday and Thursday :-)

I started the day attending the “Architectures You’ve Always Wondered About” track. The first talk was really good and Randy Shoup talked about the architectural principles behind eBay. I had already read about eBay’s transactionless style for achieving availability and scalability through data partitioning, but it was interesting to hear about the way they approach deployment for new code and features. There are no changes that cannot be undone. They have automated deployment tools that manage the dependencies between different components (a la package management systems such as apt) that allows rollout ant rollbacks (a la Rails’ migrations) of different pieces of code. Interesting stuff!

The second talk on that track was supposed to be about Twitter’s architecture, but for some reason it was cancelled and replaced by an interesting presentation about BBC’s new media publishing system. Nothing really ground breaking in terms of technology, but it was interesting to hear about their current process of migrating a huge physical media storage (with guys in motorbikes taking tapes from site to site) to digital format, and how it changes their editorial process… somehow the image of the guy in a motorbike reminded me of the Pigeon’s high bandwidth transfer protocol :-)

After lunch, I switched to the “Programming Languages of Tomorrow” track. I first listened to Joe Armstrong’s talk about Erlang (and the case for concurrent systems on a multi-core soon-to-arrive future). He is a very entertaining speaker and I think that he successfully delivered his message to the general audience.

Next came Ted Neward with an introduction to Scala for the lazy Java developer. Although I didn’t consider myself the audience for this talk based on the title, I was interested to see and learn a little more about Scala. He covered the basics of the language and I enjoyed watching real code instead of slides, but I was hoping to hear more about Scala’s concurrency features… maybe lazy programmers are still not worried enough about concurrency :-)

The track finished with an Open Space style session, where participants discussed about which factors are driving the increasing interest and resurgence of different languages. For me this was the most interesting discussion of the day and it strengthened the case for polyglot programmers. One of the topics was that it usually takes years for someone to become an expert at something and that it’s harder to leave that knowledge behind to learn something new. I think that it all comes down to whether you want to be a specialist or a generalist and I’ve already stated my position of trying to be both. Another interesting aspect of the discussion was Martin’s point that the evolution happens in cycles and that after a period of stabilization, it’s time (again) for broadening the options and looking for new ideas that will lead us to the next big thing. In these times it’s important to look for new learning opportunities instead of narrowing your knowledge. I think it’s time for me to use the generalist hat for a while… :-)

Finally, the closing panel gave me a good summary of the things I saw and the things I missed. Some of the highlights that I hope will be available at InfoQ soon were Kent Beck’s session and keynote, Martin’s and Jim Webber’s keynote, and Ola’s and Venkat’s sessions on blending dynamic languages and extending the Java platform.

I was really impressed with the quality of the conference, from tracks, to sessions, and speakers. QCon is one of the best technical conferences I’ve participated and I recommend it for anyone interested in enterprise software development. I’m looking forward to attending again next year.

 

Post to Twitter

For those of you who didn’t know, after going to XP 2007 last year and speaking with Emmanuel Gaillot, I decided to start a Coding Dojo in São Paulo, Brazil. We’ve been running weekly sessions since last July and after I moved to London, Mariana, Hugo, Fabricio, and others are making sure that the Dojo continues. It has been very fun and educational to organize and run the Dojo, so we decided to share our experiences with the community. We are proposing a 30 minutes Experience Report to be presented at Agile 2008. I wanted to submit this proposal earlier to allow more time for feedback and reviews, but the bureaucracy of moving to another country and the excitement of working with very talented people has kept me busy. But the deadline for submitting session proposals to Agile 2008 is tomorrow, and I didn’t want to lose the opportunity of attending and sharing our experiences. We would appreciate any feedback to improve our session. The link to the proposal is here. Thanks!

 

Post to Twitter

For a while I’ve been planning to write on this subject. The question of whether going broad or going deep into a subject area has always been present in my life. In this post I will scratch some of my current thoughts on the subject. Feedback and other opinions are welcome!

Some Background

My parents always told me that I couldn’t be good at everything. But they’ve always been very supportive on everything I decided to do. Being a great musician, magician, and programmer was not an easy task, but that never stopped me from trying. But then I read something funny that became a good argument for a while…  

The Specialist Paradox

An specialist is someone who knows more and more about less and less, ultimately knowing everything….. about nothing!

That even made me review my resumé to remove any reference to the word “specialist” and include the word “generalist”. :-)  

Swinging the pendulum

But I forgot that you can always change the argument to take the other extreme and come up with a “Generalist Paradox”. And then I watched Kent Beck’s keynote speech last year at XP 2007 about Ease at Work. We are always trying to be the best, but then we realize how bad we are and start thinking we are the worst. A great lesson that I took from his words is that while swinging that pendulum back and forth, we never stop to think that neither of those extremes are good. Being at ease is trying to find how to stay in the middle. In our discussion, the extremes of the pendulum would be the common view that generalists are best at defining the problem or goal and specialists are best at solving the problem or “executing the plan”:

Generalist or Specialist?

While researching about this subject, I learned that you have similar concepts in Biology (highlights are mine):

A generalist species is able to thrive in a wide variety of environmental conditions and can make use of a variety of different resources (for example, a heterotroph with a varied diet). Specialist species can only thrive in a narrow range of environmental conditions and/or have a limited diet. Organisms do not fit neatly into either group, however. Some species are highly specialized, others less so, while some can tolerate many different environments. In other words, there is a continuum from highly specialized to broadly generalist species.

We can leverage that same idea, letting go the “Us vs. Them” argument and starting to think about generalist and specialist as complementary skills. David Armano has already suggested changing the “or” to “and”, but I would dare taking it one step further…  

It’s all about context

Specialty is contextual. Anyone in my family would consider myself a specialist in programming and software development. But they don’t have a clue that Computer Science is a broad area with so many fields. Some interest me more than others, so I could say I’m a generalist at that level. But since my interest in software development and Agile Methods is greater than other fields, one could say I’m a specialist, although I wouldn’t consider myself an expert at anything :-) I can see the XP principle of Self-Similarity applied here. I think that the above picture is just a simplification of reality. There are some dots underneath the surface that you can only connect if you specialize a little bit. And I would say that the same fractal structure would appear as you go deeper and deeper into your endless search for knowledge. Sometimes you will have to go back and look broader for a while, but that’s not wasted effort. That’s why I now see value in being both a generalist and a specialist in different contexts.

Post to Twitter

From now on, I will be writing in English. I’ve been planning to do this for a while, but the “New Year” is always a good time for a personal retrospective and some planning for the future (although I think shortening the feedback loop to less than one-year would be beneficial). Besides the usual reasons for writing in another language (training, reaching a wider audience), I think that anyone seriously working with software development should be able to at least read English. I might still publish translated versions of some of my posts, but don’t count too much on that.

Speaking of changes, it’s finally time to annouce the good news:

I’m a ThoughtWorker

Some of you may already know, but since I’ve started interviewing back in 2006, more than one year has passed and many things happened. The one big thing that was holding me back was my Master’s, but since I’ve finished it back in June, things started moving. After a lot of paperwork going back and forth between Brazil and the UK, I’ve finally managed to get my Work Permit and entry clearance approved. My passport couldn’t have arrived in a better time than one week before Christmas. It was the gift I’ve been wishing throughout the year.

I want to say I’m very excited to work for ThoughtWorks! For those of you who were close during all this time, I want to say a big THANK YOU. My family and friends have been very supportive. But now is time to pack my stuff and give a step forwards. I’m starting in the second week of February and am looking forward to report the news. Wish me luck!

Post to Twitter

A ImproveIt está deixando o mercado de serviços e consultoria em Métodos Ágeis e XP. Estava escrevendo esta resposta como um comentário e percebi que estava ficando grande demais, então resolvi dedicar um post, afinal, meus amigos da ImproveIt merecem :-)

Amigos da ImproveIt no Rio On Rails

Mais importante que vender e disseminar os valores ágeis é mostrar que eles fazem parte da sua filosofia de vida. Com essa mudança vocês demonstram tudo aquilo que é difícil de vender em XP mas que faz muito sentido para quem usa: coragem, abraçar as mudanças, transparência na comunicação e envolvimento com a comunidade.

Até poucas semanas atrás eu não conhecia o pessoal da ImproveIt pessoalmente. Tive o prazer de conhecê-los graças aos eventos de rails em São Paulo e no Rio. Agora posso afirmar com certeza que eles têm o talento e o conhecimento necessários para que o sucesso venha rapidamente.

Amigos da ImproveIt no Rio On Rails

Tenho certeza que a mudança não é uma reação aos pontos levantados pelo Vinicius. Apesar de eu mesmo ter participado e até promovido os treinamentos de Scrum do Boris, concordo com as críticas. Tanto que, se olharem meu currículo, coloco o treinamento como curso e não certificação. Prefiro olhar pelo lado positivo da mudança. Acho que a mudança de rumos está muito mais relacionada com as possibilidades que enxergam no futuro do que com o que já fizeram no passado. E é exatamente esta atitude que eu admiro. Mudar sem medo. Coragem.

Desejo muito sucesso a todos: Vinicius, Tapa, Rafael, Felipe e Leandro (o único que não conheci pessoalmente, infelizmente). Continuem produzindo produtos de qualidade assim como fizeram com os treinamentos, palestras, consultorias, posts e podcasts sobre Métodos Ágeis e XP. Um grande abraço!

Post to Twitter

Pessoal, meu amigo Boris Gloger, da SPRiNT-iT, me pediu um favor para divulgar os próximos cursos oficiais de Certified Scrum Master no Brasil. Duas turmas estão agendadas para Janeiro, uma em São Paulo e outra em Recife. Para mais detalhes, acesse diretamente:

Eu fiz esse treinamento em Abril e cheguei a apresentar um seminário sobre o assunto no IME (slides). São dois dias repletos de atividades e práticas que te farão questionar algumas premissas e trarão uma breve experiência do desenvolvimento ágil com Scrum. Altamente recomendado!

 

Post to Twitter


© 2007-2009 Danilo Sato | Powered by Wordpress

Page optimized by WP Minify WordPress Plugin