Monthly Archives: December 2009

A complexidade de Java e o comprimento da roupa das mulheres

Em 1926, George Taylor, um economista americano,  formulou a teoria do “Hemline Index“. A teoria correlaciona o comprimento dos vestidos da mulheres com a saúde da economia: quanto mais curto o vestido/saia, mais forte a economia.

Nos anos 40-50 a moda eram saias longas, até o tornozelo. A exuberância dos anos 60 veio com os mini-vestidos e o surgimento das mini-saias. A recessão e a crise do petróleo nos anos 70 aumentou o comprimento da roupa feminina, que diminui novamente no início dos anos 80. Na recessão que iniciou em 1987, fez com que a moda das longas saias e vestidos aumentasse novamente, até serem reduzidas novamente nos anos 90. No mínimo é uma estranha coincidência, certo?

Esta teoria foi validada e revista por Terry Pettijohn, um professor de psicologia na universidade da Carolina (EUA) e por vários outros pesquisadores e institutos de pesquisa de comportamento de consumo. Um resumo muito interessante está resumido neste artigo do jornal New York Times, de agosto de 2008. Desmond Morris utilizou esta teoria como base do seu livro “The Naked Ape“.

Nosso comportamento muda muito de acordo com a situação econômica. Isto já é um fato comprovado. A venda ou não de alguns itens só pode ser explicado por estes “up” e “down” da economia.

O que isto tem a ver com java?

Rod Johnson é um dos líderes da comunidade Java e Java EE. Ele é autor de livros importantes como “Expert One-on-One J2EE Design and Development (2002)“, “J2EE without EJB (Julho 2004, com Juergen Hoeller)“, “Professional Java Development with the Spring Framework (Julho, 2005)”.

Mais um detalhe. Ele é o idealizador do Spring Framework, indiscutivelmente, um dos melhores frameworks Java.

economyJavaEEcomplexity Foi ele quem apresentou um o gráfico ao lado que, utilizando o “Hemline Index“, expõe seu ponto de vista na tentativa de explicar, porque a plataforma Java tornou-se tão complexa.

Veja como temos uma tendência a complicar as coisa – como o comprimento longo das saias femininas -, quando a economia vai mau. E a complexidade diminui nas crises, como esta de 2008/2009.

Ele apresentou suas idéias durante o evento QCon, London 2009. É uma palestra de  pouco mais de 1 hora onde ele explica, com exemplos, alguns motivos que inseriram complexidade na plataforma Java.

Uma das razões é a abordagem de decisão por comitês, utilizado na JCP, que precisa “dar a benção” em toda mudança na linguagem.

Antes de mais nada, eu concordo com o ponto de vista colocado na apresentação. Não leve em conta minha opinião, ou mesmo do autor da apresentação: veja os fatos, os argumentos e tire suas próprias conclusões.

Meus R$ 0,10 na discussão. Como tudo na vida, a decisão por comitês (innovation by committee) é um processo de “trade-off“: ao controlar e burocratizar todo o processo de mudança, eu estou permutando estabilidade por uma menor inovação. É assim com as decisões do JCP e de todo comitê que você criar na sua empresa para controlar mudança.

Veja que isto não é necessariamente ruim. O ponto da discussão não é este. Existem épocas em que as saias são longas e em outros elas são curtas. Mas, tudo tem seu preço. No caso da plataforma Java, o preço foi o incremento de uma complexidade desnecessária.

Você quer saber algumas das razões?

Assisti a palestra do Rod Johnson e fiz um resumo. Se você se interessa pelo assunto, assista a palestra (1h 3min) ou leia meu resumo a seguir.

Que lições podemos tirar dos últimos 10 anos de desenvolvimento da linguagem Java?

Foi assim que R. Johnson iniciou sua palestra. Vou resumi-la em forma de bullets para simplificar a leitura.

Que lições podemos tirar dos erros no desenvolvimento da plataforma Java nos últimos 10 anos?

Dois fatores se destacam:

