CØdeZØne!

Entries categorized as ‘engenharia’

Hierarquias são inteligentes nas “pontas”

Julho 22, 2008 · Não Há Comentários

Este é o titulo de um post fantástico do Carlos Vilella, que o Rodrigo Yoshima traduziu, e que eu não poderia deixar de citar aqui no meu blog.

Leitura obrigatória!

Categorias: agilidade · dicas · engenharia · pragmatismo

Comunidade Ágil a todo vapor no Brasil

Julho 19, 2008 · 1 Comentário

É muito animador ver o quanto a comunidade ágil tem crescido e se fortalecido no Brasil. A pouco recebemos a notícia do grande evento que acontecerá em outubro, o Falando em Agile 2008, promovido pela Caelum. Treinamentos e workshops acontecem todos os meses Brasil à fora - basta você acompanhar, por exemplo, o blog do Alexandre Magno e do Rodrigo Yoshima, pra saber quando acontecerá o próximo. E agora, mais recentemente ontem, o Manoel Pimentel, editor chefe da revista eletrônica Visão Ágil, postou no GUJ a notícia do lançamento do Blog Visão Ágil.

Iniciativas como esta mostram o quão notório já é o crescimento das agordagens ágeis de desenvolvimento de software no Brasil.

Pratico desenvolvimento ágil em meu trabalho diário há algum tempo, e sei o quando é bom trabalhar assim - sob todos os aspectos. Mas sei também que não é fácil vender essa abordagem; muito menos fazê-la acontecer como deve ser. Contudo, com a comunidade mostrando a cara, e mais ainda, mostrando seus próprios resultados e experiências reais, certamente mais e mais empresas darão a si mesmas a chance de ver o quanto ser ágil é bom!

Imagine o dia que todas as empresas adotarem abordagens ágeis.
Não é difícil, não.
Nada de gantt chart ou gerente alienado,
Nada de comando/controle, só a liberdade de programar, testar e implantar.
Imagine todos os programadores, clientes e empresas vivendo em paz.
Somente a paz!

Você pode me achar um sonhador,
Mas não sou o único.
Espero que você se junte a nós,
E o Mundo do Desenvolvimento de Software será um só.

Conhece esta canção? Nada mau para o momento… rsrsrs

Categorias: agilidade · engenharia · eventos

Você precisa de Matriz de Rastreabilidade?

Julho 17, 2008 · Não Há Comentários

Acabei de ler um post bem legal do Phillip Calçado que você também deveria ler, caso já tenha sido questionado sobre Matriz de Rastreabilidade. Caso “ainda” não tenha sido questionado quanto a isso, não tem problema, leia mesmo assim, porque a sua hora vai chegar! rsrsrs

Categorias: agilidade · dicas · engenharia

Nova turma do Agile Requirements Workshop

Julho 16, 2008 · 1 Comentário

Em maio participei da primeira turma do Agile Requirements Workshop, e não me arrependi, foi um dinheiro bem gasto investido.

Agora, Alexandre Magno e Adail Retamal estão de volta, promovendo uma nova turma deste bem-sucedido workshop.

Se eu fosse você, não perderia!

Categorias: agilidade · dicas · engenharia · eventos

JRuby ou Groovy?

Julho 2, 2008 · 5 Comentários

Não, não quero começar nenhum flame war em torno de JRuby e Groovy.

O que ocorre é que ontem um cara que tem um blog legal, o Diego, fez um comentário num de meus posts que me fez pensar a respeito… Até agora…

Na hora, sinceramente, não tive nada de muito substancial para responder, porque ainda não havia pensado a respeito. Mas tenho que confessar que isso ficou martelando a minha cabeça o tempo todo… Existe alguma vantagem de se usar Groovy invés de JRuby?

Bem, lendo e pensando a respeito, cheguei a algumas simples conclusões:

Se você tem familiaridade com Java e quer permanecer 100% no ambiente Java, sem a perspectiva de migrar, Groovy é a melhor opção pra você.

Porque a sintaxe de Groovy é muito parecida com a de Java; Groovy traz consigo uma porção de vantagens de uma linguagem OO moderna e dinâmica, como meta-programação, duck type, e closures; e você ainda pode programar usando objetos Java e Groovy numa mesma classe, de forma totalmente transparente (já que .groovy ao ser compilado se transforma em um .class qualquer).

