Archive for January, 2006

Começando um projeto?

Tuesday, January 31st, 2006

Um e-mail recorrente na lista java-br ganhou uma respsota mais longa e decidi postar aqui…

Quando uma equipe vai iniciar um novo projeto, sendo um projeto pequeno,
quais tópicos devem ser analisados?

Arquitetura
IDE ou ferramenta geradora de módulo

O que vocês sugerem?

Obrigada,

Oi,

Esta é uma dúvida muito comum e, como quase tudo, não possui uma
resposta única ou uma ‘certa’. Algumas dicas…

Se sua equipe é nova na tecnologia a ser utilizada, se preocupe em
fazê-los absorvê-la. Um treinamento de meses geralmente é inviável e
infrutífero, o melhor é dar o suficiente para que o sistema comece e
daí investir em treinamento incremental constante, com sessões de
aulas expositivas, reuniões para discutir design, ciranda de livros
(patrocinada pela empresa preferencialmente), reuniões para discussão
de papers, fórum de discussão e wiki internos, etc.

Partindo do ponto que já se possui um mínimo para começar a aplicação,
vamos criar valor ao cliente. É necessário escolher uma forma de
trabalho, seja qual for especifique um worflow mínimo. Não use
waterfall.

Dependendo da metodologia você vai descobrir o que seu sistema fará de
um jeito ou de outro, então vamos nos ater ao que geralmente não muda.

Arquitetura. Para isso você precisa de alguém experiente porque
arquitetura é algo conceitual, não apenas escolher frameworks e
bibliotecas corretas.

Se não tem um a disposição, identifique todas as possíveis soluções
dentro dos critérios:
- Simplicidade
- Qualidade final do produto
- Facilidade de aprendizado

Basicamente hoje isso quer dizer em utilizar POJOs e quando necessário
os serviços de um container como o Spring (fuja de EJB 2.1 o máximo
possível) e Hibernate se você for ter muitos objetos persistentes
(rule of thumb: muitos é mais que cinco classes) ou tem que fazer
buscas complexas com muitos objetos em memória.

Escolha de ferramentas. Se seus desenvolvedores foram treinados
juntos, provavelmente eles usam a mesma ferramenta, se não e se você
está escolhendo entre ferramentas livres (ou tem liberdade para tal),
deixe que cada um trabalhe com o que achar mais adequado. As IDEs
modernas são razoavelmente não intrusivas e não devem influenciar em
como seu projeto é estruturado. Use um controle de versão. Eu
recomendo o Subversion mas o CVS é bastante usado também. Todos
possuem plugins para as IDEs.

Para codificar, utilize ferramentas como PMD e FindBugs. Estas
ferramentas atuam como um desenvolvedor sênior e pentelho avaliando
seu código o tempo todo. Com o tempo você acaba aprendendo o que não
deve fazer de jeito nenhum e o que é simplesmente feio.

Preferencialmente use tes driven development. Se não conseguir, pelo
menos use Unit Tests, aprender a utilizar o JUnit não é difícil.

Se puder, utilize um build contínuo. Aprenda a usar o DamageControl ou
o CruiseControl. Utilize Maven ou Ant para criar seu build, não crie
JAR/WAR/EAR/RAR/qualquer outra coisa na mão.

Muita coisa, né? Se for um projeto pequeno, um projeto acadêmico ou
sei lá não vai precisar da maioria destas coisas, por isso não dá pra
falar algo com certeza. Um projeto que quer atingir qualidade
profissional é bom ter cuidado com isso.

De qualquer forma a melhor dica na minha opinião é uma só: contrate um
consultor. Existem bons profissionais especializados em pegar um time
‘cru’ e ajudar com mentoria, coaching, treinamento e consultoria. É
profissionalismo saber que alguém experiente é necessário. Pode
parecer caro mas é só colcoar na ponta do lápis o trabalho todo que dá
não ter um guia, quantas horas seus desenvolvedores vão ficar parados
sem saber o que fazer ou vão gastar várias horaspara resolver um
pequeno problema que tomaria minutos se eles forem assistidos por
algum mentor.