- O poder que os desenvolvedores tiveram com Java
- Flutuações na economia
- Java iniciou como uma linguagem fácil (ao contrário do que muitos acham), era como “C++–”. Mesmo hoje ainda é simples.
- O DNA de Java é a simplicidade
- O problema não é a linguagem em si. A complexidade foi introduzida ao longo do caminho

Um dos erros foi trazer o “Enterprise” para a linguagem. À esta palavras, em qualquer abordagem, está associada a complexidade. Quem se lembra das “Entity Beans”?

- A complexidade da indústria. Grandes companhias, como IBM, terem “abraçado” Java também tem pontos negativos. “É simplesmente impossível IBM adotar uma tecnologia e não complica-la”, de acordo com R. Johnson
- Abordagem “No pain no gain” (convenhamos, isto é uma falácia)
- Era legal ser complexo. Como desenvolvedor sou diferenciado (isto valeu no início)

Como J2EE evolui para Java EE

- Nos anos 90 Java começou a migrar para o servidor.
nota do autor do blog: Você já programou um “Applet”? Eu já! E utilizava o Notepad! (como sofremos…)
-Não existia muita “regulamentação” para a linguagem (nem havia muitas razões para)
-Ambiente de muita competição: ToLink, Apple WebObjects etc

O Bom e o Ruim

- Muita inovação, muitas opções (bom)
- Mercado de “server-side” era muito fragmentado (bom)
- Risco de ficar “preso” a um fornecedor (ruim)
- Muitas soluções caras (preço da inovação, ruim)

1999 – 2003

- Especificações começam: JCP
- Non-standard não podiam competir com uma plataforma J2EE padronizada:
- ORM versus EJB entity beans
- Velocity versus JSP
- WebObjects versus web tier

1999 – 2003: Bom e Ruim

- Cria-se um grande mercado
- Fornecedores com opções fechadas diminuiram, mas não foram eliminados
- Controle (JCP) estrangula a Inovação
- Idéia de que todos os business objects (EJB) deveriam ser distribuídos
- 2003: início de aplicações Java “leves” (lighter-weight solutions). Exemplo: a adoção em massa do Tomcat
- Os projetos open-source ajudaram a definir o futuro da plataforma e trouxeram inovação: Eclipse, Spring, AspectJ

As “armadilhas” ou Ideas que trouxeram complexidade no J2EE

- Design by committee: tudo precisava ser padronizado. JCP fala de forma privada; composto de grandes fornecedores de software
- Ferramentas que traziam excessiva complexidade
- Não abertura para outras plataformas, a abordagem “Java puro sangue”
- “Desenvolvedores são estúpidos e devem ser controlados”
- “Soluções complexas são melhores”
- “Eu preciso de uma solução que habilite minha arquitetura corporativa”

Os comitês queriam padronizar tudo em Java. Uma verdadeira obsessão do JCP. Citando, Jim Waldo, um engenheiro da Sun:

Reverenciando tudo de bom que os padrões nos trazem, eu acredito que, de certa forma, trazem um grande dano para nossa indústria e a ciência. Ele transforma discussões técnicas em debates políticos. Isto gerou um problema de entendimento do verdadeiro significado dos padrões. Pior de tudo, nos levou a fazer escolha tecnológicas absurdas, que nunca haviam sido implementadas e que não eram a escolha adequada para os problemas que tínhamos em nossas mãos

Exemplos do que foi dito acima:
- CORBA (1990s)
- CMP entity beans
- Muitos ignoraram o sucesso do “TopLink”

O bom exemplo do Linux

Linux é um exemplo de inovação que não fica restrita aos processos de padronização, que são restritos ao Kernel. Na minha opinião, se o processo de desenvolvimento do Linux fosse semelhante ao do Java não teríamos uma distribuição como o Ubuntu.

Qual deveria ser o papel do JCP?

Criar um “mercado” onde as inovações podem ser desenvolvidas a partir dos padrões. Inovação a partir de comitês (innovation by committee), historicamente, produzem resultados medíocres.

