29 de outubro de 2009

Mantendo o foco

Você já se pegou fazendo uma coisa que não vai te ajudar em nada e, pior, vai te atrapalhar a fazer o que precisa?

Claro que já. Acho que todo mundo passa por esse fenômeno chamado procrastinação. Palavra feia para uma característica mais feia ainda. Eu li um post do Jeveaux intitulado "Procrastinação não" que me inspirou a falar sobre o mesmo assunto, trazendo minha experiência.

Tenho que admitir, sou um procrastinador de carteirinha. Já fui muito pior, estou melhorando. A síndrome do estudante já me pegou de jeito muitas vezes.

Existem alguns motivos para empurrar com a barriga o que a gente precisa fazer:
  1. Querer fazer outra coisa
  2. Excesso de confiança em você mesmo
  3. Não estar convencido da real necessidade de fazer o que precisa
  4. Medo de não conseguir fazer
  5. etc. ...
No meu caso, aconteciam a primeira e segunda situações.

Às vezes eu sentia que minha tarefa era um "mal necessário". Então, a motivação não vinha mesmo.
Outras vezes eu achava que daria conta do recado, que a atividade era fácil demais e aí, pronto, acabava atrasando!

Há algum tempo eu resolvi dar uma estudada no Getting Things Done (GTD) e isso ajudou um pouco. Pelas navegadas de procrastinação, acabei encontrando o Zen To Done (ZTD) que é um GTD resumido. Existe até uma sugestão do ZTD minimalista -- resumo do resumo -- que é bastante útil para quem está começando nessa empreitada contra a empurrada pra frente. Há outras abordagens, com o Pomodoro, citado no artigo do Jeveaux, que se baseia na ideia de recompensar um tempo que você ficou focado em alguma atividade. Auto-recompensa positiva. Afinal, a psicologia está aí pra isso mesmo.

Levando ao limite o meu lado procrastinador, eu até pensei em desenvolver um aplicativo para me ajudar a não procrastinar! É mole?! Ainda bem que não comecei. Seria mais um projeto idealizado, planejado e empurrado.

Estudar esses métodos é legal, abre um pouco a cabeça, mas a gente acaba se escondendo do real problema: nós mesmos. Há algum tempo eu ouvi que "o pior inimigo de uma pessoa, é ela mesma".

Se não encararmos de frente nossa deficiência, sempre vamos usar a desculpa de estarmos nos preparando para vencer a procrastinação e usar o tempo que deveríamos fazer alguma coisa, para estudar como deixar de empurrá-las. Paradoxal, né?

Portanto, eu resolvi extrair a essência do GTD, ZTD, Pomodoro e outros, e bolei meu sistema pessoal de anti-procrastinação. É bem parecido com o resumo do ZTD, que citei acima.

Eu fiz minha auto-análise e vi que as atividades grandes me causavam dificuldade de vencer a inércia para fazê-las. Então, eu aproveitei um conceito que vi aplicado pela primeira vez nos métodos ágeis: os passos de bebê, ou baby steps. Com tarefas menores, um passo de cada vez, as atividades ficam mais controláveis e você vai vendo o avanço.

Vamos a um exemplo: eu quebrei a atividade "ler emails" em:
  1. Emails pessoais
  2. Moderar a lista X
  3. Ler a lista Y
Cada uma dessas atividades exige um tempo e atenção diferente da outra. Portanto, cada uma ficou separada. Eu fiz isso num mapa mental usando o FreeMind para todas as atividades importantes de um dia característico de trabalho. É possível organizar muito bem as ideias usando mapas mentais.

Vamos ver como eu estou conseguindo me organizar.

Eu tenho duas vidas: uma pessoal e outra profissional. Elas precisam estar em harmonia e não devem brigar tanto. O Vinicius pai e marido é diferente do Vinicius programador.

