Programador Python aprendendo Java

jythonOlá pessoal!

Minhas aulas de Java começaram na faculdade. Para a minha surpresa estou até simpatizando com a linguagem… mas ainda assim, algumas coisas me fazem firmar o pé no Python. Segue um slide que solidifica os argumentos que eu defendo: Matando o Java e mostrando o Python.

Há alguns mitos em relação ao Java x Python que talvez tenham que ser esclarecidos:

PYTHON NÃO GERA BYTECODE

O fator que faz do Java uma linguagem fantástica com certeza é a tal da JVM (Java Virtual Machine). É ela quem “garante” que um programa em Java execute em “qualquer máquina do mundo”. Para isso, é necessário que o desenvolvedor Java compile seu código-fonte para um formato conhecido como “bytecode“, uma “língua” que a JVM interpreta toda vez que acessamos um arquivo compilado Java e traduz para o SO. Em passos:

Programador escreve -> Compila -> JVM lê o bytecode e interpreta -> Programa Vive!

O Python também possui sua Virtual Machine. Oras, é uma linguagem interpretada! A diferença fundamental do Python para o Java neste aspecto é:

  • Para executar ou desenvolver um programa em Python, é necessário somente o seu interpretador (nenhum Development Kit, Runtime Environment ou afins. E de lambuja você leva um interpretador interativo);
  • Quando um interpretador Python lê um arquivo .py, ele automaticamente gera um .pyc. Ou seja, automaticamente cria-se um bytecode que pode ser distribuído sem necessitar o fonte;
  • Geralmente, somente bibliotecas e módulos são compilados para bytecode. Isto não quer dizer que os arquivos principais (main) não possam ser compilados (podem sim);
  • Também é gerado um arquivo chamado .pyo. Trata-se de um bytecode otimizado sem comentários ou docstrigs.

Em passos ficaria mais ou menos assim:

– Caso1 – sem o .pyc no path:

Programador escreve -> Interpretador lê o fonte, gera bytecode e o interpreta -> Programa Vive!

– Caso2 – com o .pyc no path e sem o .py:

Interpretador lê o bytecode e interpreta -> Programa Vive!

Em ambiente de desenvolvimento, linguagens interpretadas são bastante efetivas pelo fato de que a cada alteração não se faz necessária a compilação do seu programa. No caso do Python, o interpretador faz isso para você ao mesmo tempo que está interpretando um .py. Além de claro, podermos acessar os recursos de um módulo através de seu interpretador interativo.

fonte: http://www.pythonbrasil.com.br/moin.cgi/OcultandoCodigoPython

JAVA É UMA LINGUAGEM UNIVERSAL, PYTHON NÃO

Até certo ponto, esta afirmação é verdadeira (na parte de que Java é “universal”). Mas o interpretador do Python é escrito em C, e é de código aberto… logo, se sua arquitetura é capaz de entender um programa em C, é possível compilar o interpretador Python para a sua arquitetura e interpretar programas Pythonicos.

Mesmo assim, hoje possuímos interpretadores Python em todos os cantos. Inclusive, podemos rodar Python em cima da JVM… logo: se Java pode ser considerada uma “linguagem universal”, Python também pode.

Fonte: http://www.pythonbrasil.com.br/moin.cgi/InicieSe, http://br-linux.org/linux/node/2543, http://pt.wikipedia.org/wiki/Python, http://www.flavioribeiro.com/v2.0/2009/01/14/extendendo-python-com-c/

VOCÊ FICA RICO PROGRAMANDO EM JAVA, EM PYTHON NÃO

A menos que você trabalhe para a Google, isto é bem verdade.

Pelo fato do Java ser a linguagem mais utilizada no mercado, seus usuários são muito bem remunerados. Já em Python, que não possui um “padrinho” como a Sun ou a IBM… este cenário é um pouco decepcionante. Mas lá fora: Google, Yahoo, Nasa e até a Microsoft; vem falando bem de Python…

Python é muito mais fácil de aprender que Java. E possui recursos poderosos como o Java. Então: “Se você quer ganhar dinheiro, use Java. Se você quer ter prazer programando, use Python”.

