Garoto de programa

Nossa, o blog está agitado nos últimos dias.

O texto anterior feito pela Mog gerou uma avalanche de comentários! E legal que são vários assuntos acontecendo ao mesmo tempo, graças à novidade de poder responder a um comentário específico (basta clicar em “Responder”, ao lado da data). Como a resposta aparece logo após o comentário e não lá no final, fica fácil de acompanhar o bate-papo. Quer participar também? Vai lá agora e também assine o feed de comentários!

O que mais gostei foi da sinceridade e conteúdo de muitos dos comentários. Tomei um puxão de orelha (aliás, vários) que estava precisando, afinal, o blog acabou ficando meio de lado nos últimos meses.

Mas em vez de desculpas e lamentações, prefiro acatar a vontade popular e… escrever. Você pediu, agora aguenta! :)

Então, vamos falar de nerdices. Hoje lancei uma versão nova do programinha AdiumBook, que serve para organizar seus contatos no Mac. Mas esqueça o programa, ele não é importante agora. O que quero é falar sobre desenvolvimento de software. Olha só:

billable-adiumbook

Clique na foto para aumentar

Dica: Faz o seguinte, abra essa imagem em uma nova janela e deixe à vista, pois todo o texto falará sobre ela. Assim vai ficar mais fácil de entender.

Agora vem uns quatro parágrafos bem chatos, mas aguente firme que é necessário para acompanhar o resto do texto. Eu prometo que depois melhora, tá?

Esta é uma foto do programa Billable, que uso para contabilizar as horas que gasto em cada tarefa durante o trabalho. Ele tem um relojinho que eu disparo quando começo e depois paro no final. No lado esquerdo estão os projetos e na tabelinha estão as tarefas. As linhas em azul estão selecionadas. Então o que estamos vendo são as tarefas do projeto AdiumBook.

Dentro da tabela, selecionei apenas as tarefas mais recentes deste projeto, que mostram todo o trabalho feito nesta versão nova lançada hoje.

Aquele total em reais no canto direito da tabela indica o valor de cada tarefa. Mas eu coloquei o valor/hora como R$ 1,00 para ficar fácil ver a quantidade de horas de cada tarefa. Então um valor de R$ 2,50 na verdade indica que a tarefa demorou duas horas e meia para ficar pronta.

Eu também sempre arredondo o tempo de cada tarefa, usando intervalos de no mínimo 15 minutos. Assim fica melhor de ter uma visão geral das coisas, valores muito picadinhos apenas confundem.

Bem, mas então tá. Agora você já sabe achar as informações ali :)

Eu gosto de sempre analisar os dados sobre as coisas que faço, para avaliar se tudo correu bem e para poder tomar decisões para o futuro. Dessa vez quero fazer a análise junto com vocês, para mostrar um pouco como é essa rotina de ser programador e lançar programas.

Primeiro vamos às datas. A versão anterior do AdiumBook (1.4) foi lançada em 29 de julho de 2008. Tá lá, na primeira linha da tabela, que não está selecionada. Esse lançamento tomou quase oito horas para ficar pronto! Vejamos quais tarefas foram feitas neste dia:

  • Testes no iBook (Tiger)
  • Atualização SVN
  • DMG feito
  • site atualizado
  • anúncio nos sites (Xtras, Apple, ScriptBuilders)
  • anúncio no blog do aurélio
  • anúncio no blog aureliosoft

Nada de substancial, certo? Eu nunca diria que essas tarefinhas iriam levar oito horas… Mas cada uma tem vários passos a seguir e os famosos “5 minutinhos” acabam virando horas.

A Mog, depois de um tempo comigo, instituiu a regra do “vezes dois” para os meus prazos. Cada vez que eu digo algo como “só vou levar mais meia hora para terminar esse texto do blog”, ela responde: “vezes dois”. E não dá outra: acabo levando pelo menos mais uma hora para terminar. Sabe o que é? Ou eu sou otimista demais nos meus prazos, ou o universo conspira para sempre dar alguma coisa errada no meio do caminho ;)

O lançamento de hoje foi mais rápido, demorou apenas quatro horas. Já estou mais familiarizado com o SVN, por preguiça não fiz os testes no Tiger (sistema anterior, já antiquado) e o anúncio no blog é este texto que estou escrevendo agora, mas dessa vez contabilizando no projeto “Blog”. Vejamos, já deu uma hora e oito minutos até aqui. Será que conseguirei terminar em menos de três horas? Duvido :)