Por que a complexidade é “boa”?

- Temos uma tendência natural de achar que “sem dor não haverá ganhos”, ou o adágio “no pain no gain
- Síndrome da “Nova Roupa do Imperador”, ou seja, “não entendi muito bem, é muito complexo, então deve ser bom!”

“É a economia, estúpido!”

[nota do autor do blog: você já leram várias vezes esta frase aqui. E ela é citada por Rod Johnson como um dos motivos de mudanças no horizonte da complexidade. Veja o post sobre a versão 6 da plataforma Java]

- Em um cenário de pós-recessão temos que repensar os investimentos. Economia, economia.
- “Hemline Index”
Economista americano, George Taylor (1926). Relacionou a “exuberância irracional” de nossas ações (pessoas e empresas), com a exuberância da economia.

Inovações da comunidade que fizeram diferença

- Spring
- Hibernate
- Ruby on Rails
- Django
- Grails

Da comunidade open-source para simplificar a vida dos desenvolvedores!

Previsões

- Não teremos um retrocesso para um sistema com complexidade desnecessária
- Portfolio complexos não tem mais espaço. Foco na agilidade, simplicidade. Economia, economia.
- Processo Ágeis vieram para ficar
- Desenvolvedores ainda terão, e precisarão ter mais poder e mais responsabilidades
- Ainda é necessário termos uma plataforma Java que permita uma maior produtividade
- Tradicionais aplicações residentes no servidor cairão em desuso

Resumo

- A pessoa-chave para as mudança é o desenvolvedor
[nota do autor do blog: o desenvolvedor, o arquiteto tem que exercitar o Pensamento Crítico e não aceitar a complexidade simplesmente porque algum comitê, mesmo que seja o JCP, assim o definiu]
- Veja as alternativas, simplifique, estude e tire suas próprias conclusões. Não utilize uma solução porque alguém decidiu que esta é “a” solução

Category: Architecture, JavaEE, lightweight | Tags:

Com vocês, Java EE 6… …e a Oracle? (silêncio)

javalogoV6 Com a aprovação da especificação Java EE na semana passada, a Sun acaba de anunciar a liberação da versão 6 da sua plataforma Java. É o resultado de um trabalho de 3 anos, com forte apelo na redução do volume de código a ser escrito, além de um conjunto de novas funcionalidades  já iniciadas na versão anterior.

RESTful Web services, dependency injection (JSR-330) e annotations para Servlets são algumas das novas funcionalidades que irão facilitar a vida dos milhões de desenvolvedores Java no mundo (embora alguns não concordem, menos código = mais qualidade de vida).

No artigo que apresenta uma introdução à versão 6, Ed Ort lista os principais objetivos desta nova versão:

More Flexible Technology Stack. Over time, the Java EE platform has gotten big, in some cases too big for certain types of applications. To remedy this, Java EE 6 introduces the concept of profiles, configurations of the Java EE platform that are designed for specific classes of applications. A profile may include a subset of Java EE platform technologies, additional technologies that have gone through the Java Community Process, but are not part of the Java EE platform, or both. Java EE 6 introduces the first of these profiles, the Web Profile, a subset of the Java EE platform designed for web application development. The Web Profile includes only those technologies needed by most web application developers, and does not include the enterprise technologies that these developers typically don’t need.
In addition, the Java EE 6 platform has identified a number of technologies as candidates for pruning. These candidates include technologies that have been superseded by newer technologies or technologies that are not widely deployed. Pruning a technology means that it can become an optional component in the next release of the platform rather than a required component.
More extensibility points and service provider interfaces as well as web tier features such as support for self-registration makes the platform highly extensible.
Enhanced Extensibility. Over time, new technologies become available that are of interest to web or enterprise application developers. Rather than adding these technologies to the platform — and growing the platform without bounds — Java EE 6 includes more extensibility points and more service provider interfaces than ever before. This allows you to plug in technologies — even frameworks — in your Java EE 6 implementations in a standard way. Once plugged in, these technologies are just as easy to use as the facilities that are built into the Java EE 6 platform.
Particular emphasis on extensibility has been placed on the web tier. Web application developers often use third-party frameworks in their applications. However, registering these frameworks so that they can be used in Java EE web applications can be complicated, often requiring developers to add to or edit large and complex XML deployment descriptor files. Java EE 6 enables these frameworks to self-register, making it easy to incorporate and configure them in an application.
Usability improvements in many areas of the platform makes it even easier to develop web and enterprise applications.
Further Ease of Development. Java EE 5 made it significantly easier to develop web and enterprise applications. For instance, Java EE 5 introduced a simpler enterprise application programming model based on Plain Old Java Objects (POJOs) and annotations, and eliminated the need for XML deployment descriptors. In addition, Enterprise JavaBeans (EJB) technology was streamlined, requiring fewer classes and interfaces and offering a simpler approach to object-relational mapping by taking advantage of the Java Persistence API (informally referred to as JPA).

