16 de outubro de 2012

Quais seriam realmente os 5 motivos para aprender Java?

Ontem, navegando em alguns sites, encontrei um artigo que me despertou a atenção: 5 motivos para você aprender Java.

Eu fiquei curioso para saber quais seriam esses 5 motivos para eu querer aprender Java. Li, escrevi um comentário grande lá, mas resolvi transformá-lo em um post aqui para explorar mais o assunto.

O conteúdo abaixo é, basicamente, o mesmo que escrevi no comentário lá, mas com alguns acréscimos que fiz, por ter transformado-o em um artigo.

Java é fácil de aprender?


Antes de tudo eu quero dizer que "não, Java não é fácil de aprender!" Assim como C, C++, Pascal, etc.

Como toda linguagem compilada, ela intimida o iniciante na exploração do ambiente. Isso é criado naturalmente pelo ciclo: codifica -> compila -> corrige erro -> compila -> executa -> corrige erro…

Isso é muito ruim para quem está aprendendo uma nova linguagem de programação.

Quando eu resolvi aprender Python, me re-encontrei com uma coisa que tinha visto apenas no Basic (nos tempos do TRS-80), no dBase III Plus e no FoxBase: um shell interativo. Estamos falando da década de 1980, mas que maravilha era aquilo! Eu podia escrever uma linha e ver o resultado na hora, sem compilar nada, sem escrever um programa inteiro. Inclusive, a 1ª pessoa que me ensinou programação, em 1986, nem era programadora! Mas usava o console do Basic. Posso dizer que essa experimentação me motivou a entrar na profissão.

Com o passar dos anos e com o envelhecimento do dBase III Plus, enveredei naturalmente para o Clipper, Pascal, C e, ao mesmo tempo, trabalhei muitos anos com mainframes IBM. Durante uma fase programei também em Delphi (nas versões 1, 3 e 5). Antes que alguns dinossauros, como eu, perguntem: sim, eu cheguei a experimentar o VisualObjects da Computer Associates e me decepcionei! Também, mexi um pouco com máquinas Unix, trabalhei com uma linguagem chamada PowerBuilder e parti pra web, com Perl e, depois, com PHP.

Durante todos esses anos pós-dBase III Plus, eu nunca mais encontrei um shell interativo aonde eu pudesse aprender pequenas coisas rapidamente. Até que eu me deparei com o console do Python. Depois, experimentei um pouco de Ruby, que também traz o mesmo recurso.

A coisa está se espalhando e a "moda", pegando em outros ambientes e linguagens. Até que enfim! Isso teria alguma relação com a crescente popularidade dessas linguagens nos últimos anos?

Vale notar que muitos clientes SQL também têm um shell interativo e é essa a característica que acelera o processo de aprendizado das pessoas. Nem sempre SQL é intuitivo. Tente fazer alguns joins mais complexos e sub-selects sem um console interativo pra ver!

Portanto, um shell (ou console) interativo parece bobagem, mas não é. Acredite. Ou experimente um.

Mas, voltando às linguagens fáceis de aprender, quero citar Ruby e Python. Elas, sim, são muito fáceis de aprender. Até PHP, apesar de suas inconsistências e sintaxe suja, é mais fácil de aprender do que Java. Repetindo o que muitos desenvolvedores Java que eu conheço dizem, "ela é muito verborrágica". Eu diria que é burocrática. Ela fica entre você e o problema que você precisa resolver.

Outra característica que, na minha opinião, atrapalha muito no aprendizado do Java, são os XML intermináveis. Hoje em dia isso já melhorou, mas a quantidade de código antigo que existe por aí é tão grande, que a probabilidade de você conseguir trabalhar numa empresa que usa ferramentas Java mais modernas é muito pequena ainda.

XML não é para humanos. XML foi criado para sistemas trocarem dados. Pessoas não sentem-se confortáveis editando XML para configurar um ambiente de trabalho, um framework ou um servidor.

Java não é fácil de aprender.

Orientação a objetos é bom pra tudo?