[]s


Phillip Calçado

My Job Went… wherever!

Tuesday, January 31st, 2006

A Amazon acaba de entregar meu My Job Went To India.

O livro é muito bom. Li quase 100 páginas desde ontem a noite até agora. Basicamente Chad Fowler fala sobre como não ser um programador commoditie, porque programadores commodities existem aos milhares na índia (ou no não citado Brasil). Apesar do alvo ser de engenheiros americanos (”ficamos gordos e lentos com o tempo“) os conselhos e histórias de Chad são fundamentais para qualquer um.

Além de explicar porque você deve se preocupar com a commoditização do trabalho, ele faz você se preocupar em evoluir como técnico, gerente e especialista em domínio. É um livro pequeno e não muito caro, não perca a chance de ler!

my Job Went to India

Coluna no PortalJava

Monday, January 30th, 2006

Há algum tempo o pessoal do portalJava me chamou junto com outras pessoas para fazer parte do seu time de colunistas. Hoje foi lançada a parte de colunas do portal.

Minha primeira contribuição é entitulada Identificando e Convertendo Código Orientado a Objetos e Código Procedural e refelte mais ou menos o que eu penso em fazer nesta coluna: artigos curtos e práticos sobre conceitos amplos e teóricos aplicados.

Para feedback, os adminsitradores prepararam um fórum específico. Parabéns ao PJ pela iniciativa e estamos aí ;)

RubyBrasil: Chamada de Janeiro

Friday, January 27th, 2006

Você está começando a aprender Ruby? tem dificuldades? Sabe tudo e quer ajudar a divulgar? Sabe um pouquinho e quer compartilhar conhecimento?

Junte-se a nós!


I HEART Ruby

Lista de Discussão RubyBrasil

80 membros mas definitivamente não é a a lista de discussão mais movimentada do mundo…