- Uma “Stack” com mais flexibilidade: em português claro, ele diz o que já sabíamos. Java EE ficou pesada, com uma complexidade desnecessária para algumas aplicações. Foi necessário então flexibilizar um pouco a plataforma e a Sun (JCP) decidiu introduzir o conceito de “profiles“. “Profiles” definem um conjunto de funcionalidades mínimas, na imensidão que se tornou Java EE, e liberam este conjunto para aplicações mais específicas. O primeiro “profile” liberado foi o “Web Profile“. Outros virão… …Vale lembrar que isto já foi tentado com o J2ME e não tiveram muito sucesso. Desta vez eu acho que vão acertar.

- Enhanced Extensibility. Com muito atraso, na minha opinião, a Sun percebeu a importância das extensões que enriquecem e trazem inovação à sua plataforma de desenvolvimento. O contexto muito fechado do JCP, por um lado mantém um padrão na linguagem e funcionalidades mas, em um trade-off inevitável, não permite que muitas inovações enriqueçam a plataforma. De acordo com Ed Ort Java EE 6 inclui mais “pontos de extensibilidade” de forma a acomodar mais facilmente outros frameworks. É ver para crer.

- Facilidade no processo de desenvolvimento. Já citado acima. O Java EE 5 já tinha feito muitos progressos na tentativa de facilitar a vida do desenvolvedor. Alguns exemplos são as annotations e simplificação no desenvolvimento de Enterprise JavaBeans (EJB), com um menor número de classes e interfaces. Particularmente isto trouxe muitos benefícios na utilização da Java Persistence API (JPA). Além da padronização das annotations para dependency injection, o processo de deployment também foi muito simplificado. Você pode adicionar um enterprise bean diretamente em um WAR, sem precisar empacota-lo em um JAR, e este em um EAR. Demorou!

Não quero fazer uma análise da nova versão do Java EE. Recomendo a leitura deste artigo da InfoQ e uma análise detalhada do ServerSide.com.

E a Oracle?

Como sempre, eu estou convicto que as questões técnicas são importantes, mas o contexto, às vezes faz toda diferença. A pergunta de US$ 7,4 bilhões (valor pago pela Oracle pelo controle da Sun), é: “E a Oracle nisto tudo? Qual será o impacto da aquisição no processo de desenvolvimento do Java?”.

Particularmente, não vejo como a compra pela Oracle possa atrapalhar alguma coisa nos planos da Sun. Java é uma plataforma consolidade e a Oracle, agora mais do que ninguém, quer que a linguagem se consolide mais ainda. A abordagem que parece que está sendo adotada, na minha modesta opinião está corretíssima: “Vamos simplificar!

By the way, lembrem-se que a União Européia continua embargando a fusão. E ela (Oracle) resolveu apelar para seus clientes europeus:

- (Safra Catz, presidente da Oracle) “Ericsson, Vodafone, banco BBVA, vocês podem ir comigo na audiência da comissão européia e me ajudar a convencer aqueles senhores que a compra da Sun é importante e não representa perigo para o mercado”