Primeira lição que os dados nos ensinam: leva tempo!

O lançamento de uma versão nova de um programa não é feito em 15 minutos, nem em uma hora. É um processo trabalhoso e desgastante, onde você deve ter atenção máxima para não errar. Concentração é tudo.

E cansa mesmo, mental e fisicamente. Hoje, logo que terminei o lançamento do AdiumBook fui tomar um banho para relaxar, pois estava acabado. O bom é que no banho tive a ideia de um livro sobre desenvolvimento de software, mas isso eu deixo para falar outro dia… :)

Voltando à fotinho e à tabela, a segunda linha mostra que no dia seguinte ao lançamento da versão anterior, gastei somente uma hora e pouco fazendo faxina (todos = “to do”s, do inglês, a fazer) e cadastrando o programa no site Freshmeat. Nada glorioso, trabalho de peão.

Só fui mexer no programa novamente um mês depois, em agosto, que levei uma hora para arrumar alguns probleminhas que apareceram ao instalar a versão nova do Adium (1.3).

Em setembro mexi mais uma única vez para resolver outro problema que os usuários relataram, que deu muito trabalho levando mais de cinco horas para resolver. E depois mais nada, esqueci do programa por vários meses.

Eu gosto assim. Passar um bom tempo sem mexer no programa, que quando eu volto, a disposição é grande. Se mexer todo dia um pouquinho enche o saco rapidinho.

Segunda lição:
Relaxe! Só mexa no programa quando tiver tempo e disposição.

Vieram as festas de fim de ano, a praia, o Carnaval, e nada de vontade de mexer no programa. Porém, os e-mails de usuários começaram a acumular e comecei a ficar incomodado. Geralmente é neste momento que decido que é “hora de fazer alguma coisa”.

Ei, txt2tags, estou olhando pra você.

Depois que terminei as tarefas mais importantes do UmPortugues, me programei para “dar um jeito” no AdiumBook. Eu sabia que essa pegada iria resultar em uma versão nova, pois haviam muitas pendências a serem resolvidas. Então era preciso de bastante tempo reservado para poder mergulhar no código.

Aí começou o trabalho de verdade, no dia sete deste mês, sábado passado, num final de semana que excepcionalmente eu não iria ver a Mog. Veja na foto as cinco últimas linhas selecionadas na tabela, que mostram cinco dias seguidos de trabalho no programa, de sábado até hoje.

Eu preciso dessa imersão quando tenho algo maior a fazer. Trabalhar meia hora por dia em uma coisa não dá certo. Eu levo esse tempo somente para me concentrar 100% e “mergulhar” no código. Sabe aquele estado de atenção em que você não sente fome nem vontade de ir ao banheiro? É isso :)

Terceira lição:
Prepare-se para trabalhar pesado quando for finalizar um programa para lançamento de versão nova.

Mas tive alguns problemas não planejados.

Dias atrás instalei o Safari 4 Beta e gostei que ele está mais rápido e consome menos memória (nem preciso mais encerrá-lo diariamente!). Porém, ele quebrou o Xcode, que é o programa que uso para mexer no AdiumBook. Tive que atualizá-lo. Foram horas até os seus malditos 900 e poucos megas serem baixados pela minha conexão barata. Uma baita água fria em quem achava que já ia colocar a mão no código naquele momento.

Com o Xcode atualizado, o próximo que me deu dores de cabeça foi o Sparkle. Ele é um carinha muito bacana que você enfia no teu programa e ele faz a mágica da atualização automática. Funciona assim: a próxima vez que eu lançar uma versão nova do AdiumBook, vai aparecer automaticamente uma janelinha para o usuário, dizendo: “tem uma versão nova desse programa, quer baixar e instalar?” e então ele faz tudo sozinho. É lindo de ver. Mas… Levei horas para fazer ele funcionar. E nem posso xingar o carinha, pois o erro foi meu. A maneira que eu informava a versão do AdiumBook no Xcode estava errada. Arrumei isso e o Sparkle começou a funcionar. Coisas da vida…

sparkle-window

Janelinha do Sparkle atualizando o AdiumBook

Estou há duas horas escrevendo esse texto já. Isso que nem revisei nada ainda. É, vai demorar…

