André Carlucci

Skeptic .net development

Coding4fun na Way2

Na Way2 a gente passa tanto tempo desenvolvendo software para web que as vezes esquecemos o quanto é desafiador ter que resolver um problema com algoritmos complexos.

Estamos prontos para criar código testável, inverter o controle injetando dependências, fazer mágicas com javascript e domar o hibernate como ninguém, mas tenho notado um certo delay nas poucas tasks que envolvem criação de algoritmos mais sofisticados. O problema é justamente esse, no tipo de software que a gente produz temos poucas situações onde isso é necessário, mas são os pontos mais importantes na diferenciação de nossos produtos.

Para manter nossas habilidades em algoritmos e ao mesmo tempo sanar nossa vontade de resolvê-los, criamos uma nova prática na Way2 que chamamos de “Coding4fun” (sim, o nome é cópia descarada do Channel9).

Como funciona?

A cada sprint a gente define alguns algoritmos para resolver. Cada um cria um gist com suas versões e discutimos as diferentes maneiras de resolver os problemas.

Esse primeiro sprint fizemos os três primeiros problemas do Project Euler, só para esquentar os motores.

Por exemplo: “Add all the natural numbers below one thousand that are multiples of 3 or 5.”

O Bassani resolveu usando linq. Achei que ficou bem elegante:

Já o Marcel fez com Ruby, o que já dá outra cara:

[ruby]
limit = 1000

sum = 0
(1…limit).each { |v| sum += v if v%3 == 0 || v%5 == 0 }

puts sum
[/ruby]

A Dri já usou uma abordagem mais procedural:

A próxima rodada já vai ser diferente, vamos fazer um único algoritmo (mais difícil) e cada um vai resolvê-lo em c# (nossa linguagem do dia-a-dia) e em outra linguagem de sua escolha. Vai ser bem interessante ver em quanto a linguagem vai nos influenciar na maneira de resolver o problema.

E você, gosta de algoritmos? Como resolveria esse aí?