Crônicas de um Programador VB6 - Quero Começar em Java Sem Muito Errar. É Possível?

Olá a todos.

Meu nome é Percio e estou começando a programar em Java. Programo em Visual Basic 6 a mais de 13 anos e em Clipper a mais de 20. São linguagens que o mercado não tem quase nenhum interesse e resolvi migrar e aí começa o meu grande problema.

A cada post, apostila que eu leio e a cada video-tutoriais que vejo fico mais confuso.

Há muitas opiniões divergentes (e isso é ótimo e sauável) dos gurus, mestres e jedi que, como iniciante, me confronta com o método que estou aprendendo, não me dando certeza que o que estou fazendo é certo ou errado.
Por exemplo, li esse post no forum da Caelum :


E aqui no GUJ tem guru questionando logo o primeiro dos hábitos.

Não sei para vocês, mas para mim, não ficou claro qual o melhor método.
REPITO : Sou iniciante.

Há vários frameworks para várias coisas em Java, (VB6 e Clipper não tem nada disso e isso me deixa pasmo em ver como a linguagem é rica de soluções). Mas isso também é um problema, pois, não sei qual eu deveria usar.
O mercado não quer que você saiba apenas Java. Quer que você saiba HTML, XML, CSS, JavaScript além dos frameworks e suas versões (Hibernate 3 e 4), JPA (1 e 2) , Struts (1 e 2), Spring, EJB…

Eu acho que minha pergunta já deve ter sido respondida por aqui várias vezes, mas como sempre estão atualizando o Java e os frameworks, gostaria de saber :

  1. Como posso aprender Java de uma maneira realmente eficaz, com alto desempenho, produtividade e baixa manutenção ?
  2. Quais frameworks eu devo utilizar para se fazer uma aplicação comercial ?
  3. O que é melhor ? JSF ou FLEX/Flash ?

Agradeço a atenção dispensada.

Oi!

Primeiro, é interessante ver alguém da área que desenvolve a tantos anos. A mais de 20 anos em apenas uma linguagem, achei bem interessante.
Vamos as respostas e espero colaborar contigo.

1 - Eu acredito muito que isso está diretamente ligado a experiência na linguagem. Você verá seu código daqui a 6 meses e irá se perguntar “Como eu fiz isso?”. O ideal é que se baseie em fundamentos concretos da linguagem. Há excelentes livros e tutoriais no mercado, inclusive da própria Oracle, explicando como utilizar a linguagem da melhor forma possível. Surge questões como polimorfismo, herança, orientação a objetos e etc. Aprender a API Collections é essencial, assim como IO.

2 - Ai a resposta é “depende”. É WEB? Swing? Qual a necessidade da aplicação? Tempo real? Assincrona? Precisa ser ‘leve’? São apenas exemplos da análise que tu precisa fazer antes de saber qual(is) tecnologia(s) tu irá utilizar. JSF é a melhor para WEB? Depende, tens idéia da quantidade de “frescuras” que o flash oferece e deixa seu sistema WEB bonito e que visualmente, na minha opinião, fica muito mais bonito? :slight_smile:
Mas JSF é mais rápido que flash, pois é pesado e o JSF não é! Sim, é uma verdade. Então, existem muita coisa para ser vista antes de tomar esse decisão.

3 - Creio que respondi a sua questão acima. JSF não será 100% melhor que Flex e vice-versa. 100% é dizer que em todos os casos JSF ou FLEX é melhor que um ou outro. Eu acho a curva de aprendizado do JSF rápida, já que eu considero simples de se aprender. Então meu caro, se sua aplicação não precisa de tantas “frescuras”, “eventos” que o Flash pode lhe oferecer e você não quer exigir uma máquina muito boa do seu cliente (sim, se fizer em FLEX pode ter certeza que a máquina que tu desenvolve tem de ser MUITO BOA MESMO e a do cliente BOA, no minimo, 1 GB de RAM e estou chutando baixo ainda, sem considerar um processador descente e etc…) podes usar JSF.

Bom rider eu espero te-lo ajudado e não ter complicado nada. Mas escolher uma tecnologia nem sempre é uma tarefa muito simples. Talvez se expor a sua real necessidade, o pessoal poderá opiniar com uma base mais solida.

Primeiramente, bem vindo ao GUJ e ao Mundo Java.

  1. Sinceramente, um ponto IMPORTANTÍSSIMO de quem vem dessas culturas de linguagens procedurais é pegar bem Orientacao a Objetos, e acostumar com ele. Trabalhei com um cara que trabalho 10 anos com Cobol e sofreu para entender os conceitos de OO. Como vc ja tem um vasto conhecimento em programacao, recomendo ler bem os conceitos e tentar aplicar em suas atividades do dia-a-dia, só assim mesmo pra entender realmente heranca, encapsulamento, polimorfismo, abstracao

  2. Quanto aos frameworks, depende muito o tipo de projeto, se é projeto desktop, web. E também depende das necessidades do projeto, no caso pra definir se é melhor Spring ou EJB, Jboss ou Tomcat…

  3. Pergunta bem pessoal, prefiro não responder… e que gera discussao pra um topico novo…