Um psicólogo muito conhecido, chamado Abraham Maslow (é, aquele da pirâmide de necessidades) registrou no livro The Psychology of Science: A Reconnaissance (1966), Cap. 2, p. 15, o seguinte: "Eu suponho que é tentador, se a única ferramenta que você tiver for um martelo, tratar tudo como se fosse um prego". Ele falou isso descrevendo erros que as pessoas tinham em suas percepções de mundo.

Ou seja, te obrigar a usar um único paradigma de programação não é uma boa alternativa para todos os problemas. Em linguagem acadêmicas é muito válido, mas não sempre para o mundo real, com problemas reais.

É importante destacar também que saber usar uma linguagem orientada a objetos é completamente diferente de saber projetar um sistema orientado a objetos. Essa é uma disciplina enorme, muito recente, e que certamente amadureceu bastante com a disseminação do Java.

Não se engane, existe muito código macarrônico por aí disfarçado (ou travestido) de classe Java!

Novamente, Ruby e Python dão banho nesse aspecto. São linguagens que suportam paradigmas funcionais, procedurais e OO. À escolha do cliente e da necessidade real. Falando no popular, não precisamos usar um canhão pra matar uma formiga. Mas, quando o canhão for necessário, ele está lá à sua disposição.

Shell script e C não são linguagens OO, mas são duas das mais usadas no mundo. Não se assustem, mas COBOL continua sendo uma das linguagens mais usadas em sistemas principais de bancos, companhias telefônicas e seguradoras do mundo inteiro. E o COBOL geralmente usado nesse perfil de empresa é o COBOL ANSI, sem OO.

Java é uma linguagem robusta e segura?


Robustez e segurança estão mais ligados ao programador, ao projetista do sistema/aplicativo, ao framework, do que à linguagem propriamente dita.

Se você me der uma metralhadora com mira de precisão, provavelmente eu não vou acertar quase nada. Mas se der um revólver de espoleta pro Chuck Norris, ele mata uma cidade inteira!

Não devemos confundir a linguagem Java com a plataforma Java (que tem mostrado, recentemente, não ser tão segura assim).

Java é multiplataforma?


Esse é, sem dúvida alguma, o grande benefício do Java: a plataforma, não a linguagem.

É por isso que a JVM tem ganho bastantes adeptos pelo motivo de incorporar linguagens com abordagens mais modernas, como Ruby e Python, que já rodam na JVM há alguns anos.

Rodando na mesma JVM, é possível acessar objetos e classes Java a partir do Ruby ou do Python. Foi uma grande sacada do pessoal da Sun, apesar de não ser nada muito novo. Em mainframes, a intercomunicação entre linguagens é coisa bem antiga. O Pascal já permitia chamar rotinas escritas em C. É a mesma abordagem que o Python faz com C. Quer desempenho? Então faça isso em C e chame a partir do Python.

Mas você já pensou por que isso aconteceu? Em ambientes assim, soluções mais simples podem ser implementadas de forma mais simples, mais direta, mais rápida e mais barata. Isso traz competitividade à empresa, melhorando o time to market.

A tendência nesse ambiente tem sido crescer as aplicações usando as novas linguagens e deixando o código legado em Java mesmo.

Seria esse algum sinal para os defensores da linguagem Java?

Java é realmente popular?


Sem dúvida Java é muito usada. Mas, como você classificaria uma linguagem popular?

Eu ainda não conheci uma pessoa que dissesse assim: "rapaz, eu tive uma ideia e vou implementá-la em Java porque ela é uma linguagem muito boa de se programar. Ela é simples e com certeza eu serei mais produtivo com ela do que com Ruby ou com Python."

Se você conhecer essa pessoa, me apresente. Só não vale me apresentar pessoas que só conheçam Java. Aí não existe termo de comparação válido.

Eu já perguntei para vários programadores Java o motivo de eles continuarem trabalhando com ela. E a resposta, quase que invariavelmente foi: "porque preciso pagar as minhas contas, né?". Essa é a mesma resposta que ouço de alguns amigos que resolveram fazer concurso público: segurança. Eles sabem que é uma plataforma estável comercialmente.

Seria esse um indício de popularidade de uma linguagem? Eu diria que a Sun Microsystems foi muitíssimo competente no marketing do Java, para vender servidores e serviços, já que a linguagem em si sempre foi gratuita. A long tail continua até hoje e vai permanecer por muito tempo.