Update: Menção injusta do autor do logotipo: o TaQ sorry :(

Waterfall 2006

Thursday, January 26th, 2006

…não fique fora dessa!

(na boa, com tanta gente que faz waterfall, seja sem saber, sem ter noção de nada ou praticando mal (R)UP, é de espantar ninguém aparecer com um evento desse de verdade…)

Programar em Ruby te faz odiar linguagens estáticas

Thursday, January 26th, 2006

Papo interessante que estava tendo com o Fabrício ainda agora…

fabrício diz:
hehehhe
vc tb ta estudando ruby ?
Phillip Calçado - All that’s sacred..comes from youth! diz:
sim

fabrício diz:
pq ?

Phillip Calçado - All that’s sacred..comes from youth! diz:
por que eh uma linguagem *muito* boa
produtiva e de qualidade

fabrício diz:
rapaz..
hehe
sacanagem, mas eu quero saber o q eh q vcs acharam tao extraordinario nessa linguagem
eu vi aquele videozinho

Phillip Calçado - All that’s sacred..comes from youth! diz:
closures, dinamismo, DSLs

fabrício diz:
realmente me surprendi

Phillip Calçado - All that’s sacred..comes from youth! diz:
hoje eu estava com um problema interessante em java

fabrício diz:
qual ?

Phillip Calçado - All that’s sacred..comes from youth! diz:
tem uma classe qualquer que cria um objeto que pode ser considerado uma sessão com o banco de dados
só que numa jvm só podem existir duas sessões ao mesmo tempo, em threads diferentes
e me foi pedido para toda vez que se tenta abrir uma dessas, logar num arquivo antes quantas existem em memoria
para saber se estavamos tendo muito problema com isso ou se quase nunca duas sessoes ficam abertas
o jeito mais simples seria colocar uma variavel de classes (estatica) na classe que cria a conexão para saber quantas ela criou, certo?

fabrício diz:
é, a principio sim
e aii ?

Phillip Calçado - All that’s sacred..comes from youth! diz:
mas o problema eh que a classe que pede para essa outra criar uma sessão é quem fecha a sessão
então nós poderíamos saber quantas ssessões foram criadas, mas não quando uma for fechada
e essa classe sessão é do fornecedor do banco de dados, ou seja não pode ser alterada
como resolver isso em java?

fabrício diz:
unh … sem alterar a classe do fornecedor do bd, acho q tem q queimar um pouco os neuronios hehe
pq essa classe na pior das solucoes poderia notificar a todos que tem um comunicacao com ela, de que a sessao foi finalizada
sim, e ai?
vc fez o q?

Phillip Calçado - All that’s sacred..comes from youth! diz:
basicamente o que eu fiz rpa contornar a situação foi pegar todas as threads do sistema, ver quais delas possuem sessões abertas e logar, e como isso é bem lento deve ser melhor usar um adapter nesta classe
mas se fosse em uma linguagem como ruby, ao criar a instancia de sessao eu poderia alterar o metodo commit() desta instancia, fazendo ele avisar a classe fabrica que foi fechada antes de chamar o metodo original

Não entendeu a solução? Em Ruby uma classe é dinâmica, você pode alterá-la em runtime. Vamos a um exemplo (você pode testá-lo neste site) . Então supomos que nossa classe Session seja assim:


class Session
    def commit
        puts ‘COMMITED’
    end
end

E que quem crie sessions seja esta fabrica:


class Factory
    def create
        return Session.new
    end
end

Agora vamos modificar a fabrica para que guarde o numero de Sessions abertas e altere o método Session#commit


class Factory
#vamos guardar a quantidade de sessoes aqui
    @count
    

    #cria um ‘getter’ para o count

    attr_reader :count

    

    #construtor
    def initialize
        @count=0
    end
    

    #metodo usado para informar que uma sessao foi finalizada
    def session_ended
        @count=@count-1
    end
    

    def create
        s=Session.new
    

    #muda o metodo do objeto criado e cria variavel de instancia para localizar a factory
    class <<s
    

        #onde vamos guardar uma referencia para nossa factory
        @factory
    

        #cria um ’setter’ para factory
        attr_writer :factory
    

        #Muda o nome do metodo commit real
        alias original_commit commit
    

        def commit
            @factory.session_ended
            #chama o metodo antigo
            return original_commit
        end
    end
    

    #diz à sessao modificada que esta eh sua factory
    s.factory=self
    

    @count=@count+1
    

    return s
    end
end

Ficou bem maior que o método original, mas muito do que foi adicionado são getters, setters e construtores. No fim do post está o texto do teste completo, basta salvar num arquivo e rodar no interpretador ruby.

Note que o código não é thread-safe, teríamos que colocar uns monitores ali. Também é bom notar que não são todas as instâncias de Session que são afetadas mas apenas aquelas criadas pela Factory. Caso fosse necessário, poderíamos fazer com que todas as instâncias d Session fossem alteradas.

É assim que coisas como o Rails são implementadas e por isso é tão complexo criar ‘um Rails em Java’.

Se pudesse fazer isso em Java não estaria quebrando minha cabeça amanhã para otimizar uma ferramenta de diagnóstico… Minhas opções são: (a) empacotar a classe Session num Adapter ou (b) continuar buscando todas as threads e vendo se elas possuem sessões abertas

Provavelmente vou criar um adapter ou se não puder uma subclasse. WrappedSession implements Session e implemento o método commit() fazendo o necessário antes de delegar à Session real. O fato de criar uma classe nova na hierarquia apenas para adicionar um conceito ortognal (ou um cross cutting concern, algo importante para o sistema mas não importante do ponto de vista do usuário) não me faz muito bem. E se eu tiver que acrescentar esta funcionalidade a uma outra subclasse de Session criada por alguma das outras factories? Com wrapper tudo bem, mas se não usar subclasse eu crio outra com a mesma finalidade? E se eu quiser que todas as Sessions, não importa onde foram criadas, tenham esta funcionalidade? Find “Session”/Replace with “WrapperSession”?

Ps: estou tendo problemas com o WYSIWYG do WrodPress, a formatação tem ficado meio bagunçada devido a isso - Com ajuda do Diego isso foi meio que resolvido :P

Exemplo completo:

class Session
    def commit
        puts 'COMMITED'
    end
end
    
class Factory
    
    #vamos guardar a quantidade de sessoes aqui
    @count
    
    #cria um ‘getter’ para o count
    attr_reader :count
    
    #construtor
    def initialize
        @count=0
    end
    

#metodo usado para informar que uma sessao foi finalizada
def session_ended
    @count=@count-1
end
    
    def create
        s=Session.new
        
        #muda o metodo dentro do objeto criado e cria variavel de instancia para localizar a factory
        class <<s
        
            #onde vamos guardar uma referencia para nossa factory
            @factory
            
            #cria um ’setter’ para factory
            attr_writer :factory
        
            #Muda o nome do metodo commit real
            alias original_commit commit
                
    

            def commit
                @factory.session_ended
                #chama o metodo antigo
                return original_commit    

            end
        end
    

    
    #diz à sessao modificada que esta eh sua factory
    
    s.factory=self
    

        @count=@count+1
        

        return s
    end
end
    
f = Factory.new
s = f.create
puts f.count
s.commit
puts f.count

UPDATE: O taq deu uma limpada no código, ficou menor mas se for sua primeira vez vendo algo em Ruby pode ser mais confuso::

class Session
    def commit
        puts "COMMITED"
    end
end

class Factory
    attr_reader :count # pode usar o attr_reader direto que ele cria a @count
    def initialize
        @count = 0 # aqui tem que 'setar' o valor default né, inclusive se você não
    end # tivesse usado o attr_reader, a @count poderia ser criada aqui sem problemas
    def session_ended
        @count -= 1 # olha o -= ao invés do @count = @count - 1
    end
    def create
        s = Session.new
        class << s
        attr_writer :factory # mesmo esquema acima - não precisa explicitar @factory
        alias original_commit commit
        def commit
            @factory.session_ended
            original_commit
        end
    end
        s.factory = self
        @count += 1 # olha o += ao invés do @count = @count + 1
        s # não precisa do return, apesar de ficar mais legível com ele
    end
end

f = Factory.new
s = f.create
puts f.count
s.commit
puts f.count

Windows Inovando Como Sempre…

Tuesday, January 24th, 2006

Essa é imperdível :)