Infelizmente, tem que começar do começo!

Na minha opinião, é um grande erro aprender Java caindo de cara nos frameworks, até mesmo porque nem sempre a solução apresentada por eles é a melhor. Quando eu resolvi me especializar na plataforma Java eu me aprofundei na linguagem Java em si (eu já tinha base em OO da faculdade, vim do C++) antes de mais nada. E isso ajuda muito. Entender collections, I/O, thread e reflections faz toda diferença na hora de estudar a especificação JEE para somente então você estudar os frameworks. Padrões de projeto também ajudam muito no estudo, pois a plataforma usa e abusa deles. O caminho é mais natural e menos sofrido na minha opinião. Claro que leva um tempo, ainda mais para quem trabalha, mas como você já tem toda essa experiência, acredito que o parte mais difícil será mudar de paradigma.

Só para constar, aqui onde trabalho tem uns 3 profissionais que vieram do Clipper. Adaptaram-se tão bem ao paradigma OO e à plataforma Java que parece que eles aprenderam a programar nessa linguagem.

Amigos :

Fico realmente muito feliz com a velocidade com que vocês me responderam. 3 posts em menos de 30 minutos. Realmente fantástico e muito obrigado.
Na verdade VB6 também tem uma grande parte de OO. Você tem os objetos e suas propriedades. O que você não tem é thread nativas, herança tranquila de classes… tudo é feito a base da API e os resultados quebram o galho. De uma maneira ou de outra, ACHO que estou na metade do caminho da mudança de paradigma.
Fazendo uma análise rápida, realmente estou atropelando alguns conhecimentos básicos da linguagem, mas já percebi que essa metodologia não vai trazer o resultado esperado.

Nel :

  1. Vou ler os sites que vc passou.
  2. Eu fiz essa pergunta porque, uma das dúvidas que tenho é em relação ao Struts, EJB e ao Swing.
    Mas como você falou, realmente existem vários aspectos a serem levados em conta.
  3. Sim. o problema do FLEX é que ele exige demais da máquina, mas ele aparentemente evitaria os erros que o pessoal relatou no post http://www.guj.com.br/java/231652-alguem-usa-algum...n-in-view-ao-trabalhar-com-jpa (APARENTEMENTE)

Ajudou e ajudou muito mesmo, muito obrigado.

igor_ks:

Muito obrigado, frequentarei muitas vezes esse forum.

  1. Como eu falei antes, eu tenho algum conceito de OO que adquiri no VB6. O Clipper realmente não tem nada disso. Mas vou ler mais sobre os assuntos relacionados aos objetos que vc sugeriu.
  2. Então… ainda tem mais essa que eu estava esquecendo : Glassfish, Tomcat ou JBoss… Para a cabecinha de alguém que nunca precisou de servidor de aplicação em VB6 ou Clipper é uma coisa bem confusa… mas vou melhorar, prometo.
  3. Minha intenção não é fazer flamewar, essas coisas… é só uma duvida. Mas o Nel respondeu bem a minha duvida.

Novamente, obrigado igor_ks

rmendes08:

Obrigado por responder, rmendes08

Eu já percebi que vou ter que rever meus conceitos de auto-didática e vou ter que voltar para o fundamentos de java mesmo.
rmendes_08, uma curiosidade : a curva de aprendizado de java para C ou C++ é suave ?

Olá,

Eu também comecei no Java vindo de outras linguagens (principalmente VB), e meu primeiro passo, que creio ter sido uma boa escolha, foi ler os tutoriais oficiais de java da Sun (atualmente da Oracle): http://download.oracle.com/javase/tutorial/getStarted/index.html

Ele vai no basicão do Java, sem perder muito tempo com conceitos que já são familiares para quem programa.

[quote=gomesrod]Olá,

Eu também comecei no Java vindo de outras linguagens (principalmente VB), e meu primeiro passo, que creio ter sido uma boa escolha, foi ler os tutoriais oficiais de java da Sun (atualmente da Oracle): http://download.oracle.com/javase/tutorial/getStarted/index.html

Ele vai no basicão do Java, sem perder muito tempo com conceitos que já são familiares para quem programa.[/quote]

Estes tutoriais são ótimos! Aprendi Swing praticamente com eles.

De nada, meu caro.

É como eu disse, não existe nada 100% e muito menos perfeito.
Você vai encontrar bugs em todas as tecnologias. Eu diria mais, a WEB ainda é mais complexo, por tudo o que envolve. Conceitos de Request, Response, Sessão e etc, coisas que você não encontra em uma aplicação Swing. Todavia, há tecnologias que se adaptam melhor dada uma necessidade, por isso citei a questão da análise.

Podemos fazer cada um o seu sistema, você usar a tecnologia X e o seu sistema ficar excelente e eu, baseado nisso, usar a mesma tecnologia e o meu ficar pessimo, simplesmente porque a minha necessidade era diferente da sua. Creio que isso tenha ficado claro para você.