Só que, mais uma vez: Não há qualquer possibilidade de se rodar código Groovy fora de ambiente Java, porque Groovy foi especificamente criada para ser uma “alternativa” à linguagem Java.

Se você quer que seu código seja portável para outras plataformas de runtime, tal como .Net, por exemplo, JRuby é o melhor pra você.

Acho que este é um dos fatores primordiais na escolha de JRuby invés de Groovy. Porque o fato da sintaxe de Groovy ser próxima à de Java, sinceramente, pra mim não quer dizer nada - aprender uma nova sintaxe não é coisa de outro mundo; e é até legal. Agora, portabilidade, isto sim faz a diferença - quando necessário, claro.

Você pode escrever, por exemplo, uma aplicação Ruby on Rails comum e coloca-la para rodar em um web container Java, sem muito esforço. Aliás, se você estiver usando o NetBeans, ele faz isso pra você em um ou dois cliques. E se num dado momento decidir rodar, sei lá, num Mongrel, tudo bem, você pode fazer isso sem problema algum. Isto é fantástico!

Se você quiser se manter 100% compatível com a MRI, isto é totalmente possível, porque JRuby é uma implementação completa de Ruby para a plataforma Java. E se você quiser aproveitar algum código escrito em Java, você também pode fazer isto - mas neste caso, claro, sacrificando a portabilidade.

Outro fator primordial que vejo é “comunidade”.

A comunidade JRuby tem crescido a cada dia - claro que por conta do próprio Ruby/Rails. E a indústria de software tem investido nisto, aja vista o ótimo suporte do NetBeans a Ruby/Rails; e a própria contratação de membros chaves do JRuby pela Sun há algum tempo.

E a comunidade Groovy? Bem, acho que Grails tem ajudado a levanta-la. Mas o seu barulho ainda não é dos maiores não. (Espero que isto mude.)

E o fim deste pensamento, qual é?

Use JRuby. Use Groovy. Use o que melhor atender aos seus próprios requisitos e aos de seu cliente. Porque não há apenas uma linguagem de programação, nem uma única solução pra tudo!

Atualmente estou propenso a usar tanto JRuby [on Rails] quanto Groovy [on Rails]. O que vai me fazer decidir entre um e outro serão os requisitos do momento - e a expectativa futura.

Então, seja JRuby ou Groovy, o que importa é desenvolver o software certo, no tempo certo, com a qualidade certa.

(Valeu Diego, por me fazer pensar um pouco sobre isto.)

Até a próxima!

Categorias: .net · arquitetura · engenharia · grails · groovy · jruby · pragmatismo · rails · ruby

Agile Requirements Workshop!

Junho 2, 2008 · 1 Comentário

Sábado passado participei do Agile Requirements Workshop com o Alexandre Magno e o Adail Retamal.

O nível do workshop foi realmente excelente. Muito conteúdo, muita prática, muita discussão, literalmente, muita formação para qualquer profissional ágil. User stories, Features, Mapas Mentais, Engenharia de Requisitos, e outros assuntos foram tratados com muita propriedade pelos dois. =)

Um momento que achei impressionante foi quando o Alexandre, ensinando o valor da comunicação, disparou: “Não combinei nada com o Adail, mas, Adail, fica tranquilo, eu assumo o prejuizo, tá? Quem quiser ir embora ’só com a apostila’, eu devolvo 90% do valor pago pelo workshop. Você pega a apostila, vai embora, e eu te devolvo 90% agora mesmo. Quem quer?” O que vocês acham que aconteceu? Ninguém nem piscou! Porque o conteúdo que esses caras tem para passar é muito, muito, além do que qualquer apostila. Comunicação é tudo - e, acredite, esses caras sabem bem o que significa isso.

Enfim, ótimo evento, quem não foi perdeu. Mas, como o Alexandre mesmo anunciou, mais edições estão por vir!

Não fique de fora!

Categorias: agilidade · engenharia · eventos

Projeto Da Vinci Machine

Fevereiro 14, 2008 · Não Há Comentários

A Sun caminha a passos cada vez mais largos em direção à consolidação da Plataforma Java como tecnologia de base para multiplas linguagens de programação, tal como a plataforma .Net da Microsoft. Assunto que abordei em um de meus posts recentemente.