JYTHON – A RESPOSTA PARA OS NOSSOS PROBLEMAS?

Com o Jython, podemos escrever programas Python que geram bytecodes para JVMs. Isto gera um diferencial pois, Python é mais fácil de escrever que Java. Mas Java é mais veloz que Python.

As duas linguagens juntas podem ser imbatíveis.

Humm… juntar o útil ao agradável?! Tentador não?

Fonte: http://pt.wikipedia.org/wiki/Jython, http://www.jython.org/Project/index.html

Enfim… o meu objetivo não é fazer nenhum “flame” e nem menosprezar o Java. Não há argumento algum que o tire do “trono” e que obscureça o seu sucesso.

Como desenvolvedor eu me sinto na obrigação de aprender Java, e como já disse… estou até simpatizando com a linguagem e fico feliz por estar me tornando um programador mais completo. Mas não consigo deixar que algumas informações imprecisas sobre o Python sejam transmitidas em prol do Java… isto eu não posso admitir até por ser um desenvolvedor Python.

E você?! Algum acréscimo ou correção?! Deixa a sua opinião!

Klaus Peter Laube

Mais artigos deste autor »

Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ). Desenvolvedor Web de longa data, apaixonado por Python e defensor dos padrões Web. Escreve quando pode no http://www.klauslaube.com.br.


10 Comentários

Neto
1

Opa muito bom o artigo, lembro muito bem das minhas primeiras aulas de Java na faculdade, antes só pensava que PHP é o cara, sim ele é! rs. Mas Java (Java EE, Java ME, Java FX), Python também são show, vou parar por aqui porque senão vamos cair naquele velho dilema, “Qual linguagem é a melhor?”.

Klaus Peter Laube
2

@Neto
Sim… estou muito interessado nesse JavaFX. Sinceramente… este rumo que o mercado está tomando com o Flash/Flex de criar aplicações inteiras em cima de plugins não me agrada. Estão cometendo o mesmo erro que o Java cometeu com os applets. E com o JavaFX específico para a camada de apresentação… acho que é uma aposta muito boa (prefiro me esgueirar por isso do que pelo Flash).
Estou “fissurado” no Java por causa do Android… estou louco para desenvolver em Jython para ele.

David Israel Laks
3

Olá Klaus.
Interessante esse tópico. Sou programador Java, nunca desenvolvi em Python. Desenvolvo há alguns anos em java, e é engraçado, para mim, ler que uma outra linguagem é tão melhor que a linguagem que estou acostumado a usar. Claro que ‘cada caso é um caso’, dependendo do tipo de sistema a ser desenvolvido existem soluções que se tornam melhores em determinados casos e piores em outros.
Não conheço o Python, a única coisa que posso falar dele é que, quando vi a sintaxe dele, algo me incomodou bastante a ponto de não parar e ver a linguagem melhor. Falha minha, certamente. Vou ver se qualquer hora eu paro pra estudar a linguagem. Quanto a essa questão de não ter uma máquina virtual como no Java, bem… ambos precisam de um interpretador, um usa a JVM e outro um interpretador. Não consigo ver muita diferença, mas sem galho quanto a isso. Apenas não me parece ser um grande pró.
Você explicou que em Python você não necessita ter o bytecode compilado para rodar, pode rodar a partir dos fontes. Mas até que ponto isso é um pró? Só se você compila tuas classes na mão grande isso se torna um ‘problema’ no Java, e independente disso em aplicações comerciais não geralmente não há necessidade de se enviar o código-fonte aos clientes.
Outra coisa, li o artigo “Matando o Java e mostrando o Python”. JDK 1.2 é sacanagem né? hehehe. Sem dúvida as melhorias existentes no Java 1.5 deixaram o desenvolvimento mais produtivo. Mas, aproveitando que você é um programador que conhece Python, saberia me falar o que os caras querem dizer com: “libera o programador para fazer o que bem entender, até mesmo desenvolver software com qualidade” (ou cometer erros, em desvantagens)? Deixou a entender que a qualidade está na linguagem que você utiliza, não na sua própria capacidade. Por exemplo, com Java eu não poderei desenvolver um software com qualidade? Porque, se isso é uma vantagem do Python sobre o Java, isso significa que em Java não poderei? E quanto a desvantagem, Java não permite que eu cometa erros? Acho que não. Engraçado, né? 🙂
Acho que já falei demais, só espero sua opinião quanto aos meus comentários 🙂
Parabéns pelos posts, conheci hoje e já li alguns artigos, muito bacana mesmo.
Abraços,
David