Abraços.

a curva de aprendizado de java para C ou C++ é suave ? 

Você quer dizer de quem já programa em Java e quer migrar para C++ ?

Bom, só quem já passou por isso para responder. Acho que para quem conhece OO, e estruturas de dados é tranquilo. Geralmente, quando você fica fera em uma LP, para aprender outra linguagem você já vai em cima das diferenças que interessam. A sintaxe de C++ é mais enjoada, mas é preciso ficar atento principalmente a questões como alocação de memória, dynamic binding/static binding, etc. Estando atento a estes pontos, acho que é tranquilo.

O que eu gostei ao migrar de C++ para Java foi a simplicidade com que Java lida com a alocação de objetos na memória e o GC. Isso facilita bastante a vida.

[quote=nel]De nada, meu caro.

É como eu disse, não existe nada 100% e muito menos perfeito.
Você vai encontrar bugs em todas as tecnologias. Eu diria mais, a WEB ainda é mais complexo, por tudo o que envolve. Conceitos de Request, Response, Sessão e etc, coisas que você não encontra em uma aplicação Swing. Todavia, há tecnologias que se adaptam melhor dada uma necessidade, por isso citei a questão da análise.

Podemos fazer cada um o seu sistema, você usar a tecnologia X e o seu sistema ficar excelente e eu, baseado nisso, usar a mesma tecnologia e o meu ficar pessimo, simplesmente porque a minha necessidade era diferente da sua. Creio que isso tenha ficado claro para você.

Abraços.[/quote]

Isso é bem verdade. Com Swing + JDBC você já consegue fazer sistemas comerciais assim como no Delhpi e VB. Não com a mesma produtividade talvez, mas já é possível chegar em um resultado bem parecido.

Realmente, o ponto fraco de possuir muitos frameworks é que vc se perde e não sabe qual usar no começo, mas depois com o tempo fica automático essa diferença.

Não passa de pequenas coisas. No começo assusta pois tem: JSP, Serlvet, JSF, JSTL, Struts, Hibernate, EL(Expression Languages), DI(Dependency Injection), JDBC, JUnit, Selenium, TestNG, rsrs mas nao se assuste, em um projeto que vc faz, jah usa metade disso e descobre que sao coisas simples…

Olá! Bem vindo ao java. Fico feliz de ver a comunidade crescer a cada dia :slight_smile:

1: Acho que o mais importante para aprender java é ir do começo ao fim. Sem pular uma letra(nenhuma mesmo). Você consegue facilmente apostilas e livros. O livro Java: Como Programar é ótimo para quem quer aprender java. Você consegue aprender java e java oo com a apostila fj-11 e aprender java web com fj-21. Acho que java web é mais interessante aprender do que Swing pois creio que o futuro está no web.

2: Aí depende para que você precisa. Eu ja experimentei alguns frameworks web, como: Struts 2, JSF, Hibernate, VRaptor e estou aprendendo Spring. Em meu ver os que eu mais gostei foi o Hibernate(ótimo para persistência com BD) e VRaptor(Muito bom para conceitos MVC(Model-View-Controller), além de ser feito por brasileiros). Eu gostei também do JSF, mas achei ele um pouco difícil de mecher, como não estava precisando de todas as funcionalidades dele eu fui para o VRaptor, que na minha opnião é super fácil de mecher e rápido de programar, não sei quanto à sua velocidade em tempo de execução, mas até hoje não tive problemas. Vou começar a estudar Spring com o livro: Spring em ação que comprei e estou esperando chegar(correios estavam em greve).

3: Não vou poder te responder agora, pois não testei o FLEX. JSF é muito bom, reconheço, mas achei um pouco diferente de usar ele(um pouco difícil). Na verdade era para mim estar bom no JSF pois não estava me preocupando com a dificuldade, eu parei os estudos porque eu estava aprendendo JSF com xhtml e não consegui importar taglibs como displaytag e deu maior dor de cabeça. Claro que eu podia usar o jsp mas faz tempo e nem lembro porque não usei. Então comecei com o VRaptor depois que testei o Struts 2 e não gostei muito.

Espero ter ajudado e qualquer dúvida sobre java e não conseguir encontrar nada a respeito, poste mesmo no fórum e não tenha vergonha, pois Java é uma linguagem muito abrangente: cheio de bibliotecas e frameworks que é impossível um humano saber tudo.

Não sei em que nível você está em respeito da linguagem, mas acredito que não é hora de pensar em frameworks e web. Primeiro aprenda bem Java, aprenda um pouco de swing caso não queira se aprofundar, então aprenda JSPs e Servlets e por último aprenda os frameworks que na minha opnião varia de gosto. O jeito é ir experimentando igual eu (um pouco chato), mas é bom que você trabalha com o framework que sente confortável.

Abrçs e boa sorte com os estudos! :slight_smile: