Marco Gomes

Criador da boo-box. Empreendedor dedicado, nerd veterano, interneteiro profissional, cristão aprendiz, fotógrafo amador, marido apaixonado.

Textos marcados como ‘projeto’

Produtividade pra programadores

Algumas semanas atrás o Diego (Tableless) Eis me encaminhou uma cópia do documento sobre Produtividade que o Élcio Ferreira escreveu, onde ele fala sobre montagem de bicicletas, construção de software e qualidade de código.

Veja bem: Eu recebi o documento, de graça, pra escrever sobre ele aqui no blog, não recebi dinheiro e não alterei minha opinião só porque recebi de graça, cada palavra que você lê aqui é sincera e não pode ser comprada. Se você está incomodado com essa atitude, pare de ler o post agora e me xingue por email. É bom que eu saiba quantos leitores meus condenam este tipo de prática.

Ele fala um bocado de coisas que eu, Marco Gomes, já sei, como conceitos da Web 2.0, Padrões Web, AJAX e JSON, isso é praticamente metade do documento. É bom pra introduzir o assunto a quem está completamente fora desde mundo ou nunca trabalhou com conceitos mais modernos da Web.

O que mais valeu a pena, na minha experiência de leitura, foram os capítulos sobre Programação Pragmática, Não Repita a si Mesmo (DRY), Ortogonalidade (Desacoplamento) Tracer Code, Desenvolvimento Orientado a Testes (TDD) e Controle de Versão.

Programação Pragmática[bb] é um conceito/filosofia/mentalidade/religião que vem me conquistando cada vez mais nos últimos dias. Nas palavras do Élcio:

O programador pragmático é, antes de tudo, um inconformado e um otimista. Ele não consegue repetir dezenas de vezes a mesma tarefa sem se perguntar se há uma maneira melhor. Ao mesmo tempo, ele acredita que há maneiras melhores, e que ele pode desenvolver uma.

[...]

O programador pragmático não se contenta em conhecer uma solução, uma linguagem e um jeito de aprender a fazer as coisas.

[...]

Outra atitude do programador pragmático é a responsabilidade. Ele não se contenta em sentar-se em seu cubículo e esperar por tarefas de programação, mas entende que é parte do seu trabalho envolver-se em todo o processo de desenvolvimento.

Significa que ele nunca vai dizer coisas como:

_ Não fiz backup do código, isso é responsabilidade do departamento de infra-estrutura. (Não importa de quem é a culpa, você vai ter que fazer de novo.)

_ Eu imaginei que isso não ia funcionar, mas o cliente quis assim. Ele assinou uma aprovação para o desenvolvimento disso. (Você viu o problema e não disse nada?)

_ O framework que nós compramos não fala com as versões antigas do nosso banco de dados. (Sim, e?)

Isso é só uma pequena amostra, se você se interessou por este pequeno pedaço, compre o PDF completo.

Estes conceitos de programação pragmática e produtividade já foram usados em meu mais novo projeto, a integração boo-box + WeShow, que ainda não foi publicada mas vai entrar no ar em breve. Veja no blog boo-dojo como eu conduzi a implementação da parte client-side do projeto.

Além disso, eu também já escrevi sobre produtividade pra instruir uma equipe que eu coordenava no meu emprego anterior, é um documento bem antigo, mas que contém muita coisa boa.

Saiba mais sobre programação pragmática

Concentre-se no que não muda

O artigo abaixo foi originalmente publicado na revista iMasters número 4, de fevereiro de 2008. O conteúdo da revista está muito bom, entre vários bons textos, tem Luiz Yassuda e Gilberto Jr. Se você gostar desde artigo, compre a revista (se não gostar desculpe, mas compre a revista mesmo assim :)

O mercado da Web fascina, não passa uma semana sem que fiquemos sabendo daquele primo do amigo que ganha quantias absurdas como consultor Java, .Net ou Vignette. Revistas de negócios adoram estampar em suas capas os promissores jovens bilionários da Internet, sempre dando a entender que a fortuna foi feita sem muito esforço.