Reunião RioJUG

Monday, January 23rd, 2006

Hoje no auditório do SENAC vai ser realizada mais uma reunião do RioJUG:

Desmistificando a SCPJ 5 (Tiger)

Dia: 23/Janeiro/2006 (segunda)
Horário: 18:30 horas
Duração: 2 horas e 30 minutos
Local: Auditório do SENAC CIT - Rua Santa Luzia, 735 - 7o. andar, Centro
Dica de Acesso: Estação Cinelândia do Metrô pela saída Santa Luzia, atrás do Consulado Americano

Entrada Gratuita e Sem Inscrições Prévias

Coffe-break oferecido pelo nosso patrocinador Quality Software.

Sorteio de camisetas e de assinaturas das Revistas “Mundo Java”, “Java Magazine” e “SQL Magazine”, para os presentes.

A Palestra:

    Apesar de existir desde abril de 2005, a SCPJ 5 (Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0) ainda causa “calafrios” em vários profissionais.Não vamos ensinar Java 5 nesta palestra. Mas também não é preciso que você seja um conhecedor de Java 5 para tirar proveito. Na verdade os assuntos discutidos poderão até mesmo ser compreendidos por quem conhece pouco de Java, mas quer saber como aprender mais para tirar uma certificação.O que vamos fazer é desmistificar para o público várias características deste exame, discutindo como são abordados na prova os tópicos da certificação, além de comentar sobre dicas que poderão facilitar o caminho, bem como sobre armadilhas existentes na prova.

    Não deixe de trazer papel e caneta para fazer suas anotações, porque vão ocorrer comentários e observações que não poderão ser previstos antecipadamente, ou mesmo que não estarão em qualquer material de referência.

    Em função da relevância deste assunto para muitos profissionais, a palestra teve sua duração aumentada de modo a atender melhor às dúvidas e discussões do público presente.

