Marco Gomes

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

Textos na categoria ‘desenvolvimento e programação’

Meu projeto vale a pena?

Generalizando ainda mais, você pode se perguntar:

Devo continuar tentando resolver este problema desta maneira?

É muito comum que desenvolvedores passem batido por esta questão. O piores programadores acham que a primeira abordagem que encontram é a única maneira de resolver um problema.

Se você já se fez alguma das perguntas acima, ótimo, não sei se há resposta definitiva, mas vou mostrar como eu me respondo.

Estabeleça um prazo e trabalhe com toda a sua energia até lá, depois faça uma estimativa da distância que se encontra do objetivo final, e se vale a pena continuar trabalhando no projeto.

Prazo claro e inadiável

Durante o desenvolvimento dos meus projetos de uma madrugada (insôniaware), eu seto uma meta: 8 am vou parar de trabalhar neste projeto. Não importa o que estará pronto, eu vou parar. Se houver algo funcional, vai pro ar, se não é útil ainda, vai ter seu desenvolvimento interrompido por algumas horas pra que eu reflita um pouco.

Você pode estabelecer um limite de um mês pra tocar profissionalmente um projeto pessoal[bb], ou uma semana trabalhando diariamente com o futuro sócio. O prazo não precisa ser 8 am e a madrugada não é o único período produtivo do dia :)

Não empurre com a barriga

A maior importância desse prazo é estabelecer um momento exclusivo de reflexão, ele vai evitar que você vá “empurrando com a barriga”.

Empurrar com a barriga, porque já estava assim, fui fazendo e quando vi já estava todo enrolado são situações que sempre me deixaram frustrado. O artigo de Programação Orientada a Gambiarras (P.O.G.) da Desciclopédia define essa situação como Faca nos dentes – O famoso Vai fazendo ai!.

Definir um prazo inadiável foi a maneira que encontrei pra não deixar meus projetos saírem do controle.

Getting Real

Projetos como o Wallpapr, Busica, Wallpapr for iPhone e Webriga (que fiz com o @mauricio) eram funcionais já nessa primeira parada obrigatória e foram pro ar, com bugs, mas foram.

protótipo da boo-box, ImageDolly e AdBird não estavam funcionais neste primeiro checkpoint, o trabalho neles foi interrompido pela manhã (lembro como se fosse hoje) e era o momento de fazer uma reflexão se o projeto realmente valia a pena, e se aquela era a melhor maneira de resolver o problema.

Como você pode imaginar, tenho alguns outros projetos que nunca foram continuados, achei que não valiam a pena, ou que existiam outras maneiras de abordar o problema. Alguns ainda estão adormecidos aqui na pasta /labs do MacBook[bb] :)

Wallpapr para iPhone e iPod Touch

http://marcogomes.com/wallpapr/iphone

Fiz uma versão para iPod Touch[bb] e iPhone[bb] do Wallpapr, o buscador de papéis de parede legais (também criado por mim).

A aplicação é simples, você abre a URL acima, escolhe se quer fazer uma busca ou simplesmente ver alguns papeis de parede legais aleatórios, a listagem aparece na tela, você escolhe uma imagem, salva no seu aparelho e depois configura como wallpaper.

search result screen - Wallpapr for iPhone  

Se você não tem um iPhone ou iPod Touch, pode abrir o Wallpaper para iPhone com o Safari do seu computador, funciona perfeitamente. Se você não tem Safari instalado pode tentar com Firefox, mas talvez alguns elementos não apareçam direito.

Durante a Campus Party 2009 a rádio Metropolitana FM sorteou um iPod Touch, eu ganhei, foi esse prêmio que me incentivou a desenvolver a versão mobile do Wallpapr.

Estabeleci um tempo limite de uma tarde, comecei 14:10, 18:00 subi a primeira versão publicável. Usei o framework iui, de Joe Hewitt para criar a interface específica pra iPhone/iTouch, usei também jQuery e Flickr API, que já estavam na versão desktop do buscador.

Organizando informação no tempo e no espaço

O objetivo de uma interface é auxiliar o usuário a completar algum trabalho. Pra que o trabalho seja executado, a interface deve apresentar informação, normalmente na forma de dados, ferramentas e elementos de interação. Parte do trabalho do designer de interfaces é organizar a informação que será apresentada ao usuário.

Informação pode ser posicionada no espaço ou colocada em fila no tempo.

Organizando informação no tempo

Painel de preferências do aplicativo Mail.app Nas telas de definição de preferências de aplicativos do Mac OS X[bb], a informação é organizada no tempo.

No aplicativo Mail, você pode definir suas preferências de SPAM em uma tela, e, em outra tela, define as preferências de tamanho e tipo de letra pra escrever as mensagens.