Mais um grande esforço neste sentido é o projeto Da Vinci Machine, que visa facilitar a implementação de outras linguagens para a JVM.

New York Times/IDG: Sun’s Da Vinci Machine Broadens JVM Coverage.

Categorias: .net · arquitetura · engenharia · java

Refatorar é preciso!

Fevereiro 8, 2008 · Não Há Comentários

Definitivamente, refatorar é preciso!

Ninguém consegue escrever o melhor código do mundo na primeira vez que o escreve. Aliás, arrisco dizer que isto não é verdade apenas com software, mas com uma infinidade de coisas que fazemos ao longo da vida.

Desde que me entendo por gente garoto, sempre tive o hábito de refatorar. Nos meus trabalhos escolares, composições musicais, estudos bíblicos. Dia desses mesmo tive que escrever uma carta para ser lida publicamente [a detendos e familiares] em um presídio de São Paulo. Que responsabilidade! Escrevi e refatorei várias vezes numa mesma madrugada até a tal carta ficar muito boa.

No meu trabalho não é diferente. Escrevo e re-escrevo códigos sempre. Não por terem sido mal escritos por mim ou por algum colega, mas porque acredito que eles sempre podem ser aprimorados.

Refatoração como disciplina da Engenharia de software:

Martin Fowler, em seu site oficial sobre refatoração, diz que refatorar é alterar a estrutura interna de um código sem alterar o seu comportamento externo. É fazer pequenas modificações de cada vez, que somadas, resultem em modificações significativas, sem contudo, afetar o funcionamento do código.

De forma bem prática, no meu dia a dia, costumo enumerar as tarefas da refatoração em: Revisar, remolelar e refinar. Três ‘R’s indispensáveis na vida de todo bom programador, porque:

1. Todo código precisa ser revisado;
2. Todo código é forte candidato a ser remodelado, pelo menos uma vez;
3. Todo código deve ser refinado sempre.

Quando aplicada corretamente, a refatoração trás excelentes ganhos, tais como:

1. Códigos mais legíveis;
2. Códigos mais performáticos;
3. Códigos mais extensíveis;
4. E sobretudo, código mais simples!

Este e o sentimento da refatoração. Ganhos hoje; e mais ainda, amanhã. 

Agora, sabe qual é a triste realidade? Poucos gestores de projetos entendem e encorajam esta prática. Uma pena, porque o projetos só tem a ganhar. Quantas vezes você já não entrou em um projeto e perdeu horas e horas pra entender o código macarrão que alguém que nem está mais na empresa fez? Quantas vezes mais isso ainda não vai acontecer neste mesmo projeto? Ah, se estas horas tivessem sido empregas em refatoração…

Mas, sabe de uma outra coisa? A culpa não é só dos gestores de projetos. Desenvolvedores de software também precisam aprender a vender suas idéias, soluções, e mostrar resultados reais da aplicação de determinadas técnicas. Afinal de contas, cientistas renomados como Martin Fowler costumam ter razão naquilo que dizem.

Bom, ainda bem que aqui na equipe de arquitetura da CVC Turismo não é assim. Aqui refatorar é visto com muito bons olhos. Bons olhos sobre quem faz a refatoração, dado o seu pró-ativismo; e bons olhos sobre o próprio patrimônio de software da empresa que é valorizado a cada dia.

Se seu gestor não quer nem ouvir falar em refatoração, eu tenho uma sugestão pra você: Faça algumas refatorações por conta própria, sem que estas afetem o andamento do seu projeto, é claro, e depois apresente a ele um relatório de ganhos, conforme citados anteriormente.

Não se esqueça: Frutos falam mais que palavras.

Depois poste aqui o resultado…

Categorias: arquitetura · engenharia · refactoring

Scrum pra nós é rules

Fevereiro 4, 2008 · 1 Comentário

Tenho desempenhado o papel de arquiteto de software na equipe corporativa de arquitetura de software da CVC Turismo há pouco menos de um ano. Esta tem sido uma experiência muito interessante e divertida sob muitos aspectos, mas sobre tudo, pela oportunidade de trabalhar dirigido por novos paradigmas. Um deles é o agilíssimo Scrum.

Scrum tem sido regra em nossa equipe há cerca de 6 meses. Ainda temos, obviamente, até pelo pouco tempo de experiência nesta metodologia e background no RUP, algumas coisas que lapidar, que melhorar, que aprender, mas já temos visto resultados muito, muito, empolgantes.