O Palestrante:

    Magno Cavalcante é Analista de Sistemas, com formação em Engenharia de Sistemas e Computação. Ao longo da carreira tem trabalhado na área de tecnologia da informação, atuando em projetos de desenvolvimento com Java Standard e Enterprise, na modelagem de sistemas, no gerenciamento de bancos de dados, no gerenciamento de sistemas operacionais e segurança de informações.Fundador e Coordenador do RioJUG, é conhecido instrutor de tecnologias Java no Rio de Janeiro, tendo atuado também em outros estados.

Vvale a pena uma conferida.

Se você está interessado em ir ao Sun tech Days 2006, o pessoal do JUG está começando a preparar a caravana. Mais detalhes na lista.

Dicas Para Gerenciar Software Livre

Tuesday, January 17th, 2006

Mais uma vez vejo alguém propondo um projeto para a construção de software livre sobre um tema qualquer para um fim qualquer. Eu mesmo já o fiz várias vezes, a grande maioria das vezes acaba em… nada. Por que? Porque gerenciar projeto de software é uma coisa complicada e gerenciar software livre é muito mais complicado.

A intenção é quase sempre boa. Quase. Conheço casos de pessoas que sugeriram um projeto super empolgadas, juntaram e acolheram interessados e só depois de algum progresso as pessoas começam a perceber que o líder apenas queria um bando de programadores trabalhando de graça. Geralmente este “líder” nem sabe programar direito, apenas vendeu a idéia para um cliente e precisa de algo pronto, e rápido.

Também tem o caso da prostituição do termo Open Source. Como eu já falei aqui antes (e é algo perceptível para quem prestar um pouco de atenção) tem muita empresa no Brasil e lá fora que simplesmente pega um monte de projetos livres, empacota e vende num CD com instalador bonitinho e meia dúzia de manuais e customizações. Nada volta para a comunidade. Nem mesmo para os autores originais visto que quando você contrata uma empresa desta o “suporte” que eles te dão geralmente é pegar sua dúvida e postar no fórum ou lista de discussão do projeto. Já vi casos assim também. Nem mesmo o suporte eles pagam e (como boa parte dos programadores) têm medo de olhar o código fonte do software que estão usando. Eu acho que é medo de não entender e se sentir burro, mas isso é assunto para outro post nonsense, este é sobre gerenciar projetos.

Faça Você Mesmo

Minha primeira dica é simples: comece. Agora. Não espere.

É, eu sei. Você posta algo num fórum de discussão e logo aparecem milhares de interessados no seu jogo, sua locadora ou seu sei-lá-o-que. E logo começam a discutir qual framework web utilizar. Ou banco de dados, com uma briga cheia de emoções se vai ser MySQL ou PostgreSQL. Ou se vai ser web. Ou linguagem. O problema é que na maioria das vezes passam horas, dias, semanas ou meses de discussões e nenhum código.

Da última vez que topei entrar numa dessa fiz uma experiência. Enquanto as pessoas discutiam sobre frameworks, bancos de dados, cronogramas e requisitos peguei um PDF com os casos de uso iniciais e os implementei em POJOs, todos com testes unitários, script ant para criar um JAR… tudo bonitinho, até arquivo de projeto Eclipse tinha.

Resultado? O projeto morreu sem que nenhuma alma acrescentasse meia linha de código à que eu enviei. O que deu nas pessoas? Não tinham tempo, não sabiam, não queria, estavam ali só observando, só queriam usar, só queriam vender… povo cheio de problemas.

Por isso o melhor conselho e mais importante é: comece. Não importa se você não é muito bom no algoritmo tal, ou se uma pessoa com mais experiência seria legal para fazer aquele componente. Faça do seu jeito e se seu projeto realmente for relevante alguém com as características que você procura pode te ajudar, seja com código ou com uma consultoriazinha.