Os conjuntos de preferências são agrupados por similaridade em telas que são divididas no tempo, e você precisa trocar de tela (clicando) pra ver as outras preferências. Caso o designer preferisse, todas as preferências poderiam estar na mesma tela, organizadas no espaço.

Ao organizar a informação numa fila temporal o designer pode explicar melhor o que está acontecendo, facilita a interação do usuário que não precisa lidar com vários elementos de interface numa mesma tela, mas a tarefa vai levar mais tempo pra ser executada.

Organizar informação no tempo é recomendado em tarefas não repetitivas, que não podem exigir um “treinamento” do usuário, como processos de instalação de software (wizards), configuração de aplicativos, criação de documentos que sigam um modelo rígido.

Organizando informação no espaço

Tela de edição de post no aplicativo Blogo Na tela de edição de post do aplicativo Blogo, da Brain Juice, a informação é organizada no espaço.

Quando o usuário cria ou edita um post, toda a informação que ele precisa inserir está organizada no espaço de uma única tela. Caso o designer preferisse, o processo de postagem poderia ser um wizard, que primeiro te perguntaria o título do post, numa segunda tela perguntaria o texto do post, na terceira tela pediria as tags, e assim por diante, até conseguir todas as informações para criar um post completo.

Ao organizar a informação no espaço o designer permite que usuários terminem a tarefa mais rapidamente e sem exigir uma ordem correta para interação com elementos, diminuindo a sensação de estar fazendo uma tarefa repetitiva.

Organizar a informação no espaco é recomendado em tarefas repetitivas, que precisem ser completadas rapidamente e permitam uma curva de aprendizado para usar a interface, como criação de “tarefas” em aplicativos de controle de projetos, criação de posts em blogs, inserção de indivíduos em agendas telefônicas, criação de e-mails.

fikdik rsrsrs

Quando projetar suas interfaces, julgue com cuidado que tipo de informação precisa estar organizada no tempo e no espaço, uma falha neste planejamento pode afastar usuários da sua aplicação.

Para saber mais, veja Learning from “bad” UI.

Campanha: Programar é grátis!

Se você quer ser um desenvolvedor de aplicativos para Internet, webdesigner, programador, analista de sistemas web, qualquer nome que seja, lembre-se: Programar é grátis!

Você não pode esperar arrumar um estágio, ou emprego, que te ensine (de mão beijada) a ser um bom desenvolvedor. Um bom desenvolvedor se cria sozinho, nas madrugadas selvagens dos canais de IRC e grupos de e-mail.

Explico.

Como Diretor de Tecnologia da boo-box, enfrento a nada fácil tarefa de formar um time com os melhores desenvolvedores, os ninjas da boo-box. O processo de seleção é contínuo, e a maior parte das vezes me deparo com e-mails desanimadores, abaixo alguns exemplos reais, e o que pensei após ler:

Envio-lhes um pseudocodigo feito no 1º semestre da faculdade.

Que eu saiba, pseudocódigo não roda em nenhum computador. Bunda mole.

Tanto em PHP quanto em Java Script só oque eu vi na faculdade , mais nada que eu não consiga aprender , até porque a base eu ja tive na faculdade.

Pra começar: JavaScript[bb] é escrito junto, e se você teve a base na faculdade por que não gastou umas horinhas aprendendo “o restante” em casa? Bunda mole.

Coloquei somente 2 exemplos que consegui achar, pois meus códigos na Bolsa estão restritos.

Seu trabalho é supersecreto? Então contribua pra um projeto de Software Livre ou faça um aplicativo em seu tempo livre. Bunda mole.

Não fiz trabalhos orientados a objeto ainda, tenho muita vontade de trabalhar com orientaçao a objetos.

Tem muita vontade? Muita mesmo? Nossa, e está esperando mudar de emprego pra aprender né? Bunda mole.

Se você já usou argumentos semelhantes aos exemplos acima, vou te revelar uma coisa: Você pode mudar sua vida, e até mudar o mundo, com o mesmo equipamento que usa pra ficar o dia inteiro no orkut trocando recadinhos com as peguetes, sério!

Listinha da alegria pra quem não lê parágrafos:

  1. Consiga um computador conectado na Internet, serve o que está usando pra ler este texto, ou qualquer outro, com qualquer sistema operacional, pode ser até um netbook como o EEE PC[bb].
  2. Crie uma conta no Google App Engine e baixe o SDK.
  3. Prepare-se pra usar intensamente um serviço de buscas e uma documentação de Python.
  4. Use bibliotecas e códigos de terceiros no início, comece com humildade e vá se aprofundando com o tempo.
  5. Invista algumas madrugadas desenvolvendo aplicativos que funcionem de verdade, nem precisam ser inéditos, comece com sistemas de blog, chat, agregadores de feed…