Klaus Peter Laube
4

@David
Olá! Obrigado por comentar…
Recomendo conhecer Python… não só Python como também Ruby, Lua, PHP, etc. Não se prenda ao Java só por ele parecer “soberano”.
Sobre compilar ou não, isto pode ser vantagem quando você tem a necessidade de “obscurecer” o acesso ao seu código. Dificultando a ação de engenharia reversa. E não é difícil fazer em Python não… existem ferramentas que te auxiliam com isso através de simples comandos em terminal 😉
Pois é David… este “Matando o Java…” é bem irônico. E vou ser sincero contigo que nesta parte eles são um pouquinho irônicos demais. Mas considero que o Python influencia muito a qualidade de software e em sua filosofia consta alguns incentivos como “deveria existir somente uma forma óbvia de se fazer algo”. Tudo uma questão de princípios que está em qualquer tutorial Python espalhado pela Web.
Conheça a linguagem e você perceberá o que eles querem dizer com “tanta ironia” =)

David Israel Laks
5

Humm interessante. Certamente tenho que conhecer outras linguagens, assim como também tenho que conhecer alguns frameworks Java mais a fundo… Tem tanta coisa pro cara estudar, bah… Hava paciência 😀 quanto a filosofia “deveria existir somente uma forma óbvia de se fazer algo”, você concorda com ela? Sei lá, sempre tive em mente que um problema pode ser resolvido de diversas formas, umas melhores que as outras, mas propor uma solução ideal (ou que exista uma, nesse caso) me parece algo mt… nem sei bem como falar… quem sabe mt autoritário, as pessoas tem q ter olhos bem abertos, o horizonte é grande e pode ter situações que uma solução ideal deixa de ser ideal por determinados aspectos, sei la 😛 Abraços, obrigado pela resposta 🙂

Klaus Peter Laube
6

@David
Prefiro fazer “um + um” desse modo: 1 + 1; do que ficar inventado “firulas” ou trechos de código desnecessários. Entenda que não é algo que se deve ser levado “à risca”, é apenas uma convenção… uma dica… “um norte”.
Disponha… eu que agradeço a sua participação.

Julio Cesar Melanda
8

Programo em Java no meu curso e Python na vida real. Acho a sintaze do Python muito mais clara e objetiva… realmente ajuda a legibilidade e ajuda a manter simples.
Uso Python para desenvolvimento web, computação científica e desenvolvimento de aplicativos standalone também… pra mim não tem melhor, mas concordo sem dúvida que é muito importante conhecer outras linguagens. Também conheço PHP, C/C++ e outras. Cada uma tem suas vantagens, e em ambientes mais específicos podem ser melhores que Python ou Java.
E parabéns pelo Post! Gostei bastante!

Cristian L. Stroparo
9

Concordo com todos os pontos, principalmente que Java é importante e não deve ser menosprezado, e de que não se difamar o Python para promover Java ou qualquer outra linguagem pois Python realmente é poderosa, “com baterias incluídas” (e assino embaixo do que você disse) 😉

PaulinhoCCC
10

Estou para iniciar na area de programacao, um desejo antigo, desde os tempos de pascal, basic, clipper, que usei rapidamente num curso dado pela empresa, mas, logo fui transferido para a area administrativa e la se foi o sonho de aprender cobol, que todos comentavam na epoca….
Hoje, aposentado, tempo livre, pretendo fazer um curso na area e ver se o cerebro ainda responde. penso em Java e Python, e quem sabe, algo mais especifico como programacao para dispositivos moveis, etc e tal…
Alguem indica um curso no RJ, lembrando que sou zerooo
obrigado e parebens pela materia

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!