Planeje

Tenha em mente o que você vai fazer antes de começar a fazer algo. Não precisa ser nada concreto, na verdade pode ser melhor que não seja.

Se você está fazendo uma experiência com o desenvolvimento de uma biblioteca, framework, componente, bicho-da-seda transgênico ou qualquer outra coisa mas que nem mesmo você sabe no que vai dar, apenas rabisque umas idéias.

Se você está apenas construindo uma aplicação normal, uma ferramenta ou algo do tipo, mas algo que você sabe exatamente porque deve ser feito, siga o processo de desenvolvimento que se sentir mais confortável. Uma boa coisa é poder experimentar novas técnicas como metodologias ágeis sem compromisso. Só cuidado para não experimentar demais caso o projeto seja algo que você realmente queira fazer.

Não Planeje Demais

Lembre-se: o projeto não é obrigação sua nem de seus colegas.

Se você estiver trabalhando com mais de uma pessoa, esqueça prazos e tarefas assinaladas por um “project leader”. Isso até funciona em projetos maiores mas nos mais comuns apenas atrapalha e cria discórdia.

Tenha em algum lugar (Bugzilla, Trac, Cyclomatic, planilha OpenOffice Calc, sei lá) uma lista de bugs e funcionalidades que precisam ser implementadas e deixe que os seus desenvolvedores peguem as que desejam implementar. Este é seu backlog.

Sim, a tendência é eles pegarem as mais legais e deixarem as tarefas menos gloriosas na lista. Quem se dedica a um projeto deste tipo geralmente é um programador que durante o dia tem que fazer as tarefas mais chatas do mundo, enquanto tem tempo de programar por prazer o que você acha que ele quer fazer? Uma equipe madura e um bom líder ajudam a ter as tarefas mais banais e chatas concluídas por alguém.

Uma coisa que já vi funcionar é marcar com você mesmo e os desenvolvedores mais ativos do seu projeto um sprint de fim de semana.

Os melhores e mais promissores projetos livres surgem de um estalo que alguém tem e estes precisam de algo pronto rápido, uma prova de conceito que seja. Evite planejar demais nestes casos também, mesmo porque dificilmente deste sai um software de verdade, as vezes sai apenas uma experiência, um artigo, um post no seu blog ou apenas uma conversa com algum outro programador. Neste caso o que eu costumo fazer é me mandar e-mails (esquizofrênico eu?).

Quando tenho uma idéia eu abro o Gmail e digito tudo que vem na minha cabeça sobre o assunto. Vou fazendo isso durante o dia e de noite ou quando possa parar eu junto as peças.

Tenha uma Iteração Zero

Isso vale para qualquer projeto de software e merece um extenso texto porém já vale uma menção aqui. Se você é terrivelmente preguiçoso e procrastinador como a maioria das pessoas (eu incluso), não tem nada mais chato que montar um ambiente de programação. Então faça da sua primeira tarefa real, quando você ainda é só empolgação com o projeto,criar uma árvore de diretórios e um script de build(seja make, rake, ant ou maven) que gere um aplicativo, um EXE, JAR, EAR, WAR ou qualquer outra coisa que valha no seu caso (você entendeu a idéia!). Sim, este aplicativo vai estar vazio e não faz nada visto que o projeto não tem código, mas é importante você já ter essa parte chata
pronta.

Documente!

História clássica do WebWork. Provavelmente o melhor framework MVC de sua época (hoje em dia a briga tá complicada…), ganhando do Struts em praticamente tudo, menos um aspecto: documentação. Resultado? Nunca chegou a arranhar de verdade a base instalada do concorrente mesmo sendo tão superior que foi integrado como a base para novas versões do próprio Struts! A versão mais recente se orgulha de conter 900 e tantas páginas de documentação.