Nossa equipe é composta por 5 pessoas: Eu, JOss, Morais, Valdir, e Léo, nosso Scrum Master. Todos muito comprometidos com o pensamento Scrum que, com certeza, tem sido nosso grande diferencial de sucesso, hava vista os elogios da própria diretoria de TI, que até já promoveu workshops para apresentarmos o Scrum a outras equipes da empresa.

Atualmente estamos desenvolvendo, entre outras atividades menores, o core-business repository da CVC, batizado de SysturDM, que na próxima quarta-feira entra em sua quarta sprint, deixando pra trás outras 3 completamente bem-sucedidas. Além deste, já concluímos com sucesso total outros dois ou três projetos menores.

Scrum trouxe aos nossos projetos sinergia, motivação, colaborativismo, e um ambiente indiscutivelmente informativo. Resultado? Software útil em poucas semanas, chefe feliz… Opá! Acho que um aumento salarial vem que vem… =)

Taí! Quem disse que empresas grandes não dão crédito a metodologias ágeis?

Scrum pra nós é rules!

Aproveitando, quero indicar o blog do Guilherme Chapiewski. Leitura mais que obrigatória!

Categorias: agilidade · arquitetura · engenharia · scrum

A Plataforma Java não é sobre a Linguagem Java

Fevereiro 4, 2008 · 2 Comentários

A Plataforma Java, mais notadamente a Enterprise Edition, vem experimentando, a cada ano, um crescimento sem precedentes na história da computação. Centenas de corporações investem milhões do dólares em servidores de aplicações, ambientes de execução para dispositivos móveis, ambientes integrados de desenvolvimento, frameworks e mais frameworks; enquanto um verdadeiro exército de programadores vai se formando e se tornando adeptos desta. O resultado destes investimentos são um sem número de aplicações distribuídas, web e mobiles que são desenvolvidas e disponibilizadas para milhões de usuários, ano após ano.

A Máquina Virtual Java (JVM), por sua vez, já é considerada a melhor e mais moderna máquina virtual da atualidade, provendora de um robusto ambiente de execução de aplicativos em dezenas de plataformas de hardware e software diferentes.

Tudo isto é fantástico. Mas não é tudo!

A Plataforma Java não é sobre a Linguagem Java. Ela não é exclusiva à Linguagem Java. Em uma analise fria e simplista, ela é apenas uma plataforma para execução de aplicativos distribuídos em bytecodes nativos da JVM.

É claro que numa analise mais detalhada ela seria mais do que isto. Mas em poucas palavras, é isto mesmo que ela é. A própria Sun_Microsystems já tem acreditado nisto e vendido esta idéia. Os maiores exemplos são a linguagem Groovy, que está sendo padronizada pela JSR 241, a versão Java do interpretador Ruby, o JRuby.

Quer saber? Taí um dos motivos de louvor da plataforma .NET da Microsoft. A plataforma .NET pode executar mais de vinte linguagens de programação diferentes, como se fossem uma só, porque também trabalha com o conceito de bytecode, os quais são executados sobre a CLR (Common Runtime Language). Ou seja, você não precisa ter uma única linguagem de programação para resolver todos os seus problemas computacionais; você pode escolher a melhor para o momento - eu falo sobre isso no meu post anterior. Isto sim é fantástico! E o melhor de tudo, é que a Plataforma Java também está caminhando nesta direção.

Já há algum tempinho é possível você escrever programas usando Groovy, JRuby, Jython, ou mesmo JavaScript, e executar na JVM. É a magia da JSR 223, Scripting for the Java Plataform. E não pense você que isto é fazer o gosto de meia dúzia de programadores. Isto é, na verdade, um novo leque de oportunidades para a própria Platadorma Java.

Este é o futuro do Java como plataforma de desenvolvimento, distribuição e execução de aplicativos de alta disponibilidade.


# O jeito Ruby:
puts 'Tchau!'

# O jeito Python:
def tchau():
    print "Tchau!"

// O jeito Java:
public class Goodbye {
    public static void main(String[] args) {
        System.out.println("Tchau!");
    }
}

// O jeito Groovy:
println "Tchau!"

Categorias: .net · arquitetura · engenharia · groovy · java · python · ruby