Já que fui forçado (para o bem) a mudar meu esquema de versões, resolvi por o número de revisão do SVN ali também, para ficar igual software de gente grande. A versão de lançamento ficou “1.5 (50)”, ou seja, versão 1.5, revisão 50 do SVN. Mas como eu não ia ficar mudando a revisão do SVN “na mão” a cada alteração, procurei uma maneira de fazer isso automaticamente. Achei um script em Python que deu erro aqui mas consegui arrumar. No fim, todo esse problema acabou deixando o programa mais profissional e ainda pude automatizar a geração do ZIP para lançamento.

Ah é, o ZIP. Antes eu usava o formato DMG (Disk Image) para “empacotar” e distribuir o AdiumBook. Esse tal DMG é um treco que só tem no Mac. É bacana, imagine um arquivo ZIP que quando você abre aparece uma janelinha bonitinha, com desenhos, cores, tudo bem personalizado para o seu programa. Só que o Sparkle tem algumas pegadinhas para usar com o DMG. Então para simplificar as coisas para mim, mudei para o ZIP, que é mais padrão.

adium-dmg

O DMG do Adium é tãaaao bonitinho

Percebeu o tamanho das encrencas não-planejadas que aparecem quando você só quer mexer sossegado no seu programa e nada mais? Recapitulando: baixar e instalar o Xcode, Sparkle com problemas, mudar o esquema de versionamento, script para versão automática, mudar de DMG para ZIP. Por isso ocorre o “vezes dois”, que nesse caso foi um “vezes quatro” pelo menos :)

Quarta lição:
Prepare-se para enfrentar problemas inesperados. O ato de “programar” envolve muito mais do que sentar numa cadeira e digitar códigos. Ah, se não fosse o Google…

Bem, resolvidos estes contratempos, pude finalmente fazer aquilo que gosto: criar códigos. E assim foram corrigidos os bugs e implementadas as funcionalidades novas.

Se você quiser acompanhar “ao vivo” a evolução de um software, assine meu feed no Google Code. Assim você fica sabendo na hora sobre as mudanças mais recentes no AdiumBook, no txt2tags e nas Funções ZZ.

Com tudo pronto, hoje atualizei o texto de ajuda (Help), rodei o programa e testei todos os botões e itens de menu, fiz o ZIP final e mandei para o servidor. Contemplei por alguns segundos o arquivo na tela, mostrando zero downloads. É o nascimento.

Dá uma emoção ao enviar o arquivo, sabia? Uma vez no servidor, seu “filho” vai para o mundo. Ali é o ponto sem retorno, onde você declarou publicamente que fez o seu melhor. Encontrar uma falha logo após enviar o arquivo é motivo de vergonha para três gerações futuras de sua família.

Depois foi aquela novela de atualizar o site do programa, atualizar o arquivo PAD e anunciar a versão nova para os principais sites de download. Vou colar aqui um pedaço do meu arquivo release-checklist.txt, que lista todas as tarefas obrigatórias de cada lançamento (em ordem de execução):

———————-8<——————————
upload ZIP pro Google Code
baixar ZIP e testar
deprecate release anterior no Google Code
atualizar Changelog no Google Code (wiki)
atualizar issues (“closes issue #12″ no Changelog)
fazer Changelog mini (<300) para PAD e sites
screenshot novidades
atualizar site
atualizar appcast.xml (e changelog: 1.5.html)
atualizar PAD file (editar, upload, validate, enviar repositório)
atualizar no Adium Xtras http://www.adiumxtras.com/?a=xtras&xtra_id=2069
atualizar no ScriptBuilders (Upload your Scripts! > Update Existing)
atualizar no VersionTracker (MacUpdate segue, acho)
atualizar no Freshmeat http://freshmeat.net/projects/adiumbook/
atualizar no site da Apple https://adcweb.apple.com/downloads/
atualizar no i use this (textile: listas com * e **)
post blog aureliosoft
post blog aurelio
———————–>8—————————–

Ufa! Pensou que era fácil lançar um programa? :)

Quinta lição:
Codificar é divertido, lançar é estressante. Por isso não compensa fazer muitos lançamentos em um curto período.

De volta à foto, veja que logo abaixo das linhas azuis da tabela, há uma linha mostrando os números totais. Ali no meio é possível ver no item “Time-based” qual foi o tempo total que eu levei para fazer todas as tarefas dessa versão nova do programa: mais de 30 horas.

