Alem do Java™: Novos Horizontes para o Desenvolvedor Phillip Calçado http://www.fragmental.com.br
Tentar entender como Java™ chegou a sua atual posição Avaliar a situação atual da Linguagem e Plataforma Java™ Entender como Java™ está se modificando à novas realidades Avaliar opções alternativas Objetivos Não São Objetivos Depreciar ou evangelizar sobre qualquer Linguagem ou Plataforma Prever o futuro Dizer o que fazer da sua vida/carreira Fazer você jogar todo software que desenvolveu ou possui fora (Tentar não ser apedrejado!) (Mas nada impede que aconteçam...)
Quem é Você? Pequena Introdução Como Chegamos Aqui? Problemas no Status Quo Além do Java: Como Reagir? Múltiplas Linguagens, Uma Plataforma Alternativas Hoje Conclusão Bibliografia, Links e Referências Agenda (A gente veio aqui pra beber ou conversar?)
(Quem é esse doido que veio falar mal de Java aqui?!?!) Phillip Calçado,  a.k.a.   Shoes Programador desde 1996 Com Java desde 2003  (“¡ adios, C++ !”) Coordenador do GUJ JUG Leader do RioJUG Consultor, instrutor, coach Diversos projetos open-source  (alguns chegaram até a ter uma versão 1.0!) Escritor ocasional  (http://www.fragmental.com.br) Aplicações para análise de risco, redes GSM, gestão de conteúdo, setor financeiro, biologia... A grande maioria utilizando Java EE Quem é Você?
Pequena Introdução ?
Java™ possui domínio de mercado, em 2003 75% dos desenvolvedores a utilizavam* Java™ é uma Linguagem de Programação e uma Plataforma de Software A maioria dos trabalhos revolucionários em vários segmentos na última década foi produzida com Java™, Linguagem e Plataforma A curva de aprendizado é um dos fatores críticos O uso de uma única Linguagem de Programação para toda e qualquer tarefa não tem se mostrado produtivo ou eficiente Novas tecnologias e paradigmas pedem recursos de meta-programação que não estão disponíveis na Linguagem Java™ Grandes programadores (os verdadeiros  java hackers ) e acadêmicos estão procurando e trabalhando em alternativas Pequena Introdução (Se você só puder ler dois slides, leia esses) * Dados da Sun Microsystems™, http://www.java.com
A corrente de desenvolvedores que procuram alternativas para aliviar os problemas encontrados no desenvolvimento em Java™ hoje está sendo chamada de Pequena Introdução (Se você só puder ler dois slides, leia esses)
Como Chegamos Aqui?
Como Chegamos Aqui? (De ônibus?) Arquitetura Cliente/Servidor não atendia a demanda: quem vinha do mainframe precisava de algo mais robusto e de melhor manutenção A Microsoft se beneficiava de seu monopólio em Sistemas Operacionais para conseguir o monopólio em desenvolvimento: quem paga a conta não gosta de monopólios A Internet impôs novos modelos de comércio, aplicações C/S ou Desktop estão fora, CGI não escala, linguagens de script (ASP/PHP/ColdFusion) não são integradas eficientemente: Java já estava no browser, pro servidor foi um pulo Orientação a Objetos se consolida no desenvolvimento de aplicações: a definição da UML, processos OO e ferramentas CASE tornam o paradigma popular e aplicável na prática
Como Chegamos Aqui? (...barca?) Por que Java e não C++? C++ é uma linguagem construída em cima de C, uma linguagem de infra-estrutura  (systems language),  não de aplicações Aritmética de ponteiros, herança múltipla, gerência manual de memória e outros recursos avançados são exigidos de iniciantes A Microsoft não ajudou com sua arquitetura de bibliotecas dinâmicas ( DLL Hell ) CORBA não pegou na prática, como criar aplicações distribuídas padronizadas? Falta de portabilidade
Como Chegamos Aqui? (...metrô nem pensar, né?)
 
Como Chegamos Aqui? (Ah! Claro..de rover...) Ter portabilidade como princípio levou Java™ onde outras linguagens nunca chegariam Ser uma especificação contribui para que muitos colaborem em conjunto Ambiente gerenciado e segurança são necessários e/ou muito úteis em uma na maioria dos ambientes Ter que aprender apenas uma Linguagem/Plataforma é muito mais barato e cômodo Mas... É Java™ a Panacéia das Linguagens de Programação?
Problemas no Status Quo http://www.garbett.org/?q=node/25
Problemas no Status Quo (Houston...) Sinais de que existe algo errado: Complexidade crescente Quantos frameworks são necessários para trocar uma lâmpada? Revoluções (não  evoluções ) constantes, frequentemente  downsizing JSP -> MVC JNDI -> Depedency Injection BMP/CMP -> JDO/Hibernate Gambiarras constantes e crescentes AOP Excesso de XML Infra-Estrutura muito exigente Quantos % do seu código lida com o problema de Negócios e quanto lida com configurações, recursos e outras coisas? Muletas para o Desenvolvedor Desenvolver Java EE™ sem nenhuma geração de código não é produtivo
Problemas no Status Quo (Houston...) Fatos Positivos: Java™ hoje é imbatível no desenvolvimento de  middleware A plataforma Java EE™ possui todos os recursos necessários para o desenvolvimento de aplicações de larga escala Mão-de-obra Java™ é geralmente fácil de achar e não mais cara como antigamente Existe um mercado enorme de fornecedores de soluções geralmente padronizadas, livres ou proprietárias em Java™ Centenas de casos de sucesso em dez anos de história facilitam a escolha da tecnologia
Problemas no Status Quo (Houston...) Fatos Negativos: Desenvolver  front-ends  Java™ não é tão simples ou produtivo quanto era com Linguagens especializadas, web ou desktop Aplicações que apenas fazem CRUD em Banco de Dados se tornam inchadas com Java™ A curva de aprendizado requer que alguém se torne hábil em muitas coisas antes de se tornar produtivo A Linguagem Java™ evolui devagar e faltam nela recursos necessários para facilitar algumas tarefas Java não oferece suporte direto à  Domain Specific Languages Ainda que seja bastante dinâmica, Java™ não oferece recursos como  closures  ou  continuations
Além do Java: Como Reagir?
Alem do Java: Como Reagir? (Dois ratos caíram num balde de leite, um desistiu e morreu afogado, o outro...) É preciso: Manter e ampliar a Comunidade, o grande diferencial Manter a JVM, um dos mais sofisticados softwares do mundo com uma grande base instalada Manter compatibilidade com o rico legado de aplicações e bibliotecas Continuar investindo em padronização e comitês abertos Diminuir a curva de aprendizado Separar aplicações simples de aplicações complexas Facilitar a criação de linguagens mais leves, produtivas e especializadas
Múltiplas Linguagens, Uma Plataforma
Múltiplas Linguagens, Uma Plataforma (Projeto Babel) Linguagens de Sistema: Possuem o necessário para a construção da infra-estrutura do sistema São geralmente complexas e genéricas C/C++ e Java Linguagens de Aplicação: Possuem a produtividade esperada para se criar aplicações São leves e menos exigentes Servem para utilizar os componentes criados pelas Linguagens de Sistema Ruby, Python, Groovy e outros Linguagem de Domínio: Como de Aplicação, mas trazem conceitos do domínio em si Geralmente são utilizadas por não-programadores Mini-linguagens do UNIX, dialetos XML e outros
Múltiplas Linguagens, Uma Plataforma (Projeto Babel) CLR não é a primeira nem única VM para várias linguagens A Microsoft apenas tentou replicar o mercado VB/C++ C# possui as mesmas limitações básicas de Java Mono poderia ser uma saída se não se fixasse tanto em copiar O futuro de Java™ é ser .Net?!?
Múltiplas Linguagens, Uma Plataforma (Projeto Babel) O que já está sendo feito? - Oficialmente JSR 223: Scripting for the Java TM  Platform – Public Review Implementação de Referência: PHP Implementação de JavaScript no Java™ 6 Mustang JSR 241: The Groovy Programming Language JSR 274: The BeanShell Scripting Language
Múltiplas Linguagens, Uma Plataforma (Projeto Babel) O que já está sendo feito? – Pela Comunidade BeanShell Groovy Velocity Rhino – JavaScript para JVM Projeto da Mozilla Foundation Jython – Python para a JVM Utilizado pela Bea para scripting no WebLogic Diablo JRuby – Ruby para a JVM Interpretador compatível com Ruby 1.8.2 100% Java™  Mais de 200 projetos de linguagens para a JVM De Smalltalk a COBOL Superwaba
Alternativas Hoje 2004 - New and Cool Java TechnologyJava Technology and Scripting Languages, the Next Generation: TS-1027, 2004
Alternativas Hoje (Não pergunte o que sua plataforma pode fazer por você...) Aplicações em Ruby Rails: Ambiente altamente produtivo mantendo qualidade Performance inferior e ainda baixa aceitação no Brasil Ainda não viável para mais que scripts ou web Aplicações em Python Forte comunidade Grande número de bibliotecas e frameworks Não é tão diferente de Java EE™ assim Aplicações em Java Linguagens de Script para aplicações simples Linguagens de script para interfaces Trails/Grails
Conclusão !
Conclusão Java™ está sofrendo com seu próprio peso Java™ não é simples como antigamente Java™ domina o mercado e não vai ser substituída facilmente Não existe Tamanho Único em Linguagens de Programação O ideal é que a Plataforma Java™ ofereça suporte melhor à linguagens, incluindo de Sistemas, Aplicações e DSLs Não existe plataforma hoje que compita com Java™ em todos os seus ambientes Existem plataformas que competem com Java em segmentos específicos Ainda que difícil prever o futuro, é iminente uma revolução no modo como aplicações são construídas
Bruce Tate & Justin Gehtland  – Beyond Java Bruce Tate & Justin Gehtland  – Better, Faster, Lighter Java Rod Johnson  – J2EE Developmen Without EJB Dave Thomas et al.  – Programming Ruby Dave Thomas et al.  – Agile Web Development with Rails Eric Evans  – Domain-Driven Design Andrew Hunt & David Thomas –  The Pragmatic Programmer Craig Larman  – Applying UML and Patterns Bertrand Meyer  – Object-Oriented Software Construction Martin Fowler  – Refactoring, PEAI, Analisys Patterns... Meilir Page-Jones  – Fundamentals of Object-Oriented Design Using UML Autores Recomendados
http://groovy.codehaus.org/ http://www.beanshell.org/ http://www.jython.org/ http://jruby.sourceforge.net/ http://www.mozilla.org/rhino/ http://www.robert-tolksdorf.de/vmlanguages.html http://www.martinfowler.com/articles/languageWorkbench.html http://developer.sun.com/learning/javaoneonline/2004/corej2se/TS-3814.html http://developer.sun.com/learning/javaoneonline/2004/newcooltech/TS-1027.html Para Saber Mais
Continua em...
Contato http://www.fragmental.com.br http://www.guj.com.br http://www.riojug. org [email_address]
Obrigado! Que Zahl os Acompanhe...

Além do Java - Maratona4Java 2005

  • 1.
    Alem do Java™:Novos Horizontes para o Desenvolvedor Phillip Calçado http://www.fragmental.com.br
  • 2.
    Tentar entender comoJava™ chegou a sua atual posição Avaliar a situação atual da Linguagem e Plataforma Java™ Entender como Java™ está se modificando à novas realidades Avaliar opções alternativas Objetivos Não São Objetivos Depreciar ou evangelizar sobre qualquer Linguagem ou Plataforma Prever o futuro Dizer o que fazer da sua vida/carreira Fazer você jogar todo software que desenvolveu ou possui fora (Tentar não ser apedrejado!) (Mas nada impede que aconteçam...)
  • 3.
    Quem é Você?Pequena Introdução Como Chegamos Aqui? Problemas no Status Quo Além do Java: Como Reagir? Múltiplas Linguagens, Uma Plataforma Alternativas Hoje Conclusão Bibliografia, Links e Referências Agenda (A gente veio aqui pra beber ou conversar?)
  • 4.
    (Quem é essedoido que veio falar mal de Java aqui?!?!) Phillip Calçado, a.k.a. Shoes Programador desde 1996 Com Java desde 2003 (“¡ adios, C++ !”) Coordenador do GUJ JUG Leader do RioJUG Consultor, instrutor, coach Diversos projetos open-source (alguns chegaram até a ter uma versão 1.0!) Escritor ocasional (http://www.fragmental.com.br) Aplicações para análise de risco, redes GSM, gestão de conteúdo, setor financeiro, biologia... A grande maioria utilizando Java EE Quem é Você?
  • 5.
  • 6.
    Java™ possui domíniode mercado, em 2003 75% dos desenvolvedores a utilizavam* Java™ é uma Linguagem de Programação e uma Plataforma de Software A maioria dos trabalhos revolucionários em vários segmentos na última década foi produzida com Java™, Linguagem e Plataforma A curva de aprendizado é um dos fatores críticos O uso de uma única Linguagem de Programação para toda e qualquer tarefa não tem se mostrado produtivo ou eficiente Novas tecnologias e paradigmas pedem recursos de meta-programação que não estão disponíveis na Linguagem Java™ Grandes programadores (os verdadeiros java hackers ) e acadêmicos estão procurando e trabalhando em alternativas Pequena Introdução (Se você só puder ler dois slides, leia esses) * Dados da Sun Microsystems™, http://www.java.com
  • 7.
    A corrente dedesenvolvedores que procuram alternativas para aliviar os problemas encontrados no desenvolvimento em Java™ hoje está sendo chamada de Pequena Introdução (Se você só puder ler dois slides, leia esses)
  • 8.
  • 9.
    Como Chegamos Aqui?(De ônibus?) Arquitetura Cliente/Servidor não atendia a demanda: quem vinha do mainframe precisava de algo mais robusto e de melhor manutenção A Microsoft se beneficiava de seu monopólio em Sistemas Operacionais para conseguir o monopólio em desenvolvimento: quem paga a conta não gosta de monopólios A Internet impôs novos modelos de comércio, aplicações C/S ou Desktop estão fora, CGI não escala, linguagens de script (ASP/PHP/ColdFusion) não são integradas eficientemente: Java já estava no browser, pro servidor foi um pulo Orientação a Objetos se consolida no desenvolvimento de aplicações: a definição da UML, processos OO e ferramentas CASE tornam o paradigma popular e aplicável na prática
  • 10.
    Como Chegamos Aqui?(...barca?) Por que Java e não C++? C++ é uma linguagem construída em cima de C, uma linguagem de infra-estrutura (systems language), não de aplicações Aritmética de ponteiros, herança múltipla, gerência manual de memória e outros recursos avançados são exigidos de iniciantes A Microsoft não ajudou com sua arquitetura de bibliotecas dinâmicas ( DLL Hell ) CORBA não pegou na prática, como criar aplicações distribuídas padronizadas? Falta de portabilidade
  • 11.
    Como Chegamos Aqui?(...metrô nem pensar, né?)
  • 12.
  • 13.
    Como Chegamos Aqui?(Ah! Claro..de rover...) Ter portabilidade como princípio levou Java™ onde outras linguagens nunca chegariam Ser uma especificação contribui para que muitos colaborem em conjunto Ambiente gerenciado e segurança são necessários e/ou muito úteis em uma na maioria dos ambientes Ter que aprender apenas uma Linguagem/Plataforma é muito mais barato e cômodo Mas... É Java™ a Panacéia das Linguagens de Programação?
  • 14.
    Problemas no StatusQuo http://www.garbett.org/?q=node/25
  • 15.
    Problemas no StatusQuo (Houston...) Sinais de que existe algo errado: Complexidade crescente Quantos frameworks são necessários para trocar uma lâmpada? Revoluções (não evoluções ) constantes, frequentemente downsizing JSP -> MVC JNDI -> Depedency Injection BMP/CMP -> JDO/Hibernate Gambiarras constantes e crescentes AOP Excesso de XML Infra-Estrutura muito exigente Quantos % do seu código lida com o problema de Negócios e quanto lida com configurações, recursos e outras coisas? Muletas para o Desenvolvedor Desenvolver Java EE™ sem nenhuma geração de código não é produtivo
  • 16.
    Problemas no StatusQuo (Houston...) Fatos Positivos: Java™ hoje é imbatível no desenvolvimento de middleware A plataforma Java EE™ possui todos os recursos necessários para o desenvolvimento de aplicações de larga escala Mão-de-obra Java™ é geralmente fácil de achar e não mais cara como antigamente Existe um mercado enorme de fornecedores de soluções geralmente padronizadas, livres ou proprietárias em Java™ Centenas de casos de sucesso em dez anos de história facilitam a escolha da tecnologia
  • 17.
    Problemas no StatusQuo (Houston...) Fatos Negativos: Desenvolver front-ends Java™ não é tão simples ou produtivo quanto era com Linguagens especializadas, web ou desktop Aplicações que apenas fazem CRUD em Banco de Dados se tornam inchadas com Java™ A curva de aprendizado requer que alguém se torne hábil em muitas coisas antes de se tornar produtivo A Linguagem Java™ evolui devagar e faltam nela recursos necessários para facilitar algumas tarefas Java não oferece suporte direto à Domain Specific Languages Ainda que seja bastante dinâmica, Java™ não oferece recursos como closures ou continuations
  • 18.
    Além do Java:Como Reagir?
  • 19.
    Alem do Java:Como Reagir? (Dois ratos caíram num balde de leite, um desistiu e morreu afogado, o outro...) É preciso: Manter e ampliar a Comunidade, o grande diferencial Manter a JVM, um dos mais sofisticados softwares do mundo com uma grande base instalada Manter compatibilidade com o rico legado de aplicações e bibliotecas Continuar investindo em padronização e comitês abertos Diminuir a curva de aprendizado Separar aplicações simples de aplicações complexas Facilitar a criação de linguagens mais leves, produtivas e especializadas
  • 20.
  • 21.
    Múltiplas Linguagens, UmaPlataforma (Projeto Babel) Linguagens de Sistema: Possuem o necessário para a construção da infra-estrutura do sistema São geralmente complexas e genéricas C/C++ e Java Linguagens de Aplicação: Possuem a produtividade esperada para se criar aplicações São leves e menos exigentes Servem para utilizar os componentes criados pelas Linguagens de Sistema Ruby, Python, Groovy e outros Linguagem de Domínio: Como de Aplicação, mas trazem conceitos do domínio em si Geralmente são utilizadas por não-programadores Mini-linguagens do UNIX, dialetos XML e outros
  • 22.
    Múltiplas Linguagens, UmaPlataforma (Projeto Babel) CLR não é a primeira nem única VM para várias linguagens A Microsoft apenas tentou replicar o mercado VB/C++ C# possui as mesmas limitações básicas de Java Mono poderia ser uma saída se não se fixasse tanto em copiar O futuro de Java™ é ser .Net?!?
  • 23.
    Múltiplas Linguagens, UmaPlataforma (Projeto Babel) O que já está sendo feito? - Oficialmente JSR 223: Scripting for the Java TM Platform – Public Review Implementação de Referência: PHP Implementação de JavaScript no Java™ 6 Mustang JSR 241: The Groovy Programming Language JSR 274: The BeanShell Scripting Language
  • 24.
    Múltiplas Linguagens, UmaPlataforma (Projeto Babel) O que já está sendo feito? – Pela Comunidade BeanShell Groovy Velocity Rhino – JavaScript para JVM Projeto da Mozilla Foundation Jython – Python para a JVM Utilizado pela Bea para scripting no WebLogic Diablo JRuby – Ruby para a JVM Interpretador compatível com Ruby 1.8.2 100% Java™ Mais de 200 projetos de linguagens para a JVM De Smalltalk a COBOL Superwaba
  • 25.
    Alternativas Hoje 2004- New and Cool Java TechnologyJava Technology and Scripting Languages, the Next Generation: TS-1027, 2004
  • 26.
    Alternativas Hoje (Nãopergunte o que sua plataforma pode fazer por você...) Aplicações em Ruby Rails: Ambiente altamente produtivo mantendo qualidade Performance inferior e ainda baixa aceitação no Brasil Ainda não viável para mais que scripts ou web Aplicações em Python Forte comunidade Grande número de bibliotecas e frameworks Não é tão diferente de Java EE™ assim Aplicações em Java Linguagens de Script para aplicações simples Linguagens de script para interfaces Trails/Grails
  • 27.
  • 28.
    Conclusão Java™ estásofrendo com seu próprio peso Java™ não é simples como antigamente Java™ domina o mercado e não vai ser substituída facilmente Não existe Tamanho Único em Linguagens de Programação O ideal é que a Plataforma Java™ ofereça suporte melhor à linguagens, incluindo de Sistemas, Aplicações e DSLs Não existe plataforma hoje que compita com Java™ em todos os seus ambientes Existem plataformas que competem com Java em segmentos específicos Ainda que difícil prever o futuro, é iminente uma revolução no modo como aplicações são construídas
  • 29.
    Bruce Tate &Justin Gehtland – Beyond Java Bruce Tate & Justin Gehtland – Better, Faster, Lighter Java Rod Johnson – J2EE Developmen Without EJB Dave Thomas et al. – Programming Ruby Dave Thomas et al. – Agile Web Development with Rails Eric Evans – Domain-Driven Design Andrew Hunt & David Thomas – The Pragmatic Programmer Craig Larman – Applying UML and Patterns Bertrand Meyer – Object-Oriented Software Construction Martin Fowler – Refactoring, PEAI, Analisys Patterns... Meilir Page-Jones – Fundamentals of Object-Oriented Design Using UML Autores Recomendados
  • 30.
    http://groovy.codehaus.org/ http://www.beanshell.org/ http://www.jython.org/http://jruby.sourceforge.net/ http://www.mozilla.org/rhino/ http://www.robert-tolksdorf.de/vmlanguages.html http://www.martinfowler.com/articles/languageWorkbench.html http://developer.sun.com/learning/javaoneonline/2004/corej2se/TS-3814.html http://developer.sun.com/learning/javaoneonline/2004/newcooltech/TS-1027.html Para Saber Mais
  • 31.
  • 32.
    Contato http://www.fragmental.com.br http://www.guj.com.brhttp://www.riojug. org [email_address]
  • 33.
    Obrigado! Que Zahlos Acompanhe...