Então, minha primeira atitude foi delimitar um horário de trabalho. Como estou trabalhando em casa, essa diferença de papéis é às vezes difícil de se conseguir, sem ter um horário de trabalho.

A segunda ação foi identificar o que realmente é importante para minha rotina diária. Eu dividi o mapa mental em duas partes: pessoal e profissional. Mais uma vez eu usei alguma coisa de técnica ágil e não me preocupei em fazer um backlog grande de atividades que eu penso que são importantes. Só listei as que eu tenho feito normalmente e deixei de lado as que eu gostaria de fazer. Uma lista grande de coisas a fazer também traz frustração e te leva a procrastinar.

A terceira ação foi organizar isso numa agenda. Estou usando dois recursos para me ajudar nessa organização:
  1. Como uso o Ubuntu, instalei o KAlarm que é muito bom para isso.Vale dar uma olhada nos recursos dele.
  2. O organizador pessoal do meu celular, que está sempre comigo.
As tarefas que tenho que fazer quando estou na frente do computador, eu lançei no KAlarm. As outras, no celular. E não me preocupo em manter tudo sincronizado, bonitinho, não. Isso gera mais trabalho e o objetivo é simplificar. Eu uso à vontade o recurso de compromissos que têm repetição.

Alguns itens parecem bobos, mas se eu estabeleci um horário de trabalho, preciso que meu celular desperte para "começar a trabalhar" e "voltar do almoço", por exemplo.

A quarta ação, que deve estar sempre presente, é a avaliação de o que você estabeleceu de atividade, está de acordo com sua realidade. Por exemplo, eu achei que demoraria 10 minutos para ler os emails da lista X, mas vi que, com objetividade, não passo de 5. Esse ajuste é preciso para ter mais objetividade nas atividades. Aqui, sigo um princípio do Pomodoro e me premio com mais uma tarefa cumprida rapidinho.

Existem algumas coisas que podem nos ajudar ou atrapalhar a vencer a procrastinação.
O Gmail, por exemplo. Ele pode ser seu aliado ou seu inimigo.
Inimigo se você deixá-lo o tempo todo aberto na caixa de entrada. Aliado, se você conseguir configurar filtros eficientes para identificar com labels suas mensagens. Isso sim é GTD! :-)

Afinal, "a diferença entre o remédio e o veneno é a dose".

Eu sofria, como o Jeveaux, do mal da caixa de entrada e do Google Reader e precisava fazer um esforço tremendo para não consultá-los fora de hora. Bem, me libertei desse mal. Como? Deixando o Gmail e o Google Reader fechados. Simples assim. ;-)
Eu não fiquei viciado no Twitter, portanto ele não chegou a ser um problema para mim. Aliás, nem gosto muito dele.
E o instant messenger? Simples, também: não fico nele o dia todo. Eu uso o Pidgin que tem um recurso legal de aviso. Você pode desabilitar os avisos de gente que entra ou sai, mas configurar para ele te avisar quando determinada pessoa entra. Com isso, eu não preciso ficar recebendo os avisos de todo mundo que entra, nem abrindo a lista para ver se fulano está online. Sempre que quero falar com alguém, vejo se a pessoa está online. Se não estiver, configuro o Pidgin para me avisar quando ela logar, ou mando um email. ;-)

Eu descobri que, assim como o celular tem um botão liga/desliga, essas ferramentas também têm. Sério, têm sim! E isso ajuda pra caramba!

Para acompanhar o tempo que levo nas tarefas pequenas, fruto da quebrada de tarefas grandes, uso o TaskCoach. Simples e objetivo. Novamente, uma pitada de técnica ágil aqui.

A quinta ação, a mais difícil de todas, é deixar-se administrar pelos avisos da agenda de compromissos. Aí sim você estará submentendo-se ao seu planejamento. Mas, relaxe. Você deve ser o dono da sua rotina. Se foi você quem a estabeleceu, nada mais lógico do que seguí-la. Faça isso de modo consciente, focando nos resultados.

E veja, o que vai te ajudar a fazer o que precisa, não são os programinhas de controle, mas sua atitude.
Seja seu melhor amigo!

14 de outubro de 2009

[vim] Substituir com parte do que achou

Apesar de o vim ser o editor com o qual escrevo meus programas, eu não o domino como deveria.

Mesmo assim, sempre encontro recursos que me ajudam bastante.

Esses dias eu estava com um arquivo de texto que tinha números e strings entre aspas simples e eu precisava deixar os números sem as aspas simples. As strings deveriam continuar como estavam.

Fazer na mão era muito trabalhoso. O arquivo tinha quase 1000 linhas.

Daí eu resolvi dar uma lidinha no manual online e eis que encontrei a solução!

O comando para substituir (o replace dos editores visuais) é o :substitute ou, simplesmente, :s.

Para resolver meu problema o comando completo é
:%s/'\(\d\+\)'/\1/g

Ele procura no arquivo inteiro (o % diz isso pro comando) uma quantidade qualquer de algarismos (o \d\+) com uma aspa simples antes e outra depois e substitui isso tudo (os algarismos e as aspas) apenas pelos algarismos encontrados (o \1).

A mágica aqui está em colocar o que eu quero preservar (os algarismos encontrados) entre parênteses e usar esse pattern como conteúdo para a substituição (o \1), quantas vezes houver em cada linha (o g no final do comando).

O arquivo que eu tinha era mais ou menos assim (a diferença era a quantidade de linhas, como citei acima):
'João', '123', 'M'
'Maria', '7', 'F'
'Fernando', '58', 'M'

e ficou assim:
'João', 123, 'M'
'Maria', 7, 'F'
'Fernando', 58, 'M'

Faz uns testes aí e veja como é poderoso!

8 de outubro de 2009

O CIO não decide mais sozinho

Hoje eu li duas reportagens que chamaram minha atenção sobre algumas mudanças que vemos na área de TI.

Uma delas é: "Executivos de negócio influenciam uso de TI em 55% das empresas locais".

Note que essa notícia tem a ver com a mudança da visão existente a respeito de TI dentro de uma organização. Se a decisão é compartilhada com as outras áreas da empresa, existe menos chance de aprovar projetos apenas por qualidades técnicas.

Pode ser uma tremenda desvantagem. Eu já trabalhei em uma grande empresa que a área de compras era responsável por "bater o martelo" na decisão de qual software comprar, levando em conta o preço. Isso é uma armadilha!

Por outro lado, também pode ser uma grande oportunidade, pois aumenta a chance de a escolha ser feita com base no ROI (retorno sobre o investimento), como a própria matéria comenta. Sem dúvida alguma, essa forma de enxergar os investimentos em TI dá força às contratações de escopo aberto.

De tabela, acaba ajudando as contratações de software livre também.

Complementando essa matéria dêem uma lida sobre a mudança de plataforma na Bolsa de Valores de Londres. A despeito das discussões quase religiosas entre os defensores de Windows e os de Linux, perceba a mudança na abordagem tecnológica e de quem partiu a decisão de fazer a mudança. Não foi do CIO!

Há algum tempo eu li uma matéria que falava sobre a necessidade que a TI tem de mudar de centro de custo para centro de lucro.

Se temos uma proposta de trabalho franco e aberto, essa pode ser uma ótima notícia para nós de TI. No entanto, exige uma mudança para uma postura que equilibra o lado comercial com o técnico.

Alguém aí já pensou em mudar para a área comercial? ;-)

7 de outubro de 2009

Senha forte ou fraca?

Durante esses dias tenho lido a respeito das 10 mil senhas do Hotmail que foram publicadas na internet.

Um pesquisador resolveu investigar e descobriu que a maioria dessas senhas não eram muito seguras.