É óbvio que um mercado tão fascinante atrai muitas pessoas, normalmente gente que navega na Internet e acha que “fazer site” pode ser tão fácil quanto os cursos de banca de jornal anunciam. Inúmeras vezes me perguntaram que tipo de curso ou tecnologia deve-se aprender pra conseguir alcançar o sucesso profissional, que, acreditam eles, é ganhar quantias absurdas sendo consultor.

Java, .Net, Photoshop, Illustrator, Ruby on Rails, Django, Python, tudo isso vai passar e se tornar peça de museu. Cobol, Delphi, Corel, 3D Studio Max já foram minas de ouro nesse mesmo mercado, acredita? Você deve escolher um caminho e focar em seus conceitos; resolver problemas usando lógica[bb], se comunicar usando palavras escritas[bb], expressar idéias através de imagens[bb], despertar sentimentos só com o uso correto das cores[bb], isso é o importante.

Peguemos um caso específico: Programação.

Houve um dia, em que programar era apenas fechar e abrir caminhos em uma placa de circuitos, tudo que você podia fazer era definir o caminho do bit (isso é grego pra mim também, relaxa), hoje, as coisas estão um pouco mais elaboradas, graças a Deus. Atualmente você pode usar enormes coleções de recursos criados por outras pessoas pra ser mais produtivo, é muito comum que projetos Web da atualidade usem mais código de terceiros que do próprio programador; são os famosos frameworks e bibliotecas: jQuery, .Net, Rails, Struts, Prototype entre outros. Quem sabia apenas como fechar e abrir circuitos teve sérios problemas com a mudança da maneira de programar, quem sabia a resolver problemas lógicos simplesmente jogou ferramentas velhas fora e aprendeu a usar essas mais novas.

Abstraindo bastante, programação sempre foi a mesma coisa: Ordenar que um processador execute ações pré-determinadas após a inserção de dados, sejam estes um cartão perfurado com informações demográficas, uma palavra específica numa tela de letras verdes sobre fundo preto, um clique do mouse em uma aplicação do Facebook. Nos anos 70 as pessoas queriam programas fáceis de usar, rápidos, eficientes e baratos, hoje isso não é diferente, acho impossível daqui a 30 anos os usuários pedirem programas caros, lentos, ineficientes e díficeis de usar =)

Esqueça a água, foque-se o leito do rio

John Dewey descreve esse tipo de situação como um homem que pretende atravessar um rio, se ele ficar olhando a água, esperando esta “passar” pra, só depois, atravessar, vai esperar por toda a vida. Nosso personagem deve se concentrar no leito do rio, em atravessar a água pra chegar na outra margem.

É a percepção do que não muda que diferencia o macaco codificador do profissional que resolve problemas. Se você está entrando agora no mercado, pare e reflita: o que você sabe te diferencia do carinha espinhento que acaba de sair do curso técnico mais respeitado da cidade? E se, de repente, a tecnologia que você se especializou for substituída por uma ferramenta Livre mantida por uma comunidade de desenvolvedores apaixonados? Você vai poder “portar” os anos de experiência que já tem, ou vai jogar uma parte da sua vida no lixo e aprender tudo novamente? E daqui a 5 anos quando a tecnologia mudar novamente? Seja inteligente, concentre-se no que não muda.

Nos negócios, não construa trens, transporte pessoas

No início do século XX, as então soberanas empresas do ramo ferroviário entraram em crise financeira irremediável e quebraram, por conta da revolução dos automóveis. O mercado aprendeu: as empresas não deveriam estar no negócio de construir trens e ferrovias, elas deveriam estar no negócio de transportar pessoas. Pessoas sempre vão precisar ser transportadas, seja à cavalo, seja com teletransporte.

Empresas que se restringem a trilhos de trem, charretes, automóveis, gravações de áudio em CDs, World Wide Web, impressões em papel ou qualquer tecnologia; estão condenadas a passar maus bocados quando a mesma for substituída. Admito que tecnologias dificilmente “morrem” de totalmente, graças a isso ainda existem empresas ferroviárias, mas convenhamos que o mercado ferroviário não é do tamanho que costumava ser. Estamos vendo isso acontecer neste momento, com as dores de barriga das gravadoras de CD e a revolução da música sendo distribuída em meio digital.