- (Ericsson, Vodafone, BBVA e mais 5 grandes clientes europeus) “Claro Mrs. Catz, iremos com prazer. Pode contar conosco!”

A coisa está complicada e a Oracle vai precisar de toda ajuda possível. Até o representante do departamento de justiça dos EUA acompanhou a presidente da gigante americana, ajudando-a na defesa. Mais detalhes em “Preocupação no Iate do CEO da Oracle“.

É melhor que a S. Catz traga uma boa notícia para o Sr. Lawrence J. Ellison. Ele, como todo mortal, merece um final de semana tranquilo no seu iate.

Mesmo sem um barco daqueles, bom final de semana a todos!

Davi


Category: JavaEE, Oracle, SUN | Tags:

Sim, agora seu bebê pode utilizar o Twitter

Este é um off-topic para mostrar porque inovação não significa criar algo totalmente novo (cada vez mais difícil hoje em dia). Melhorar algo que já existe, trazer para o mundo real uma idéia como esta abaixo… …isto é inovação. Não foi à toa que ganhou o prêmio “2009 Innovative and Creative Applications competition” de uma universidade da Bélgica.

A idéia (by FastCompany.com) que eles tiveram foi integrar um brinquedo educativo ao sistema de envio de mensagens curtas pelo Twitter. Colocaram fotos do pai e da mãe do bebê e, quando este movimenta o botão com a foto da mãe por muito tempo, uma mensagem do tipo “Olá mãe, estou com saudades…” é enviada pelo Twitter.

Convenhamos, para pais ansiosos, isto não ajuda em nada. O texto não menciona mas eu acredito que é mais um passo importante em direção à “Pervarsive Computing” ou “Ubiquitous Computing“, com todas as vantagens e desvantagens que isto pode trazer.

INCA Award 2009 WINNER: Twoddler from IBBT on Vimeo.

Category: innovation | Tags:

Já conhecem o Google Goggles? Mais um motivo para ter um celular com Android

“A good sketch is better than a long speech”

–Napoleão Bonaparte

A idéia não é nova. Já vi outras aplicações similares… …mas esta é do Google!

A máxima de “uma imagem vale mais do que mil palavras” é uma tradução livre da frase acima de Napoleão Bonaparte.

A tecnologia de “Visual Search” acaba de ganhar uma aplicação do gigante de buscas: Google Goggles.

googlegoggles01

Com seu celular Android, aponte a câmera para um objeto, um livro, um local, e o Google Goggles traz as informações que ele conseguir localizar na sua imensa base de dados.

Exemplo:

- aponte para uma atração turística, uma loja e ele trará a localização, dados geográficos etc

- no rótulo de um vinho, a origem, safras etc

- se é uma pintura, o autor(a) da obra de arte

- etc…

As possibilidades são quase infinitas (além de ser mais um bom motivo para você ter um celular com Android).

Category: google, innovation

BPM: Como chegamos até aqui?

bpm-history

“A tool is not necessarily better because it is bigger. A tool is best if it does the job required with a minimum of effort, with a minimum of complexity, and with a minimum of power.” — Peter Drucker

O Burton Group define assim Business Process Management (BPM):

BPM é uma disciplina que gerencia processos de negócio explicitamente como ativos estratégicos

Em um artigo interessante, Richard Watson apresenta o gráfico acima mostrando um pouco a evolução do que hoje chamamos de gerenciamento de processos de negócio.

E a discussão mais interessante é por que muitos ainda acham que BPM é mais uma ferramenta? Talvez porque os fornecedores nos façam pensar que é?

Estamos inseridos em sistemas e relações de tal forma complexas que, de fato, é muito difícil visualizar e monitorar processos de negócio sem a ajuda de ferramentas. Mas, a exemplo de SOA, você se engana quando afirma que está implementado BPM porque comprou o pacote de soluções de seu fornecedor.

