quarta-feira, dezembro 23, 2009

Desenvolvimento de software é uma coisa irônica

Engraçado como o desenvolvimento de software tem uma tend?ncia a ser irônico e tirar um sarro dos seus esforços: 1 - Quanto mais flexível você tenta fazer o software, menos flexível ele fica. 2 - Quanto mais rápido você tenta contruí-lo, mas demora terminá-lo. 3 - Quanto mais simples você o faz, mais robusto ele fica. 4 - Mas quanto mais você tenta fazê-lo robusto e escalável, menos ele fica. 5 - Se você faz direito, demora menos tempo. 6 - Se você faz nas coxas pra ganhar tempo, você perde tempo. 7 - E quanto mais você estuda, mais aprende que nâo sabe o suficiente. 8 - Mas se não estuda, tem absoluta certeza que sabe tudo o que precisa. Tem horas que acho que o negócio é pensar de ponta-cabeça =/

quinta-feira, outubro 29, 2009

O mito da "recuperação do atraso"

Não tem dessa de "recuperar o atraso" em um projeto de software... Boa referência aqui também: What Is the Cost of a Requirement Error?

segunda-feira, outubro 26, 2009

Técnicas, não ferramentas

Acho que nós da área de desenvolvimento temos um grande problema onde focamos nossos estudos. Normalmente estudamos demais a coisa errada, e as coisas certas não estudamos o suficiente.
Também é difícil dizer qual é o foco "correto". Cada um vai ter uma opinião diferente e não há estudos pra basear nenhum dos nossos "achismos". (Hmmm... já reparou como quase todo desenvolvimento de software comercial/corporativo tem esse problema?)
Pessoalmente, depois de ficar perdendo muito tempo estudando frameworks, descobri que o que interessa são técnicas, não ferramentas. Tenho hoje a nítida percepção que a ferramenta vêm naturalmente se você tem a técnica.
O que seriam as técnicas?
  • Idiomas das linguagens
  • Patterns dos mais variados
  • Modelos de arquitetura
  • TDD/BDD
  • Paradigmas de programação (OO / Funcional / Imperativo / Declarativo)
  • DSLs ou Interfaces Fluentes
Ou seja, independente da linguagem, os conceitos serão úteis.
E as ferramentas?
  • Qualquer linguagem (Ruby, Java, Haskell...)
  • Qualquer framework (Rails, Spring...)
  • Qualquer biblioteca ou API (REXML, JDOM...)
Hoje, eu foco o máximo na técnica e só estudo a ferramenta até o nível suficiente para o problema atual. O efeito que isso causa é bastante interessante, normalmente consigo responder se algo existe na ferramenta sem conhecê-la, porque, conceitualmente, a coisa deveria estar lá. :)
Estou certo? Sei lá. Pra mim funciona melhor do que antes, quando eu me matava pra ficar aprendendo ferramenta e a cada 3 anos vinha uma nova e todo o conhecimento era perdido. Agora o conhecimento acumula, e o que tenho que renovar é menor.

quinta-feira, outubro 01, 2009

Metaphone em português para Java

Custou um pouquinho para achar um banco com nomes para testar e acertar as rebarbas, mas finalmente está aí: codificação fonética em Metaphone para português (http://github.com/ruliana/MTFN) :) Se você quiser saber do que estou falando: http://en.wikipedia.org/wiki/Metaphone e http://www2.varzeapaulista.sp.gov.br/metaphone. Muito simples de usar, muito simples de customizar e vem com um banco de dados de teste, cortesia do Marco "Kiko" Carnut (http://www.postcogito.org/) e seu trabalho sobre descobrir o sexo da pessoa somente pelo nome (http://www.postcogito.org/Kiko/PlanilhaMascFemPtBr.html, trabalho muito legal, vale a pena conferir!) Só que, com a massa de testes e estudando um pouco melhor a fonética da língua portuguesa, deu pra perceber que a coisa pode ser melhorada. Como por exemplo, considerar "P" e "B" como equivalentes, assim como "M" e "N". Desconsiderar algumas consoantes nos finais dos nomes e assim por diante. Optei primeiro por liberar um algoritmo bastante similar àquele que me baseei, que já é muito bom! Agora começo a refiná-lo com meus próprios "achismos". Vamos ver no que vai dar. ;)

domingo, setembro 27, 2009

Functors? Hmmm... nhammy

Ando estudando Haskell de farra ultimamente, confesso que ainda não entendi ainda qual é o barato dos monads, mas funções como cidadãos de primeira classe, combinação de funções e currying são conceitos bem legais. Dei uma checada no que havia para Java (é... Java) e esbarrei com alguns projetos interessantes, mas todos muito trabalhosos para minha preguiça. Então, como todo bom nerd, se você não acha uma ferramenta que goste, você cria uma. Então, com um pouco de Java Voodoo do Brabo, fiz o "Yo da Funkta!" pra satisfazer meu ego e minha preguiça. Acho que ficou bonzinho... Agora... estou muito interessado em... Metaphone...

segunda-feira, junho 15, 2009

Sims ensina

Sou um jogador casual de "Sims", jogando ele acabei aprendendo algumas dicas boa para o dia a dia: - Compre uma boa cama (com um excelente colchão), vale a pena! - Não dá tempo de fazer tudo o que se quer. - Gastar todo seu tempo livre com diversão não te leva a lugar nenhum, mas é preciso gastar algum tempo só com diversão. - É possível aprender se divertindo, mas nem sempre dá pra se divertir aprendendo. - Investir na carreira é ótimo, e tem que ser feito com intenção. - Sozinho não se vai muito longe. E por aí vai...

quarta-feira, junho 03, 2009

A difícil arte de explicar o abstrato

Tenho um problema básico de comunicação quando tratando com pessoal "não-nerd" como os gerentes (e a minha esposa). Toda vez que tenho que explicar "o código está ruim", eles me olham com aquela cara de tela azul do windows. Dá quase pra ouvir o somzinho no fundo: "pãm...!" Aí comento que é difícil dar manutenção, que leva mais tempo, que para fazer algo precisamos arrumar um pouco a coisa, que as estimativas não são confiáveis. "pãm...!?" Torna explicar que mexer ali pode causar problemas em outros lugares, que pode quebrar o que funciona, etc... etc... "pãm... pãm...!?" Finalmente, achei um jeito bom de explicar quando digo "o código está nojento" e eles entenderem a encrenca que é mexer naquilo. As imagens abaixo (do post http://www.tvsnob.com/archives/016683.php ) ajudaram muito: Primeiro, isso é um código bom: E isso aqui é "código ruim: Leia novamente as frases acima, mas observando as imagens... não fica óbvio? Agora, sempre que vamos conversar, eu mantenho essa imagens por perto, hora que o pessoal começa a viajar muito, eles colocam o povo na terra. E tudo mundo entende o problema que temos nas mãos. As imagens corretas valem por um milhão de palavras.