Garanto que seguindo os passos acima você vai poder aprender muito mais sobre programação pra Internet do que qualquer graduação em Sistemas de Informação vai conseguir te ensinar.

E não precisa ser apenas com Google App Engine! Embrenhe-se no Ruby[bb], PHP[bb], JavaScript[bb], HTML[bb], Flash[bb], faça uns layouts no Photoshop, escreva um blog, melhore verbetes na Wikipédia, contribua pra humanidade de alguma maneira :)

E se você for realmente ousado, vai construir o site da empresa do seu tio mesmo sem saber como fazer, cobrará R$: 500,00 e usará uma parte disso pra melhorar seu computador ou conexão com a Internet. Foi assim que eu comecei, e a maior parte dos bons desenvolvedores de hoje também fez isso 4, 8, 10 anos atrás.

Eu sei que um computador conectado na Internet não é gratuito, tem custos, normalmente altos, o nome da campanha é “Programar é grátis” só pra causar impacto :)

Quando for mandar um e-mail tentando uma vaga pra ser desenvolvedor, escreva algo parecido com a mensagem abaixo, que também é real:

Marco não tenho muita experiência, estou buscando ela através de um estágio. Estou construindo um site e fiz um sistema de controle de gastos pessoais em PHP/MySQL. Eu adicionei um dos códigos no pastie.org. Abaixo segue o link para o arquivo.

O texto acima me deu muito mais confiança no candidato que os exemplos bunda mole anteriores, este candidato não tinha experiência, e sabendo disso, estava construindo um sistema simples em PHP e MySQL pra ele mesmo usar, é assim que um ninja age.

Parabéns aos ninjas em atividade Mauricio Maia, Dirceu Pauka, Samuel Prado e Fernando Mafra ( @fmafra ). Eles são parte do time que faz tudo a boo-box continuar rodando, sempre trazendo inovação, projetando novos produtos inclusive em seu tempo livre. Porque um ninja nunca baixa a guarda emoticon ninja

[update 2008-11-17] Para ler um argumento a favor de cursos e conhecimento teórico antes do conhecimento prático, veja o comentário do Ricardo, aqui mesmo neste texto. Eu discordo do que ele diz, mas você deve ler pra julgar por si mesmo :)

AdBird – Faça anuncios no Twitter

Use o AdBird e faça anúncios de um RSS na sua conta do Twitter. Aproveite melhor o potencial da sua influência online e divulgue links de conteúdo relevante pra você. É um serviço que eu fiz nas últimas madrugadas.

comfas//

  1. Abra o AdBird, logue com sua conta Google e insira um endereço de RSS, usuário e senha do Twitter. O AdBird não tem acesso a sua senha do Google, pode ficar tranquilo :)
  2. Diga quantos Updates novos o AdBird deve esperar que você poste até enviar um anúncio

Periodicamente o /estagiario, que é o bot do AdBird, vai verificar se você já enviou novos Updates, caso você já tenha atingido o limite que configurou, o /estagiario vai postar no seu Twitter um link do RSS que você escolheu, e esperar até que você envie novos Updates pra postar novamente. A cada N Updates seus, ele vai enviar um link do RSS. Tudo configurado por você.Twitter Search de AdBird, screenshot

No futuro?

Como já pode ser visto na página de configuração, em breve o AdBird será integrado com a boo-shop, postando no Twitter os links de vitrines virtuais da sua loja, com isso a rentabilização vai ficar a apenas dois cliques do Update do Twitter.

Garantias?

É importante avisar que esta aplicação é um experimento e está hospedada no Google App Engine, portanto, não dou nenhum tipo de garantia quanto a seu funcionamento. Como usuário de serviços Google, posso prever que o serviço vai ficar no ar por um bom tempo, além disso, pretendo usar parte do meu tempo livre (que tende a zero) pra manter e melhorar a aplicação, mas não garanto nada :)

codigo fonte do estagiario

Como surgiu?

Várias pessoas se perguntam como anunciar no Twitter (ou monetizar, se você prefere o neologismo) fazendo inclusive previsões pessimitas quanto ao futuro da ferramenta. Eu, como profissional de marketing na Web, também me pergunto isso sempre, e resolvi fazer uma tentativa.

Semana passada comecei a brincar com Python[bb] e Google App Engine, resolvi fazer algo rápido, que pudesse ser útil pra mim e usasse APIs, XML e outras modernidades (já ouvi essa história antes :)

Após algumas madrugadas de esforço e muita pesquisa no Google, cheguei no que vocês podem ver e usar agora :)

Google App Engine Dashboard

Agradeço sugestões de funcionalidades e denúncia de bugs, pode enviar pro meu e-mail.