Na minha opinião, BPM está relacionada, primeiramente, a decisões estratégicas. Um  dos motivos é que não se inicia um movimento nesta direção sem o envolvimento de quase todas (ou todas) as áreas da empresa. Não consigo visualizar “BPMs departamentais”. As unidades de negócio raramente são “ilhas isoladas” do resto da corporação.

Conhecer e entender os ganhos que BPM traz é importante até para que você possa fazer juízo de valor e concluir: faz sentido implementar (ou não faz sentido) na minha empresa.

Abcs e bom final de semana!

Category: bpm | Tags:

Cloud Computing: Open-source Cloud e a Ajuda da Microsoft

Este post traz duas boas notícias para o mundo da “Cloud Computing”. A primeira é o anúncio da empresa de soluções SOA open-source, WSo2, já citada várias vezes neste blog, e a outra vem da Microsoft e de sua plataforma de Cloud, Azure.
wso2cloud

WSo2 Lança sua Plataforma de “Cloud Computing”

Para quem não conhece, a WSo2 é uma companhia que desenvolve soluções para a arquitetura orientada a serviços (SOA) no modelo open-source. Tem escritório no longíquo Sri Lanka (terra natal do seu fundador) e nos EUA e Europa.

A plataforma de “Cloud Computing” que eles lançaram permite que as empresas criem sua própria “nuvem”, as chamadas “Private Clouds“, com um custo (direto) de software bastante reduzido.

A solução de Governance as a Service é um dos serviços já disponíveis para serem utilizados (veja restrições abaixo).

wso2gaas A idéia é que sua empresa possa fazer o setup de uma solução de Governança para o ambiente SOA (SOA Governance Registry) diretamente na “nuvem” da WSo2.

Veja o que é possível implementar:

- Armazenar services, WSDLs, Schemas e policies, facilitando a descoberta (discovery) dos serviços e suas restrições

- Gerenciar o ciclo de vida dos serviços
- Manter múltiplas versões dos serviços

- Acompanhar as dependências e associações entre os WSDLs e os Schemas

- Dar permissões apropriada para os usuários

As restrições para utilização são:

  • até 5 usuários
  • não mais do que 100 recursos armazenados
  • não mais do que 100 recursos acessados / dia
  • cada recurso pode ter, no máximo, 1 MB

E estão preparando o lançamento do 2o. produto: “Indentity as a Service”!

Importante: como informou esta notícia da InformationWeek USA, o WSO2 suporta o uso de seu produto como uma “Amazon Machine Image“, o formato de máquina virtual do EC2/Amazon Cloud. É compatível também com “VMware ESX Server virtual machine” e, claro, no open source Linux KVM virtual machine.

A Cloud da Microsoft, Azure, agora pode rodar “Ruby on Rails”

azureinterop

A notícia vem do blog da Mary-Jo Foley. No final de Novembro (25/11/2009) o arquiteto da Microsoft, Simon Davies, anunciou que já tinha um exemplo do “Ruby on Rails” rodando em uma “nuvem” do Microsoft Azure (veja aqui “ao vivo”).

Em um movimento acertado, a Microsoft tem feito um esforço para que sua “nuvem” tenha compatibilidade com vários produtos e soluções open-source. Alguns exemplos de “Azure compatible” são:

  • Ruby
  • PHP e ferramentas baseada no Eclipse
  • MySQL
  • MediaWiki
  • MemCached
  • Tomcat
  • SugarCRM tem sua versão para o Azure (!)

e claro, o seu “Service Bus and Access Control services”, antes conhecido como “.NET Services”, agora roda diretamente no Windows Azure e é chamado agora de “Windows Azure platform AppFabric Service” (nome nada fácil…). Mais detalhes aqui e aqui.

Como na discussão levantada no post da Mary-Jo, não imagino que exista motiva de desconfiança por trás desta iniciativa da Microsoft em suportar soluções open-source em sua “nuvem”.

No meu ponto de vista, não importa para o usuário, e até mesmo para o desenvolvedor, em que “nuvem” sua sua aplicação baseada no “Ruby on Rails” ou seu open-source SugarCRM, está sendo executado.

O que você acha?