Use a tecnologia apenas como um meio para seu negócio funcionar. O objetivo é transportar pessoas no seculo IX? Use trens à vapor. No sec. VI use Charretes. Hoje use motores híbridos, porque ser “verde” é a aposta pro futuro. Seu negócio é o mesmo, mudou a maneira de fazer. Se você é responsável por um negócio ou produto, pare e pense: seu negócio depende de uma tecnologia?

Não estou dizendo, de maneira nenhuma, que negócios dependentes de tecnologia são pouco-rentáveis. O petróleo deixou muita gente rica no século passado, a produção de azeite e cerâmica deixou muita gente rica na roma antiga. Porém, se você atrelar seu negócio a uma tecnologia que morra antes da empresa dar o retorno financeiro planejado, você fracassou, e diferente da roma antiga, tecnologias estão nascendo e morrendo muito rapidamente desde a popularização da Internet. Estamos prestes a uma possível nova mudança, com a centralização do tráfego da Internet em redes sociais, os websites como conhecemos hoje podem deixar de existir. Se você confiar seu sucesso na quantidade de sites existentes corre o risco de ficar pra trás quando tudo se unir em poucas (e enormes) redes sociais.

O negócio do Google é organizar a informação produzida pela humanidade, o negócio do boo-box é fazer marketing relevante, em minha opinião ambos são negócios independentes de tecnologia. E o seu negócio, qual é?

Marco Gomes dreads 2006-10 Marco Gomes é nerd; praticante de parkour; tinha espinhas até o meio do ano quando se meteu num tratamento com drogas pesadas; é diretor de tecnologia da boo-box. Escreveu esse texto na noite de uma sexta-feira, sentado no jardim da casa que mora em São Paulo.

Produtividade: Simplicidade e Foco

Em um mundo onde os prazos são curtos, os objetivos ambiciosos e os recursos limitados, como mover o mundo com apenas um ponto de apoio e uma alavanca?

Ao longo de minha experiência como desenvolvedor e líder de equipes de desenvolvimento web, aprendi que o caminho mais fácil pra produtividade é: retirar tudo que não for essencial e se concentrar no objetivo.

Simplicidade

Um artigo do Zen Habits, comentado pelo Sérgio F. Lima, diz que você deve tirar tudo que “for possível”, quando nada mais puder ser retirado, aí sim você pode começar a organizar.

Atingir a simplicidade é menos fácil do que parece, constantemente me pego discutindo sobre o porque a boo-box não deveria ter “aquele recurso tão legal”. O mesmo com qualquer outro projeto, como o Wallpapr e os novos produtos da empresa.

Ser simples sem deixar pedaços faltando é uma habilidade que venho exercitando, tirar tudo é fácil, manter apenas o necessário não. Se perguntar se a ferramenta precisa de um recurso é complicado, porque você, que é especialista na ferramenta sempre tem mais habilidade pra manuseá-la que qualquer outro usuário, logo, teria facilidade pra absorver o novo recurso. Mas pense no novo usuário, que não quer se preocupar em aprender mais uma ferramenta, ele precisa do recurso novo? Interface boa é que não exige que o usuário pense pra utilizá-la.

A simplicidade é importante na produtividade porque é retirando toda a gordura que você consegue reduzir seu projeto de modo que ele caiba no prazo. Costumo dizer que é possível entregar qualquer produto em qualquer tempo, tudo depende de quantas partes você vai retirar pra cumprir o prazo.

Foco

