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.

Domingo, Abril 26, 2009

É tarde da noite... passei horas incontáveis programando. Tomo um banho e tento dormir, não consigo. Linhas de código passam pela minha cabeça, penso em "if levantar", "sono -= 1", "sono += ler", blog, blog, coisas esquecidas...

Levanto, pego o Mac e abro. Fico olhando a tela azul, quando me dou conta, me loguei mas não consigo me lembrar quando digitei a senha.

O blog aparece, também não lembro de ter entrado aqui. Começo a digitar a esmo, as palavras vão saindo antes que eu consiga montar uma frase completa na cabeça. E agora, o que estou escrendo?

Continuo vendo linhas de código passando na minha frente, o Código chama. Não posso responder ao Código, preciso programar. Não posso, fiz isso por tempo demais. Preciso escrever, já estou, mas não me dei conta.

Queria poder escrever rápido como o Akita, programar como Kent Beck, arquiteturar como Fowler, ter a consciência do _Why. Pra quê? Não sei bem, mas imagino que deve ser divertido.

Abro o terminal, "ruby -v".

__"ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0]" - a máquina responde feliz.

"irb", eu digo a ela.

Um prompt me saúda, o cursor pisca, perguntando o que eu quero.

text = <<TEXT

Colo o texto que escrevi

TEXT

words = text.split
words[rand(words.size)]

O prompt responde:

"dormir"

Sensato como Ronaldo Ferraz. Deveria, mas ainda náo consigo. Se eu rodar de novo, acho que ele responde "Deixa de frescura e vai pra cama". Direto e contundente como o TaQ. Fico com medo que ele responda isso mesmo e fecho o terminal.

Me dou por vencido.

Fecho o Mac, uma luzinha branca me lembra que ele ainda vigia. Desisto e fecho os olhos. Amanhã vou rir disso... acho.