Daí eu me lembrei que sempre quando fazemos o cadastro num serviço de email sério, existe aquele aviso dizendo que a senha é forte (segura) ou fraca (não segura).

Afinal, pra quê existe aquele aviso se a gente sempre coloca a senha que dá na cabeça?

Usar um gerador de senha não é lá muito prático, porque a combinação de caracteres gerados nem sempre é fácil de lembrar.

Daí eu resolvi recorrer a dois serviços que fazem a validação de senha, dizendo se ela é forte ou fraca.

Um é o Strength Test e o outro é o Javascript Password Strength Meter.

Que tal começar a validar suas senhas para não ser pego de surpresa?

6 de outubro de 2009

TDD e Expressões Regulares

Estou migrando para Django um site que mantenho e ontem eu resolvi encarar uma lógica complexa em Python: validação das partes de uma passagem bíblica.

Saber se "genesis 1", "genesis 1:5-7" ou "mateus 20:8,9-20" são válidas não é tão simples quanto parece a princípio.

Vamos analisar essa situação?

As passagens bíblicas podem ser escritas de várias formas. Seguem alguns exemplos:
  1. Apenas nomes de livros: "genesis"
  2. Nomes de livros e números de capítulos: "genesis 3"
  3. Nomes de livros, números de capítulos e de versículos: "genesis 3:8"
  4. Nomes de livros e números iniciais e finais de capítulos: "genesis 3-7" (do capítulo 3 ao 7)
  5. Nomes de livros e números de capítulos não sequenciais: "genesis 3,7" (capítulos 3 e 7 apenas)
  6. Nomes de livros, números de capítulos e de versículos iniciais e finais: "genesis 3:1-10" (no capitulo 3, versículos de 1 ao 10)
  7. Nomes de livros, números de capítulos e de versículos não sequenciais: "genesis 3:1,10" (no capitulo 3, versículos e 1 e 10 apenas)
  8. Nomes de livros, números de capítulos e de versículos iniciais e números de capítulos e de versículos finais: "genesis 1:10-2:6" (do capítulo 1, versículo 10 até o capítulo 2, versículo 6)

Há um complicador nos livros com nome composto. Exemplo, "I Reis" e "II João", que eu escolhi permitir escrever o algarismo em romanos (I e II) ou em indo-arábico (1 e 2). Assim, "II João" e "2 João" são nomes válidos.

Podemos ter passagens simples e outras mais complexas, que são encadeadas.

A lógica que roda hoje no site é em PHP (o site todo é em PHP atualmente) e não usa expressões regulares para validar a estrutura da passagem bíblica. Em python eu resolvi fazer o primeiro crivo de validação usando regexp para tentar acelerar o processo.

Caso a passagem seja aceita pelas regexps, vou verificar se os nomes dos livros, capítulos e versículos informados são válidos. Só aí eu acesso o BD, o que é mais demorado. Ou seja, o mais barato antes.

Com tantos cenários de teste para essa rotina, nada melhor do que aplicar TDD. O jeito mais simples de fazer isso em Python é usando os doctests e foi justamente o que eu escolhi. Uma característica dessa rotina que valoriza bastante o TDD é o fato de eu não ter o hábito de usar expressões regulares e, por isso, não tenho muita segurança com elas. Qualquer mexidinha nas regexp pode mudar completamente seu significado. Usar TDD aqui me deu bastante segurança de mexer à vontade tendo a garantia de não quebrar o meu código.

Essa foi mais uma vez que o TDD mostrou-se poderoso. Aliás, ele se mostrou como uma ferramenta que me deu poder de trabalhar me preocupando apenas com meu código e esquecendo o medo de fazer ajustes em algo tão frágil para mim. Fiquei corajoso e enfrentei as expressões regulares de "igual pra igual". ;-)

Claro que o TDD é sempre útil, mas tem casos que ele mostra muito sua força, como nesse caso. Há outros tipos de rotina que você recomendaria fortemente o uso de TDD?