Um dos maiores problemas que encontro em equipes de desenvolvimento é a falta de foco. Explico: O programador pega um projeto, ao invés de começar pelo início ele vai logo fazendo o final (que normalmente é a parte que ele mais gosta), depois, faz uma parte do meio, seguido do final do início, depois faz umas coisinhas de um outro projeto e volta novamente pro projeto inicial, fazendo o final do meio, logo depois faz o início do final… O prazo acaba e o projeto está embolado, com várias partes soltas completamente inúteis e “só falta integrar o componente de controle de usuários com o gerenciamento de produtos usando um Web Service, coisa simples” mas nunca fica pronto.

Se concentrar no trabalho e esquecer o resto do mundo pode ser muito difícil pra algumas pessoas. Instant Messengers, Twitter, excesso de janelas e programas abertos, alertas em tempo real pulando na sua frente e apitando sempre que chega um e-mail ou um contato fica online, podem ser a bomba atômica da sua produtividade. Desarme-os.

Além disso você pode se pegar distraído por excesso de objetos em sua mesa, excesso de poluição visual em seu campo visual, celular apitando, pessoas conversando, barulhos de TV. É possível eliminar todas essas distrações e, mesmo que você jure que elas não atrapalham existem estudos (e minha experiência própria) comprovando que tudo influencia seu subconsciente, alterando seu estado de tranquilidade e melhorando ou piorando seu poder de concentração.

Ferramentas

Tão importante quanto limpar seu ambiente de trabalho é limpar sua mente, tenha sempre em mãos um lugar em que possa despejar qualquer idéia/tarefa que de repente pipoque em sua cabeça. Se livrar das distrações mentais na hora que elas aparecem é importante pra que você não fique se torturando: “tenho que lembrar de pagar a conta de luz, tenho que lembrar de pagar a conta de luz”.

Um dos meios que consegui pra me livrar de distrações mentais é usar a metodologia GTD do David Allen[bb], cujo princípio é exatamente este: Guarde seus lembretes em um sistema confiável na hora que eles aparecem na sua mente, assim seu cérebro fica livre pra produzir sem distrações novamente. Mas esse é apenas um dos meios, e eu nem sigo tão à risca assim. Se quiser saber mais sobre GTD pesquise na Web e compre o livro[bb].

Quando quis passar a guardar minhas tarefas em um sistema, fui testando várias ferramentas diferentes que pudessem se adaptar à metodologia GTD: blocos de papel, Remember The Milk, Things, e-mail, iGTD.

Os blocos de papel são bons se aliados a outras ferramentas, na rua usa o papel e em casa coloca num sistema digital. Se mantidos apenas em blocos de papel suas tarefas podem se perder no tempo, e pode ficar extremamente difícil achar alguma coisa após algumas semanas. Papel não funciona bem no longo prazo.

Ferramentas cheias de recursos como o Remember The Milk, Things e iGTD confundem sua cabeça, não importa se você usa Photoshop, um Home Broker ou Eclipse pra trabalhar, pra coletar e organizar tarefas a interface não pode ser cheia de botoes, modo de visualização em tabela ou lista, organizadas por prioridade, data, nome, projeto… Isso tudo só atrapalha.

Os programas supracitados funcionam muito bem pra várias pessoas, mas pra mim não deu, muita complicação me fazia querer criar a tarefa já com projeto, prioridade, data, tags, isso matava completamente minha produtividade. O recomendado é simplesmente criar uma pequena sentença que te faça lembrar o que fazer “enviar e-mail pro Navarro perguntando como estão os ganhos com a boo-box” pronto, depois eu coloco ela no projeto certo, insiro tags e prioridade, mas na hora em que lembro da tarefa só preciso guardá-la em outro lugar pra ela parar de me atrapalhar, assim volto a pensar no código JavaScript que estou escrevendo.

O melhor meio que encontrei foi o texto puro, sim, arquivinho de texto, simples, com acesso rápido na barra de ferramentas do sistema operacional. São três arquivos segundo o contexto:

  • boo-box: tarefas e projetos relacionados com o não-trabalho :)
  • marcogomes: projetos e tarefas da vida pessoal, Wallpapr, envio de coisas pelo correio, lista de compras, moradia etc.
  • check: todos os artigos que tenho que ler na Web, sempre que encontro um artigo que merece ser lido eu coloco neste arquivo, assim ele incha sem poluir meus outros contextos com artigos, esta é a maior lista.

