Dentro dos vários cursos que eu venho ministrando nos
últimos anos como instrutor e consultor, tenho um que se chama JSE Módulo
I com o objetivo de introduzir os participantes ao mundo Java. O curso tem
um conteúdo muito bacana, apresentando o Java desde seu histórico, download,
configuração, IDE’s, conceitos, implementações OO e API diversas como JDBC, I/O,
Swing etc. Já tive muitas experiências interessantes com esse curso em
específico porque é nele que eu me deparo confrontando candidatos
universitários, programadores experientes, responsáveis de TI e até alguns
curiosos perdidos sem rumo na vida, todos com aqueles olhinhos para o quadro
esperando o primeiro dia de aula para perguntar aquela mesma questão…
Todas as vezes que eu inicio este curso básico de Java sou questionado sobre o porquê do vasto volume de informações e a de sempre comentada “sopa de
letrinhas”, jPra-ca, jPra-la, jAqui, jAli, jNão-sei-o-quê. Em geral, as pessoas se
sentem muito perdidas, sem saber por onde começar. A pergunta vem de pessoas diferentes, com experiências, visões e
questionamentos diferentes. Devido à essa variedade de perfis, ao logo dos anos tive que aprender a ter um
certo “jogo de cintura” na hora da resposta, tendo com objetivo em primeiro
lugar saciar a dúvida no contexto do candidato e, em segundo lugar, não despejar
15 anos de evolução da tecnologia em um primeiro contato com o aluno.
É
justamente isso que eu gostaria de abordar neste artigo, alguns dos pontos mais
comuns que venho desenvolvendo ao responder esse tipo de questionamento em salas
de aula, consultorias, palestras etc. Seguem abaixo os tópicos mais importantes,
em uma seqüência gradativa, que venho usando para construir esta resposta na
cabeça da galera.
Java é uma tecnologia
A primeira coisa a se entender é que Java é uma tecnologia abrangente e
continuamente crescente. Ela é independente de plataforma, ou seja, a tecnologia
Java não está amarrada com nenhum hardware ou sistema operacional em específico,
como vemos acontecer com outras tecnologias. Esse fator foi fundamental para sua
rápida adoção e popularização no mundo. Atualmente está disponível para ser
usada nos grandes “players” denominados: desktop, web, dispositivos
móveis inteligentes e cartões de crédito.
A filosofia da
tecnologia é ser disponibilizada para o uso em qualquer lugar provido de capacidades computacionais. Ou seja, qualquer dispositivo eletrônico
provido de capacidades de processamento, gerenciamento de memória e
conectividade é um possível candidato a rodar Java. O passado e as expectativas
futuras nos provam isso. Vejam o que aconteceu, por exemplo, com os aparelhos celulares,
que passaram de mero receptores de sinais para poderosos dispositivos com
capacidades computacionais. Sendo assim, foram habilitados para rodar Java.
Para
aqueles que ainda não conseguiram visualizar, esta mesma história está se
repetindo hoje com as os aparelhos de televisão, que também estão deixando de
ser mais um mero dispositivo, agregando capacidades computacionais. Como não
poderia ser diferente, já existem movimentações e bases concretas que o
Java será habilitado para rodar nestes futuros televisores inteligentes. Em resumo
seria isto:
Java é uma tecnologia multiplataforma que não tem amarrações com
provedores de hardwares ou sistemas operacionais.
Esse fato é possível
porque a tecnologia é interpretada por um agente intermediário chamado
de “máquina virtual”, que é habilitada previamente na plataforma de
execução. Com isso, poderíamos conceitualmente afirmar que uma solução escrita
com a tecnologia Java não contém nenhum tipo de amarrações específicas da
plataforma de execução, podendo ser portavelmente executado, livremente, em
qualquer lugar.
Java não é uma linguagem de programação
Essa pergunta é muito comum, as pessoas sempre associam uma
linguagem com a sua tecnologia. Mas, não!!!, Java não é uma linguagem de
programação! Java é uma
tecnologia que possui muitas linguagens de
programação. Segue um resumo de algumas delas:
- Padrão
– linguagem padrão orientada a objetos que foi a primeira a ser idealizada com a
tecnologia. - JavaServer
Pages – linguagem de programação voltada para páginas web
dinâmicas, baseadas em componentes servlets. - AspectJ
– linguagem de programação pertencente ao paradigma de orientação a aspectos. -
Groovy e
Ruby – linguagens scripts dinâmicas voltadas para produtividade. - Scala
– linguagem de programação denominada moderna, pertencente ao paradigma
da programação funcional. - JavaFX
– linguagem de script utilizada no desenvolvimento de aplicações RIAs (Rich Internet Application)
Existem algumas outras que eu não descrevi, pois o importante é saber que
existem algumas opções de linguagem de programação que devem ser selecionadas ou
combinadas, objetivando implementar os determinados requisitos de uma
solução.
Java não é um RAD
Nos anos 90 houve uma popularização muito grande das ferramentas baseadas em ambientes RAD, e tenho percebido, ao longo dos
anos, que muitos novatos me questionando sobre o assunto. Estes
questionamentos são bem comuns naqueles vindos de ambientes plataformados e
proprietários, como Delphi e Visual Basic 6. Mas Java não é uma IDE ou uma RAD!!!
Java é uma tecnologia
que contém muitas ferramentas relacionadas a produtividade.
A questão é que a ideologia no Java sofre
alguma alteração, sendo que as filosofias de ambientes RAD se chocam com algumas
diretrizes e motivações que existem por trás da tecnologia Java.
Um
simples exemplo desse fato seria a questão da construção de interfaces gráficas
de usuários, conhecidas como GUI. Em ambientes RAD proprietários plataformados
existe uma certa facilidade na hora de arrastar e posicionar os componentes
visuais em um formulário GUI. O mesmo não acontece na tecnologia Java, porque as
GUI em Java deve ser construídas visando a portabilidade. Ou seja, no Java não é
comum usarmos “posicionamento absoluto” para os componentes visuais, porque não
temos como garantir a sua exatidão, devido aos diferentes controles de
renderização das diferentes plataformas.
Em Java, a diretriz é usar os “objetos
controladores de layout”, que são responsáveis por posicionar e
dar tamanho automaticamente para os componentes visuais, garantido, assim, máxima
portabilidade. Outras questões arquiteturais mais complexas que eu deixarei fora
do artigo também podem vir a complicar mais o assunto.
Mas, em resumo, existe,
sim, uma vasta e crescente linha de ferramentas para promover produtividade na
hora de implementar uma solução completa com Java, que devem ser previamente
avaliadas e selecionadas para serem conscientemente aplicadas. Antes disto, a
tecnologia deve ser razoavelmente entendida e dominada para se conseguir a
produtividade.
Organização da tecnologia
Toda a tecnologia Java está separada em agrupadores denominados pacotes, com
nomes específicos que fornecem fronteiras conceituais em uma macro-visão. Ou
seja, tudo na tecnologia Java está corretamente separado e organizado em pacotes
que refletem o lugar de sua aplicabilidade. Os pacotes são chamados de JSE, JEE,
JME e JavaFX. Segue um descritivo bem básico:
- Java Standard Edition – JSE –
recursos usados para construir soluções desktop. - Java Enterprise Edition – JEE recursos usados para
construir soluções em grande escala, normalmente usando o paradigma de
aplicações distribuídas. - Java Micro Edition – JME recursos usados
para construir soluções para dispositivos móveis como pagers, celulares,
smartphones, PDAs, screenphones, comunicators, high-end PDAs etc. No JME temos
dois novos leques atualmente em processo de evolução que refletem os novos
lugares que o Java sera usado TV-Digital e Midia Blu-ray. - JavaFX – recursos
usados para construir soluções usando a filosofia RIA Rich Internet
Applications.
A palavra “recursos” usada acima expressa uma série de coisas como, por
exemplo:
- Linguagens de programação.
- Kits de ferramentas para: desenvolvimento, testes, depuração e produção.
- Bibliotecas, componentes e frameworks.
- Padrões, diretrizes e boas práticas gerais.
Poderíamos exemplificar usando o mais básico de tudo que é o JSE:
O JSE consiste no pacote que agrupa coisas para dar soluções em aplicações
desktop. Ou seja, dentro do JSE existem opções de linguagens de
programações que podem ser selecionadas ou combinadas. Existem
opções de kits de ferramentas usado para o
desenvolvimento, depuração, teste e produção. Existem também diversas opções
de bibliotecas, componentes e frameworks
já prontos que podem ser agregados e combinados na solução. Existe uma série de
documentos que apresentam padrões, diretrizes e
práticas que podem ser usadas na hora de escrever uma solução
desktop. Esses documentos devem ser lidos, entendidos e aplicados de acordo com
a necessidade.
Regimento por especificação
Umas das grandes novidades que Java introduziu no mercado desde o seu início
é que todas as tecnologias envolvidas são baseadas em especificações. Isso quer
dizer que não existe uma empresa proprietária “por trás do Java”, detendo seu
controle total. Existe um órgão padrão independente, chamado Java Communty Process JCP, que é
responsável por determinar as evoluções de todas as tecnologias, visando
encaminhar o Java para um caminho de crescimento voltado a um padrão global, onde qualquer pessoa/empresa interessada possa ter livre voto ou sugestão.
O
que eu quero dizer é que a tecnologia Java não é controlada por uma empresa só,
ela é controlada por todos nós! Qualquer pessoa, de qualquer empresa,
pode fazer um pedido na tecnologia Java, desde que descreva, seguindo as normas no JCP, dizendo “o que quer”, “por que quer”, “e como seria
isso”. Temos vários casos que algumas tecnologias Java foram criadas,
retrocedidas ou alteradas quando não estavam sendo aceitas no mercado devido a
uma série de fatores diferenciados. Alguns exemplos marcantes desses fatos são
as tecnologias JSF,
EJB e JPA. Quando se usa
uma tecnologia baseada em especificação, quer dizer que a sua aplicação final
está escrita em um padrão conhecido, que resulta no fato principal de ter sua
solução completamente livre e portável de fornecedor de tecnologia. Para
entender isso, vamos exemplificar usando a especificação JDBC:
Java Data
Base Connection é a especificação que define a tecnologia padrão para
se fazer uma solução escrita em Java se conectar em um banco de dados
relacional. O JDBC é nada mais, nada menos, que alguns documentos que descrevem
como é esse padrão. Muito bem, qualquer empresa fornecedora de banco de dados
que tenha o interesse de tornar seu banco de dados acessível com Java
é obrigado a implementar esse padrão! Quais são as implicações disso:
- Aprendizado
Unificado – quando se aprende a conectar com o banco de dados em
Java, você aprende a usar a especificação uma única vez, porque todos os
vendedores de bancos de dados têm que implementar a mesma “forma padrão” de
comunicação. Quando se usa uma tecnologia proprietária é necessário
aprender diferentes formas de se conectar a banco de dados de diferentes
vendedores, perdendo-se, assim, todo investimento financeiro de tempo, conhecimento e
dinheiro.
- Portabilidade – existe a
possibilidade de ser trocar um banco de dados de uma empresa por outra sem
quebrar uma linha de código na solução final. Quando se usa uma tecnologia
proprietária, a troca do tipo de banco de dados necessita da alteração do
sistema final, mesmo utilizando padrões de persistências já conhecidos na
engenharia de software.
- Independência – a equipe de desenvolvimento pode usar qualquer banco de dados para construir o produto e o
cliente final comprador da solução em Java não é obrigado a usar determinado
banco de dados selecionado pela empresa de desenvolvimento. Se o cliente final
tem condições de pagar um bom banco, ele deve fazer, senão, ele tem a liberdade
de usar um free. Quando se usa uma tecnologia proprietária as empresas de
desenvolvimento acabam obrigando o cliente final da solução a usar aquele
determinado banco de dados.
- Concorrência – fornecedores
de banco de dados devem concorrer entre si no mercado. Os clientes finais de
soluções corporativas não podem ser obrigados a usarem esse ou aquele banco de
dados. Eles devem ter aplicações portáveis em mãos e assim estarão abertos a
usar/comprar aquele determinado banco que for melhor. Hoje ele pode começar com
um free e em um futuro breve mudar para um caro e robusto. Em outras palavras, o
vendedor de solução em Java não deve se meter nessa decisão.
Existem outros fatores positivos nas questões da especificação que eu
deixarei de fora neste artigo. Mas entenda que, na tecnologia Java, os players
envolvidos estão livres e independentes entre si para concorrer e trabalhar em
cima da suas áreas de atuação. Para outras informações, vejam outro artigo
meu falando sobre o assunto.
Já parou para pensar sobre o porquê da possibilidade de se comprar outro pneu
para seu carro? Toda a loja de pneus tem pneus para seu carro. Sabe por quê? Porque existe uma especificação! Já pensou o caos que seria se você comprasse um
carro com pneus específicos e proprietário? Ele poderia colocar o preço que ele
quisesse, certo? E se a empresa fechasse? Acho que você teria que comprar outro
carro porque não encontraria pneus para ele Você já se tocou que tudo ao seu
redor é baseado em especificações? As especificações são boas para todos: fabricantes
de carros, fabricante de pneus, vendedores de pneus e compradores finais!
Em Java funciona assim, tudo é especificação!
Engenharia de software
Um dos fatores de peso que cooperam diretamente para essa grande curva de
aprendizado é que as plataformas Java foram completamente
concebidas baseadas em conceitos e técnicas da Engenharia de Software e
atualmente tem evoluído e cooperado para o seu desenvolvimento. O que acontece,
na maioria dos casos, é que o candidato a aprender Java acaba se deparando com um
mundo totalmente novo e complexo, devido à falta de uma base sólida de
conhecimento sobre o assunto.
Ou seja, poderíamos afirmar que o inverso também é real: se uma pessoa tem conhecimentos básicos sobre assuntos relacionados com a Engenharia de Software, normalmente não apresentaria dificuldades para entrar na
“dança”. Neste artigo
sobre o assunto, eu listo 26 itens básicos que podem ser pesquisados e
aprendidos de forma gradativa, de acordo com a necessidade.
Objetivo
Algo muito importante a se entender é que as plataformas e suas constantes
evoluções têm o objetivo de fornecer todas as características necessárias de uma infraestrutura robusta e segura em especificações para que se possa
implementar uma solução de pequeno, médio e, principalmente, grande porte. O que as pessoas precisam visualizar no momento em que se deparam com o Java é que
dentro das plataformas existem produtos/especificações previamente selecionados
que expressam as necessidades básicas de uma equipe para implementar uma solução
completa.
Para e pense!
Imagine um contexto em que uma empresa precise de uma
solução automatizada que englobe um sistema desktop usado internamente,
integrado com outro sistema web externamente usado e que essas duas aplicações
troquem mensagens SMS com outras aplicações sendo executadas em celulares. Tudo
isso envolvendo colaboradores, clientes, fornecedores e diretores. Complicado?
Sim, bastante! Bom, no Java já temos isso resolvido! Ou seja, não é necessário
implementar nenhuma linha de código voltada à infraestrutura, o que se precisa
fazer é descobrir, aprender e integrar as determinadas tecnologias das
plataformas que resolvem os requisitos do contexto citado. Trocando as palavras,
o objetivo então é oferecer aos desenvolvedores uma opção de tecnologia com o
intuito de reduzir tempo e custo no desenvolvimento dos mais variados tipos de
soluções possíveis.
Java é uma solução
Outra coisa importante de lembrar é que ao
entrar no mundo Java as pessoas deixam de ser meros “programadores” para se
tornarem, então, “solucionadores de problemas”. Esse sentimento de ser apenas um
“programadorzinho que sabe fazer if, else, while” tem que ser completamente
colocado de lado e uma nova visão precisa ser implantada na cabeça do indivíduo. O que eu quero dizer é as pessoas precisam ampliar a sua própria visualização de
como as soluções podem ser construídas, adequando isso para a realidade que a tecnologia Java oferece.
Hoje estamos vendo a televisão entrar como mais um
dispositivo habilitado com Java e, com ela, a promessa de muitas novas
oportunidades. E amanhã? Qual será o próximo dispositivo? Sem esse motivador, a
tecnologia Java nunca deixará de ser um monstro cheio de coisas complexas, cada
dia mais incompreendida.
Ficou com vontade de aprender mais de Java? Neste artigo
eu apresento quais são os passos iniciais. Eu termino por hoje meus amigos. O
artigo fica aberto para opiniões ou complementos. A paz a todos.