Nesse carnaval, um dos artigos que saiu da minha sempre crescente lista no Instapaper, foi sobre as diferentes abordagens para a solucao de problemas adotadas por dois grandes inventores: Thomas Edison e Nikola Tesla. Alem de ter gostando bastante do artigo[1], gostei do que aprendi das pesquisas adicionais que fiz por causa dele (referencias no final) e, por fim, tive a motivacao que faltava para voltar a postar aqui. Esse post explora o contraste entre as abordagens de Edison e Tesla aplicadas ao desenvolvimento de software.Edison e o trabalho arduo"Genio: 1% inspiracao e 99% transpiracao" (Thomas Edison)"Eu nao falhei 700 vezes. Nao falhei nenhuma vez. Eu fui bem sucedido em provar que aquelas 700 alternativas nao funcionam. Quando eu tiver eliminado as que nao funcionam, encontrarei aquela que funcionara." (Thomas Edison)Belas afirmacoes! Voce por acaso conhece alguem bem sucedido que nao tenha trabalhado duro nas suas ideias? Se nao houver disposicao para executar uma ideia, o que muitas vezes envolve desistir de um caminho e tentar outro, a mais brilhante das ideias nao vai a lugar algum.Porem, Tesla, que foi assistente de Edison durante algum tempo, era partidario de uma abordagem diferente.Tesla e a otimizacao do trabalho"Se Edison tivesse que procurar uma agulha no palheiro, ele examinaria palha por palha ate encontrar a agulha. Fui uma triste testemunha de coisas como essa, sabendo que um pouco de teoria e calculo teriam economizado noventa porcento do seu trabalho." (Nikola Tesla)Quem voce acha que teve mais razao nas suas afirmacoes? Ora, de certa forma, ambos estavam corretos. Disposicao para trabalhar arduamente e importante, mas otimizar a maneira como voce trabalha tambem. Uma coisa complementa, nao exclui, a outra.Caso voce nao saiba, a Edison e atribuida a invencao da lampada eletrica incandescente; aquela que gasta mais energia gerando calor do que luz. E Tesla inventou a lampada fluorescente, muito mais economica. Edison tambem foi o pioneiro na geracao de energia eletrica continua (DC); eficiente, porem cara. Enquanto Tesla foi o pioneiro na energia alternada, muito mais barata, e que se tornou e continua sendo o padrao mundial.O ponto que quero trazer a atencao aqui e: quando voce resolve problemas, voce age mais como Edison ou como Tesla? Um breve incidente pessoal ajuda a explicar a diferenca no contexto do desenvolvimento de software.Meu momento EdisonAtualmente estou trabalhando num projeto usando Titanium Mobile (veja meu blog sobre Titanium). A linguagem usada pelo Titanium e o JavaScript, que comecei a conhecer de verdade de um ano pra ca. Nesse projeto, a app mobile recebe dados no formato Json de um WebService. Esses dados incluem um array de centenas de objetos ordenados por um atributo especifico. Porem, em um dia de trabalho solitario em home office na semana passada, surgiu a necessidade de se fazer buscas nesse array por um atributo diferente da sua ordenacao. Nao seria conveniente fazer uma busca sequencial em centenas de elementos. Entao, sem medo de encarar o trabalho envolvido, implementei um mecanismo de indexacao que consistia em manter um segundo array contendo em cada elemento um objeto com dois atributos: o valor do campo