Entretanto, mesmo sendo muito usada, em quais ambientes de trabalho ela é aplicada?

O que eu vou escrever agora é muito mais filosófico do que outra coisa, mas, em grande parte, a linguagem que você aprende indica o perfil de empresa que você vai trabalhar.

É claro que existem exceções, mas eu já cansei de trabalhar numa fábrica de software onde você precisa ler especificações funcionais e técnicas para desenvolver funcionalidades para pessoas que você nunca verá na vida. Aliás, já até coordenei um ambiente assim. É uma linha de produção mesmo. Programador só programa. Analista só analisa. Testador só testa. GP só pergunta data e andamento do serviço. Lembra da analogia do martelo e do prego?

Infelizmente, esse seria o único motivo para um iniciante aprender Java atualmente, e isso não é errado em si: empregabilidade. As pessoas precisam sobreviver e pagar as contas.

Para terminar, reflita com sinceridade, qual é realmente o motivo para você querer aprender Java hoje em dia?

Recomendo ler o texto The Python Paradox. Ao lê-lo troque "Python" por Schema, Haskell, Julia, etc., ou troque "Java" por Visual Basic, PHP, ASP, conforme seu caso.  Esse texto não fala especificamente sobre as linguagens de programação, mas sobre as atitudes dos profissionais e das empresas que trabalham com elas.

[update em 17/07/2013] Eu tenho pensado nesse assunto e cheguei à conclusão que existem, sim, alguns motivos para aprender Java, além de conseguir trabalho mais facilmente:
  1. Desenvolver aplicativos para Android.
  2. Passar na prova da faculdade.

[update em 25/10/2016] Continuando a reflexão, talvez você precise aprender Java porque foi alocado em um projeto que é desenvolvido em Java e não pode ou não quer sair para outra empresa.

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

