Como testemunho real de como uma nova linguagem/plataforma mudou meu jeito de resolver problemas.
Quando meus conhecimentos eram só de Java, C# e VB ( 8) ) e OO:
meu código de loop quase sempre era assim
for (Item item : items) {
if (Status.ANALISADO.equals(item.getStatus()){
itensAnalisados.add(item);
}
}
meu código de teste era bem assim
@Test public void testCarrinhoVazio(){
Carinho carinho = new Carinho();
Assert.assertTrue(carinho.isVazio);
}
as ferramentas mais cools que dominava eram: Eclipse, um pouquinho de linux, Husdon, os plugins do Eclispe para rodar o mvn,
Depois de uma semana de Ruby, me vi maravailhado e influenciado fortemente pela forma na qual essa linguagem iterava sobre coleções/enumerables, como era tratado a semántica de testes, as ferramentas que eles utilizam …
Logo me vi “mal” acostumado, me fazendo procurar ferramentas ou frameworks que simulavam ao menos um pouco das maravilhas do ruby & seu ecossistema.
Meu código ficou mais fluente, veja um loop: (considere o uso de Guava e import static, tudo em nome da legíbilidade)
[code]
Predicate filtroTodosAnalisados = new Predicate() {
public boolean apply(final Item item) {
return Status.ANALISADO.equals(item.getStatus();
}
};
final List todosAnalisados = filter(items, filtroTodosAnalisados);[/code]
Meus testes ficarm um pouco mais auto-explicativos e legíveis (longe do estilo documento do rspec e outros mas bem fácil de ler)
@Test public void test_carrinho_novo_esta_vazio(){
Carinho carinho = new Carinho();
assertThat(carinho.isVazio(),is(true);
assertThat(carrinho.items(), not(contains(item1)));
}
Não que nenhumas das técnicas ou ferramentas citadas anteriormente não são legais ou usuais ainda hoje… ao contrário, elas evoluiram e tem até mesmo um pouco de influencia desses outros “mundos”.
Sem tanta descrição e exemplos eu posso dizer que minha cabeça evoluiui muito quando :
[list]Usei e aprendi rails e seu jeito agile de desenvolver, testar e implantar web apps.[/list]
[list]Que o conceito REST pode ser bem mais usual e simples do que parece.[/list]
[list]Que com jQuery e seus plugins faço maravilhas que antes só usava em frameworks web.[/list]
[list]Vi que VIM pode ser usado como um editor completo.[/list]
[list]Aprendi a criar scripts shell para automatizar tarefas básicas.[/list]
[list]Aprendi que puppet ajuda em Deploy.[/list]
[list]Aprendi um pouco de Clojure e mais uma vez a forma de pensar está se expandindo.[/list]
[list]Nodejs ou EventMachine…[/list]
[list]…[/list]
Resumindo, ter relações de curiosidade ou aprendizado ou trabalho sério (só lembrando que, há freela em Rails que os gringos pagam em U$ por hora…) em outras plataformas pode sim te transformar em um dev bem melhor.
Essa simbiose (você & várias plataformas/linguagens) é o perfeito exemplo de que se arriscar rumo a novos conceitos é um caminho sem volta