Quando preciso anotar algo, abro o arquivo certo e anoto, mais tarde organizo.

A sintaxe dos arquivos:

Wallpapr:
- implementar permalink @done
- corrigir, how many *do* you want
- Linkar as imagens pra main photopage

Publicar diff do Zuardi:
- implementar diff http://moourl.com/b4ek8
- anunciar no blog @blog

Projetos são seguidos de dois pontos, tarefas precedidas por hífen, identação significa subprojetos, tags são inseridas no final começando com arrouba. Pronto, simples assim, nada mais.

Pra editar e gerenciar o arquivo estou usando o TaskPaper, que comprei no pacote MacHeist, facilita a edição e manipulação das tarefas sem complicar a interface. Porém, existe versão dele na Web e você, mesmo que não use Mac, pode usar qualquer bom editor de texto.

Nunca se prenda em rédeas, mais importante que ferramentas e metodologias é você se libertar das distrações e conseguir achar seu caminho para a iluminação produtiva =D

O ano em que parei de trabalhar

Arrume um trabalho que você goste e não precisará trabalhar um só dia em sua vida. – Confúcio

Faz 6 meses que eu não levanto com a sensação de: como eu queria dormir mais 10 minutos, desde que larguei meu emprego e resolvi mergulhar de cabeça na boo-box, parei de trabalhar e passei a construir.

Não há mais aquele pensamento miserável de: essa semana eu construi 3 sites de 400 mil reais cada um e meu salário tá na mesma, nunca mais tirei conclusões desmotivantes como: hoje vou trabalhar naquele projeto chatíssimo da loja de roupas do deputado Abomiraldo Fiponso, só porque ele vai colocar a empresa que trabalho dentro da Secretaria Pública de Finanças Secundárias.

Absolutamente tudo que faço tem impacto direto e visível na empresa, cada acerto e cada erro podem ser notados imediatamente. Isso tem sido tão excitante que não há mais “trabalho”, tudo se assemelha mais a um jogo onde cada ação conta diretamente no resultado da partida, só que a partida é minha vida (e de algumas outras pessoas), logo, não posso nem pensar em fracassar :)

Se você ainda experimenta essa sensação de droga, preciso ir trabalhar, reflita um pouco, peça uns dias de folga, ache algo que te satisfaça, não importa se é ser DJ na noitada ou cortar grama[bb]. Se o que te satisfaz é o que você faz atualmente, só que feito de outra maneira, converse com seu chefe sobre como gostaria de trabalhar. É possível ser profissionalmente feliz[bb] mesmo sem ser empreendedor, em minha opinião a chave pra satisfação se chama autonomia de: horário, execução, escolha de projeto.

Esse ano, graças a amigos que nos ajudaram desde o início do projeto boo-box, e às pessoas que acreditaram em nosso potencial pra mudar a maneira como o marketing é feito, consegui parar de trabalhar.

Agora vem a parte que parece encarte de CD:

Os meus agradecimentos pessoais podem ser divididos em partes

Com certeza eu esqueci um monte de gente, desculpaê!

Se 2008 for tão bom quanto 2007, e vai ser, vou surtar com tanta mudança de vida.

Interfaces Modais e Quasimodais

Projeto de Interfaces

Pretendo, a partir de agora, escrever um pouco sobre a construção de interfaces, na minha eterna luta por tornar o mundo um pouco melhor e os computadores mais fáceis de usar… Pra quem não sabe, o boo-box surgiu da pergunta: E se eu pudesse clicar na foto e comprar o All Star que a Gisele Bündchen está usando?

A construção de interfaces é normalmente tomada como frescura por profissionais de outras áreas do desenvolvimento de aplicativos e websites, é comum vermos sistemas extremamente complexos, com mais tabelas no banco de dados que a quantidade de ex-namoradas do programador, processo de produção minuciosamente acompanhado por um profissional de gestão de projetos, seguindo regras ITIL e ISO, mas com interface sofrível e absurdamente não utilizável.