33 comentários:

  1. Olha Vinicius,

    Li o teu artigo e concordo com quase tudo o que tu disse, mas vamos ser honestos: Mercado para programadores python, principalmente aqui na minha região de Porto Alegre é infimo ou inexistente ! tirando São Paulo...o resto do pais a situação é quase a mesma. E tem outra coisa: Salário !, o programador python chega a ganhar 1/3 do que ganha um programador JAVA, com níveis de senioridade semelhantes, e honestamente isto é fato !.

    O que faço para saciar minha paixão pelo python é tocar os meus projetos pessoais com ele.
    Há um tempo atrás eu programava em JAVA para pagar as minhas contas, hoje, programo para pagar as minhas contas e porque entendi que o que importa é programar independente da linguagem !, pois a linguagem é a ferramenta, mas quem comanda ela é a peçinha na frente do computador !.

    ResponderExcluir
    Respostas
    1. Oi Leandro, vc tocou em 2 pontos importantes: vagas e salário.

      Sobre as vagas, eu tbm passei por uma situação semelhante à sua. Eu moro numa cidade, Vitória, que simplesmente não tem vagas em Python. Minha escolha envolve mais do que linguagem de programação, claro. Eu escolhi um estilo de vida e não me arrependo. Trabalho com as tecnologias que gosto e num ambiente muito bom.

      Não sei falar sobre a média salarial de java, mas o meu rendimento hoje é equivalente ao que eu tinha antes, trabalhando com mainframes. Mas se vc está me dizendo que eu posso ganhar 3x o que eu ganho hoje, trabalhando nas mesmas condições e com a mesma liberdade (flexibilidade de horário, trabalho remoto e home office), isso já me anima. Talvez seja esse o motivo para eu aprender Java.

      Por hora, eu consegui unir o útil (salário) ao agradável (tecnologia), mas é uma decisão que envolve família e carreira.

      Excluir
    2. Esqueci de dizer, Leandro...

      eu moro em Vitória e trabalho no Rio. Apesar de parecer estranho, para mim está valendo muito a pena. :-)

      Excluir
    3. Olá Vinicius, seu tópico é ótimo, eu gosto do Java, mas vou ser sincero, Java é uma linguagem muito burocrática e difícil de aprender, além do mais a documentação não é para iniciantes. Mas ainda gosto muito do Java, não por causa da empregabilidade, mas porque posso programar em um ambiente Linux.

      Excluir
  2. Há uma boa razão para aprender java HOJE (out/2012): *Empregabilidade*. Se sou um programador mediano (ou menos que isso), acho emprego mais fácil em Java que em qualquer outra linguagem.

    ResponderExcluir
    Respostas
    1. Alysson,

      Nem é questão de achar mais fácil ou não, na maioria (99%) das capitais brasileiras não existem vagas para python e isto é fato !, um grande professor de lógica meu me disse uma vez: Contra fatos não existem argumentos !.

      Excluir
    2. Linguagens sobem e descem na preferência do mercado... o que hoje é moda, amanhã não é mais... Python está crescendo e vai crescer mais ainda...

      Excluir
  3. Quando comecei a programar em JAVA foi para arrumar emprego mais rápido, isso foi verdade, mas hoje em dia sou apaixonado por essa linguagem, mas também estudo Python, Ruby e PHP por exemplo, e tento criar meus projetos pessoais com essas 3, pq com o JAVA ja trabalho e ganho o Pão de cada dia :)

    ResponderExcluir
  4. De fato, a questão das vagas no Brasil o python perde e muito. Outra coisa é o poder e a amplitude do Java, com Java vc domina o mobile, desktop, web, programação para hardware (desempenho discutivel) e por ai vai.. Vc não tem que aprender uma nova linguagem a cada desafio. Não que python seja apenas para web, sei que vc pode usá-la para dektop com uma certa facilidade, assim como tbm para mobile, mas não é a mesma coisa não tem a mesma solidez. O python é rápido o Java nem tanto... Mas isso não quer dizer que o Java não seja, o Java é praticamente tão rápido quanto o Delphi, que por muitos anos foi a liguagem mais RAD do mercado. Eu gosto do Python, estou trabalhando com o Django e de fato para quem esta aprendendo ela é melhor e mais democrática, mas o Java a não ser na velocidade de desenvolvimento na minha opnião não perde em nada...

    ResponderExcluir
    Respostas
    1. O Python também pode ser usado para desenvolvimento mobile.

      Excluir
  5. Moro no interior de SP e trabalho com python desde 2009, realmente afirmo que achar uma vaga de emprego para essa linguagem é como achar agulha num palheiro rs....a minha sorte foi que ao longo desse tempo consegui 3 clientes fixos (sou PJ), e como tenho poder de decisão sobre qual linguagem trabalhar, obviamente optei pelo python, pois me sinto confortável com a linguagem e acho extremamente produtiva.

    ResponderExcluir
    Respostas
    1. Olá Samir. Minha decisão por essa tecnologia também envolve ações como essa sua.

      Eu parei de deixar que as empresas direcionassem minha escolha profissional. Por muitos não fui feliz com isso.

      Excluir
  6. Só estou aprendendo Java porque é o que a faculdade nos enfia goela abaixo, pois vivo muito bem sem ela.
    Tudo o que eu preciso o Python resolve em um instante.

    ResponderExcluir
  7. Eu creio que quem trabalha com python nao está nesse mundo apenas para trabalhar e sim como o Vinicius me disse é um estilo de vida fazer o que voce gosta, trabalhar com Python está dificil sim, eu mesmo cheguei a "desistir" por um tempo mais nao tivo como nao voltar a linguagem e logo q surgiu uma oportunidade fui. Aprender qualquer coisa pode ser facil e dificil vai depender da força de vontade da aptidao e do seu interesse para aprender.

    ResponderExcluir
    Respostas
    1. Oi João.

      Sobre estilo de vida, você tem toda razão. É muito bom poder ser feliz no trabalho.

      Excluir
  8. Galera trabalhei muitos anos com Java EE, e agora trabalho num projeto Python/Django e Sketchup Ruby API , trabalhar com essas duas linguagens no mesmo projeto esta sendo muito show mas só consegui isso abrindo a minha própria empresa www.simplesepreciso.com.br estou começando a procurar programador Python e Ruby aqui no RGS em São Leopoldo no polo da UNITEC dentro da UNISINOS, outra coisa que estou gostando muito de fazer e o deploy de tudo isso na Amazon, Django no AWS esta muito bom, com certeza os salários de Java vs django/rails possuem diferenças assim como os tamanhos do seus projetos... Mas uma coisa é certa a prosperidade de um projeto django/rails ser gigante como os de Java que trabalhei vai chegar e quando virar o jogo quem estiver preparado vai se dar bem. O projeto django/rails mais antigo que conheço esta sendo desenvolvido a 3 anos .. Os de Java que trabalhei mais de 12 anos.. Ta aí os salário de 12 mil para 3 hehehehehe.... Abrass e bons estudos python e ruby, django e rails.

    ResponderExcluir
  9. Na maioria dos casos Java é usado para implementar aplicações de um único propósito para informatizar um processo de negócio. Nesse caso, poderíamos fazer com uma linguagem mais fácil.

    No entanto, quando desejamos um grande reuso e outras vantagens, digamos, por meio de SOA, por exemplo, um ambiente corporativo e robusto como o da plataforma Java, é o caminho a seguir. São raros os locais que implementam um ambiente corporativo de verdade com Java.

    Eu desenvolvo aplicações com Web2py, mas o quanto elas podem ser reusáveis. Como fazer serviços que suportem diversos consumidores de serviços? Que segurança eu tenho que o servidor suportará a demanda futura?

    ResponderExcluir
  10. Isso pra mim soa como um mero 'mimimi' de programadores de outras linguagens.

    Não gosto de Java, mas ele é multiplataforma. Ponto final.
    O que tu aprende e faz no Windows, roda no Linux do fulano e no celular do Beltrano.

    Pra quem trabalha com clientes, sabe a MONSTRUOSA FACILIDADE e o PODER que isso é!
    Faça um programa em C, C++ ou Python e mandem para 10 pessoas.
    Com certeza alguma vai dizer que deu problema ou não rodou. Simplesmente isso.

    ResponderExcluir
  11. Bacana seu artigo, já tem muita gente fazendo uso de python aqui no Rio de Janeiro! E se falando de java, penso em java como forma de ganhar dinheiro e passar na prova da faculdade! euaheuahe

    Abraço!

    ResponderExcluir
  12. Python = "Estilo de vida"

    ResponderExcluir
  13. "..Faça um programa em C, C++ ou Python e mandem para 10 pessoas.
    Com certeza alguma vai dizer que deu problema ou não rodou. Simplesmente isso. "

    Qual é a dificuldade de se instalar Python ou gcc/g++ na máquina do cliente? Consome-se tanto espaço assim do hd?

    ResponderExcluir
  14. a linguagem java é boa por ser multiplataforma?! isso era argumento qd java foi lançada q na época disputava com C++

    pra qm usa linux python eh uma mamata, todas as dependencias que seu programa prescisa voce acha tudo via apt e pip e ainda pode empacota-lo num .deb . pra usuários de windows é só colocar tudo em um .exe (da pra usar o pip tb mas nao com a mesma facilidade do linux). fiz alguns projetos usando PyQt4 (pra interface gráfica) e indenpendente do sistema operacional tudo funciona com 2 cliques.

    o mesmo trabalho que dá para o cliente instalar java no seu computador é o trabalho dele instalar python (e com detalhe que para usuários linux nem isso ele terá o trabalho pois em qualquer distribuiçao python ja vem instalado de fábrica).

    até para android estou começando que vale mais a pena desenvolver tudo via webapp usando javascript ou então usando kivy e programando em python (até .apk's com kivy vc pode criar e programando tudo em python).

    ainda sim se você insiste em trabalhar com a JVM voce pode programar usando jython ou outras linguagens como groovy e usar toda as bibliotecas existentes de java.

    o único motivo para alguem programar em java é só a exigencia do mercado, que muitas vezes é inflexivel quanto a isso.

    ResponderExcluir
  15. Este comentário foi removido pelo autor.

    ResponderExcluir
  16. O Java e uma grande ferramenta de programação, mas esta discussão de qual a melhor linguagem já deveria ter sido sanada. Há empresas que buscam ferramentas ("Programadores") que sejam flexíveis à linguagem utilizada para determinada situação. Do que adianta usar o grande poder integração entre dispositivos, independência de plataforma e segurança do Java, para trabalhar em uma empresa que consegue contratos para desenvolvimento de pequenos portais e sites abertos. Quando o programador se depara com esta realidade, ele percebe como deveria ter sido menos religioso com relação à linguagem de programação, o nome disso é amadurecimento. Sou muito apaixonado pelo Java, foi minha primeira linguagem de programação depois que saí do algoritmo, mas estou revendo meus conceitos e começando a estudar Python e PHP e já havia dado uma olhada em C# e C++.

    ResponderExcluir
    Respostas
    1. Bom cara só tenho uma coisa pra falar a todos vocês o python não foi uma linguagem feita para se trabalhar em empresas e desenvolver software, ela servo como argamassa para programas maliciosos e somente isto, independente de qualquer coisa que qualquer doutor palestrante e cara que se acha fodão possa dizer por mais que todo mundo diga que a linguagem x é melhor que a outra nada jamais vai superar assembly, por que o fator de poder de hardware é absoluto e a profundidade que essa linguagem chega dentro do sistema e do processador é incrivel apesar que ficar aprendendo uma linguagem por arquitetura é um saco srsrsrsr mais o duro é que eu estudo algoritimos e logica de programação todo dia srsrsrsrsrsr mais em fim o python serve para juntar varias "implementações" seja ela para web, banco de dados ou maquina, então pra mim eu o uso para servir de casca para outras aplicações por o forte dela é que ela extremamente violenta, mas em fim para aprender bem uma linguagem de programação basta você transformar os acontecimentos do seu dia em um algoritimo e transformar na linguagem que você ta estudando, eu faço isso pelo menos 2 vezes por semana, e é isto que garante que nenhum software scape de uma boa pirataria rrsrssrsrs mais enfim ssrss, bom acredito que você deva programar em android é a coisa mais rentavel nos ultimos tempo, só fazendo programas freee porno que funciona na base de anuncio da pra tirar uns 8 mil mês suave

      Excluir
  17. Tsc tsc tsc. Para mal jogador até a bola atrapalha... Até quando esses meninos de python vão querer realizar esse tipo de comparação? Não existe linguagem ruim e sim programadores ruins. As pessoas deveriam parar de culpar uma tecnologia por causa de sua incompetência em aprende-la.

    ResponderExcluir
    Respostas
    1. Só faz comparação quem tem condição pra isso.

      Vamos parar de achismo e nos ater às pesquisas: http://dl.acm.org/citation.cfm?id=2543488.2534973&coll=DL&dl=GUIDE

      Excluir
  18. Muito bom artigo meu caro! Às vezes é bom ler coisas de quem fala verdades!

    ResponderExcluir
  19. Thiago Carvalho that2 de novembro de 2015 00:12

    Estou começando com linguagem JAVA, estou quase me formando no curso de JAVA e gostaria de saber o que fazer para achar um emprego.
    E se alguem pode me oferecer projetos para que eu desenvolva sem fins lucrativos, apenas para aprender mais.
    Thiago_amstel@hotmail.com

    ResponderExcluir
    Respostas
    1. Parabéns pela iniciativa cara.Atualmente você trabalha em qual área e está em qual cidade. Talvez eu possa ajudá-lo? Qual sua formação superior?

      Excluir
  20. Preciso de recem formados em Java. Salario fixo R$2.800,00 OTIMA OPORTUNIDADE . Contrato.
    Inicio: 23/10/2016 termino 23/03/2016

    ResponderExcluir
    Respostas
    1. Correção: O termino é 23/03/2017

      Excluir
  21. Gostaria de comentar que a questão da empregabilidade de profissionais que conheçam Python (e seus frameworks) é problema se considerarmos unicamente o mercado brasileiro. As empresas no Brasil em geral ainda não estão na onde de equipes de trabalho dispersas pelo país (home office). Se você conhece bem o Python e seus frameworks e é fluente em inglês, você consegue emprego fácil e pode atrelar isso a escolhas como o lugar onde quer morar (questões familiares por exemplo) Desde que haja acesso internet nesse lugar, poderá ser qualquer um.

    ResponderExcluir

Marcadores