Pena que faz pouco tempo que eu comecei a contabilizar as horas do AdiumBook, mas como eu apanhei muito lá no início (em 2005) por não saber AppleScript direito, acredito que o total já investido nesse programa passa das 200 horas de trabalho.

Lembrando: o AdiumBook é um programa gratuito.

Se você me perguntar “por quê?“,
eu respondo “porque vale a pena!“.

Related Posts Plugin for WordPress, Blogger...
Publicado em por Aurelio Jargas e arquivado em Nerd com as tags , , , , , , , , , , , , , .

36 respostas a Garoto de programa

  1. Pingback: Novidades no layout do WinAjuda » WinAjuda - Diga adeus à sua tecla F1

  2. Ops, já ia esquecendo. O tempo que levei para escrever e publicar esse texto no blog foi 5:18.

    É, acho que passei um pouquinho das três horas previstas… :)

  3. Fabiano Pires disse:

    Sei como é isso … As vezes quando tô fazendo um post no blog e penso “vai ser rapidinho …”. Quando vou ver, já se passaram 3, as vezes 4 horas entre digitação, diagramação e revisão/correção. Fora as vezes em que a patroa me chama pra algo e eu dou a clássica resposta: “Só 5 minutinhos …” (que viram 15 facinho, facinho …)
    P.S.: Vai dormir, que isso não é hora de estar acordado …

  4. Que trabalhão o_o!
    Mas é incrível como aquele trabalho rapidinho leva horas, e ainda por cima você nem percebe!

    E que raios as encrencas do Sparkle com o DMG, o pato verde sendo arquivado era tão legal :D

  5. jonatas disse:

    Eu tenho uma teoria que na pode ser feito em menos de 10 minutos , e se é para ficar bem feito, precisa de no minimo meia-hora.

  6. Comecei a me preparar para o Exame da OAB, e na mesma hora fui atrás de um time tracking (esses programas/serviços de gerenciamento de tempo). Legal ver que você também usa, embora para finalidade diversa :-) .

    No meu caso, optei por uma solução online, já que uso mais de um PC no dia-a-dia. Adotei o BubbleTimer, simpático, barato e o com o qual eu melhor me identifiquei.

    []‘s!

  7. Vinícius disse:

    Bem legal. Eu pretendo retomar um projeto pessoal que vai virar público assim que estiver usável.

    Para fazer time tracking eu gostei do Project Hamster, um applet pra Gnome.

  8. Ola Aurelio, mandou um otimo post após essa temporada de “sumiço”. Muito legal essa estratégia de organização das tarefas, eu mesmo não consigo programar sem algum tipo de acompanhamento do que tá sendo feito.
    Só um toque ae pro pessoal, quem usa linux existe o GnoTime, não tão intuitivo mas ajuda.
    Abraço!

  9. InFog disse:

    Caramba Aurélio, ótimo texto, eu estou com o GeSpeak (front end para o eSpeak) pronto há algumas semanas e ainda não o lancei =( Esse negócio de lançamento é chatinho mesmo, cria pacote, testa, faz script, testa, “commita” no svn, anuncia o lançamento… E realmente, achar um bug logo após lançar é motivo de vergonha para até a 3ª geração hehehe.
    Eu ia perguntar se tem algo parecido com o Billable para Linux, mas já vi que o pessoal deu umas sugestões =)

    Abraços!

    InFog

  10. LES disse:

    Seu fluxo de trabalho é muito burocrático. Precisa ser refeito.

    E muito dos seus problemas vem desse universo de dependências em que você, o Mac, o Linux e o Unix vivem. Por isso que muita empresa de software se recusa a desenvolver para plataforma *nix. E é por isso que eu gosto tanto de Tcl/Tk, é tudo um pacotinho tclkit, não carece de dependência para quase nada. Quando carece, elas podem ser incluídas no pacote e são bem pequenas.

    Toda essa coisa de SVN, Google Code, Freshmeat, appcast etc. também atrasa muito. Faça do seu jeito, altere o código, SVN pra quê? E, quando estiver pronto, ponha um download novo em alguma página, a maneira Windows de ser, que nunca matou ninguém. Quem quiser vai lá e pega a versão nova, e se algum chato reclamar, mande ele mesmo fazer o programa.

    • LES, há uns 3 ou 4 anos atrás eu concordaria contigo, pois era assim que eu fazia. Eu também torcia o nariz para CVS, SVN e amigos.

      Mas hoje percebo as vantagens de usar SVN e deixar o desenvolvimento público no Google Code. É mais burocrático, porém mudou o meu jeito de programar, para melhor.

      É mais Zen, eu diria. O caos ficou no passado.

    • Enderson disse:

      Concordo que poderia mudar o fluxo, mas só com isso.

      Aurélio, acho que o que você poderia fazer é automatizar estes processos, algo como acontece com o deploy de aplicações web, vc poderia fazer um deploy para o lançamento de suas aplicações.

    • any disse:

      E daí verde, aumentando o leque de atividades?
      Aumentaram muito as propstas de trabalho? :))

      Brincadeiras à parte :) , muita formalidade é ruim, pouca é ruim. Ser muito organizado toma tempo e a produtividade baixa. Ser pouco organizado gera muita perda de tempo tentando se achar ou achar as coisas.

      Acho que maximizar produtividade com qualidade é o alvo. O ideal seria achar o ponto de compromisso ótimo, sempre automatizando tudo que for possível pois nóis umanu herra dimais.

  11. Fábio disse:

    Gostei do texto, vai servir de inspiração e dica pra quando eu voltar a tocar algum projeto.

  12. Bruno disse:

    Muito bom o artigo,

    E… quanto tempo já está desenvolvendo o programa? desde quando?

  13. Piteco disse:

    éé, programa nos olhos dos outros é refresco

  14. Pois é, Aurélio. E acredite, a gente te entende!

  15. E ali no programinha, logo acima do Livro Regex (do piazinho) é o seu novo livro? Sobre Apple Script? Ou me falhou a memória e você já tem algo do gênero? hahaha…

    Perdoe qualquer esquecimento, mas ainda estou trabalhando e só passei por aqui para “espairecer” a cabeça.

    Mas se for, curti a ideia… Vai faltar somente o guia de expressão regular. Falando nisso, alguém tem o guia de expressão regular e queira doar/vender?

    • Isso! Esse livro de AppleScript eu comecei em agosto de 2008, trabalhei 45 horas nele (ah, como é bom anotar tudo!) mas depois tive que parar, pois precisei fazer outras coisas.

      Agora retomei a escrita, espero conseguir terminar logo, pois a fila tá grande :)

  16. Mas então você enganou a gente, já que em novembro de 2008 (foi por aí?), postou aquela página escrevendo sobre qual poderia ser o próximo livro…

    Já tinha algo em mente… apenas foi fazer uma pesquisa de mercado? hahaha

    (Trabalhar até altas hora dá nisso, fica pensando que blog é chat).

  17. Fábio disse:

    Essa figurinha (http://stats.wordpress.com/g.gif?host=aurelio.wordpress.com&rand=0.16421435307711363&blog=192479&v=wpcom&user_id=0&post=739&subd=aurelio&ref=http://aurelio.wordpress.com/) que está “escondida” no canto superior direito, um pouco depois da palavra “PRÓXIMO LIVRO”, é uma pegadinha?
    Acho que já te perguntei isso uma vez.

  18. Akin disse:

    Estava passando por aqui atrás de novidades, e tive a grata surpresa de me deparar com um novo post.
    Valeu Aurélio era disto mesmo que eu estava sentido falta.
    Esse seu texto consegue lidar com um assunto meio chato e especifico, tornando-o legal.
    O final foi perfeito!

  19. wille disse:

    uma vantagem de contabilizar o tempo é saber quanto se deve cobrar por um trabalho. sempre contabilizo menos do que o necessário nos orçamentos que eu faço.

  20. Releasear software é mesmo um saco. Uso o máximo que eu posso de scripts e test units para ajudar, mas sempre é traumático.

    Quando é para Linux e envolve atualizar bibliotecas que vão junto, aí é o capeta…

  21. Olá Aurélio, tudo bem? quanto tempo heim…, seguinte brother, tô precisando falar contigo, me passe por favor o email e/ou celular, pois perdi meu celular e foi junto…
    Grande abraço….

  22. Aurélio, seu sistema operacional é Mac?
    Abraços.

  23. Desfrutando disse:

    Ola quero convidar a todos para conhecer meu blog http://blog.desfrutando.com
    Temas picantes

  24. Luana disse:

    Ola amiguinhos, não deixem de visitar meu blog
    grande abraço a todos!!!

  25. Larissa disse:

    Muito divertido este texto, parabéns.

  26. Sexyshop disse:

    Para se fazer um trabalho excelente leva tempo mesmo.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>