Um exemplo contrário é o Spring Framework. Também muito bom e revolucionário na sua época, porém com muita documentação online. Mesmo virando pelo avesso o desenvolvimento Java EE como era conhecido (e por incrível que apreça usuário de Java consegue ser mais tapado e conservador que usuário COBOL ou C++) a base instalada só cresce e ninguém sabe ao certo se além de praticamente afunda o barco do EJB 2.1 o Spring vai atrapalhar os planos do EJB 3.0.

Não faça seus usuários lerem código se você quer mantê-los como usuários. Não importa se você está fazendo uma biblioteca ou framework que tem como usuários programadores da linguagem que você está usando, mesmo se seu código for muito pequeno usuários não gostam de ler código. Se forem obrigados a fazê-lo para entender seu framework eles vão procurar alternativas. E provavelmente vão achar.

Tenha em Mente que Provavelmente Não Vai dar em Nada

É triste dizer isso mas é bem realista. A enorme maioria dos projetos livres acaba muito antes de lançar uma versão 1.0.

E se acabar? Acabou, ué. Bola pra frente. Se você aprender uma coisa a mais sobre projeto de software, sobre programação, bancos de dados, sobre gerenciar pessoas, sobre como conectar com a internet via provedor gratuito por linha discada no domingo é impossível, ou sobre qualquer outra coisa o projeto provavelmente já valeu a pena. Que venha o próximo.

Muitas vezes você recebe apenas perguntas de alguém que foi contratado para mexer no seu sistema para um cliente. Sim, a empresa poderia ter contratado você para isso, mas ela preferiu contratar outra pessoa. Por que?

Sei lá, mas é bom você procurar saber se deseja entrar nessas oportunidades. Vai ver a empresa não sabia que havia um suporte disponível, vai ver quem escolheu o seu sistema foi o próprio cara que está mexendo nele e a empresa cliente nem sabe do que se trata. Vai ver acharam que você ia ser caro demais. Ou vai ver acharam que você é um moleque de doze anos que nem contratar direito eles podem. Vai ver você é um moleque de doze anos.
Uma coisa muito chata é ver alguém fazendo dinheiro com seu projeto se não foi sua intenção. Tenha em mente o que você quer da vida antes de escolher a licença do seu produto, isso é muito importante. Software livre não precisa ser caridade, pode ser um negócio como qualquer outro mas você precisa ter um rumo e uma posição quanto a isso.

Tenha em Mente que Pode dar em Algo

Meu primeiro emprego numa grande empresa surgiu do fato de eu estar envolvido com um software livre que era muito parecido com uma implementação que a empresa tinha. Detalhe que eu nem tinha idéia disso (a implementação da empresa é fechada e desconhecida fora dela) e só soube depois que eu entrei. Meu entrevistador fez muitas perguntas sobre o sistema para saber se realmente eu o conhecia. Muitos amigos e conhecidos meus conseguiram empregos assim. Esse é o benefício indireto mais importante e frequente.

Outros são mais felizes em seu trabalho e conseguem consultorias pagas. Sim, as pessoas pagam para você consertar um bug mais rápido ou adaptar seu software à realidade deles.

Como mencionado acima, se você pretende ganhar alguma coisa com este sistema, seja dinheiro, respeito ou reconhecimento no mercado, saiba desde o início e se planeje para isso. Se você tocar o projeto como uma empresa haja como uma empresa, seja profissional e tenha um plano de negócios.

Não sou especialista neste tema mas após participar de alguns projetos e conversar muito com pessoas que já participaram de muitos outros, cheguei a esta breve lista. Sinceramente: se você só puder seguir uma dica, siga a primeira. Não prive o mundo e você mesmo de algo legal que pode sair de um projeto livre com essa idéia maluca que você está na cabeça.

Matéria na Revista Mundo Java

Friday, January 13th, 2006

Este mês saiu um artigo meu na revista Mundo Java (edição 15). É uma transcrição da palestra sobre Camadas que ministrei na Maratona4Java de Brasília e no RioJUG, quem não teve oportundiade pode conferir o conteúdo.

Feedback é muito apreciado e aguardem próximas novidades ;)