Jef Raskin foi um visionário, fundou o projeto Macintosh e mudou o mundo com suas idéias sobre Interfaces Humanas[bb] (saiba mais na Wikipédia). Um de seus principais pilares era “tarefas simples devem permanecer simples”. Por que ajustar a hora em relógios digitais é tão complexo enquanto em relógios analógicos (de ponteiros), que são mais antigos, é tão fácil? Por que achar aquele doc sobre “A Teoria Cognitiva de Piaget” no seu Windows Explorer é tão mais difícil que achar um documento na sua pasta da faculdade? Tarefas simples devem permanecer simples.

Interfaces Modais facilitam o erro

Interfaces Modais têm seu comportamento alterado de acordo com um comando do usuário. Um bom exemplo é a tecla Caps Lock, você ativa ela sem querer, ou se esquece que ativou, E DE REPENTE SEU TEXTO COMEÇA A GRITAR COM O LEITOR. Teria evitado várias brigas no MSN caso isso pudesse ser deligado. O maior problema é que os usuários esquecem que mudaram o modo da interface e ela passa a se comportar de maneira inesperada. Tenho um amigo progamador que arranca a tecla “Power” de todos os teclados que usa, pra não desligar o computador por engano.

Interfaces Quasimodais dificultam o erro

A solução proposta por Raskin para Interface Modal era a Quasimodal, quasi em grego significa (adivinhe?) quase. Ou seja, interfaces “perto de serem modais”.

Uma interface quasimodal exige que o usuário ativamente mantenha o modo ativado, um bom exemplo é a tecla Shift, eu duvido que alguém tenha “gritado” com seus leitores por “esquecer que estava com o dedo no Shift”. Outro exemplo são os microfones de aviões, aeroportos ou lojas de departamento, caso a ativação seja simplesmente pressionando um botão, podem ocorrer situações em que o microfone fica transmitindo conversas inapropriadas. Se a ativação for pressionando constantemente um botão, esses erros desaparecem, ninguém vai xingar o chefe enquanto estiver pressionando o botão de “transmitindo”.

Outro exemplo de erro em interfaces modais são as janelas de monólogo, famosos alertas usados em websites e programas de desktop, uma janela com uma frase qualquer e somente uma opção: o botão Ok. Quantas vezes eu digitei caracteres insanamente, nervoso por meu “teclado ter parado de funcionar ou o computador estar travado” quando, na verdade, havia um alerta escondido embaixo de alguma janela ou perdido no segundo monitor (quando estou usando dois).

JavaScript Alert
Alerta “monólogo”.

A solução, segundo Raskin, são mensagens semitransparentes, que desaparecem após alguma ação do usuário, como movimentar o mouse ou apertar qualquer tecla. Somado a isso podemos ter um log das mensagens, caso o usuário perca a mensagem pode olhar no log e verificar quais foram os avisos que recebeu. Essa solução resolve o problema do falso travamento e melhora a usabilidade, pois você não precisa clicar no inútil “Ok”.

Aviso semitransparente da boo-box
Aviso semitransparente após o envio de e-mail no boo-box

capa de The Human Interface

Você pode conferir as idéias de Jef Raskin no livro “The Humane Interface”[bb], de 2000, onde ele destrincha, com certo humor, os erros das interfaces computacionais que estamos acostumados a usar e propõe boas soluções, mostrando que nem sempre “manter a solução que já vem sendo utilizada” é a solução mais inteligente para um problema.

Além do livro confira também o blog da Humanized, a empresa de Aza Raskin, o filho do gênio, onde ele dá continuidade ao trabalho do pai, que morreu em 2005.

Um bom exemplo de interface que leva em consideração as idéias de Jef e Aza Raskin é o Songza.com (via Cairo Gomes). Projetado pelo próprio Aza, é um sistema que busca músicas pra serem ouvidas facilmente, pegando videos do YouTube e tocando apenas o áudio, preste atenção na facilidade e fluidez de uso da aplicação.