quarta-feira, março 31, 2010

Sobre a carreira

Eu estava revisando meu currículo esses tempos atrás e comecei a ver no que já trabalhei, não em tecnologia, mas os negócios em que trabalhei, e fiquei surpreso com a quantidade de coisa que 'entuia os meu norônio'. Olha que beleza:
Comecei dando aula de DOS, WordStar, Lotus-123 e QuattroPro, depois seguem aulas de Windows, Access e 3DStudio (versão DOS!).
Largo as aulas e vou dar manutenção em um sistema auxiliar de uma indústria de celulose e papel.
Pouco tempo depois começo a mexer com e-commerce e um portal.
Mais um ano e vou pra bioinformática mexer com análise de DNA.
Saio e vou trabalhar com e-government na Secretaria da Fazenda do Estado de São Paulo.
Na sequência engata um sistema para configuração de equipamento de medição remota, e o front-end de um e-banking.
Fico 2 meses parado e vou trabalhar com replicação de autorização em catracas eletrônicas, middleware para transferência de dados entre fabricantes de móveis, CRM, e um site para corrida de cavalos.
Nesse meio tempo correm em paralelo: mais aulas e mais sistemas para bioinformática.
Saio e vou trabalhar com logística, segurança pública e análise de recursos hídricos.
E agora, fazem duas semanas, tráfego de controle aéreo controle de tráfego aéreo.
...
De DNA a burocracia, de caminhões e cavalos a aeronaves. Tenho certeza que tenho alguma lição pra tirar disso, mas não sei qual :D
O mais engraçado é que, no final de cada sistema, eu (e todo mundo que tinha trabalhado no projeto) sabia mais que muita gente da área. Acho que é efeito colateral de quando você tem que esmiuçar tudo quanto é regra para poder fazer o software. Depois que passa o projeto a memória faz seu trabalho e lentamente você vai esquecendo tudo que aprendeu. Eu me divirto no processo, mas às vezes me parece um tremendo esforço em vão, já que vou esqueçendo tudo. =/

Ginger - Scratch you own itch

3 meses que não escrevo nada... não sei pq insisto em manter um blog :) Vai ver é pro meu ego ter algum lugar onde estravazar.
Já ouvi aquela idéia do "scratch you own itch"? Dizem que muitos produtos legais vêm disso, ou seja, quando o desenvolvedor fica incomodado o suficiente com algo e faz um programa pra resolver seu problema.
Bom, eu trabalho com Java 8 horas por dia (e Ruby nas outras 2 horas) e estou sempre reescrevendo os mesmos utilitários o tempo todo para todo projeto que entro. Então, resolvi "coçar minha coceira" e montar uma lib de uma vez com esses utilitários. Aproveitando para dar uma polida geral neles para ficarem bem bacanas.
Nasce então a "Ginger", uma pretensiosa biblioteca que promete acabar com todos os seus problemas (haha! Silver bullet!!! haha!). Brincadeira! Ginger ainda é pré-adolescente e vai levar um tempo até servir de algo. Mas ela está lá, para quem quiser apreciar e, principalmente, criticar.
Ginger hoje tem um objeto "DuckType", que facilita a parte de reflexão, e estou trabalhando em facilitar expressões regulares e manipulação de texto.
Acabou que me empolguei com umas idéias nessa parte e resolvi fazer umas experimentações. Acho que descobri um jeito de expandir expressões regulares para fazer algumas coisas "impossíveis" do tipo "encontre tudo que não for isso", e facilitar o uso de lookahead e lookbehind, que são sempre complicadas.
É isso aí, opiniões são bem vindas. :)

segunda-feira, janeiro 18, 2010

Sensatez não dá Ibope

(Edição: arrumando acentuação [você não odeia quando essa bagaça zoa com os acentos?])
Eu estava conversando com um colega hoje sobre esse artigo sobre Injeção de Dependência e comentando sobre a polêmica levantada. A conclusão foi "O artigo é bom, mas bem que o Uncle Bob podia ser um pouco mais imparcial; existem casos onde Injeção de Dependência é bom, ele poderia ter falado neles também". Só que se ele tivesse sido imparcial, provavelmente o artigo não teria tanta popularidade :) A gente instintivamente vai atrás de polêmica. Moral da história: "Sensatez não faz sucesso". Taí uma coisa realmente preocupante...

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. ;)