Quais são as diferenças entre os frameworks e por que usá-los?[RESOLVIDO]

Oi. Sou novo aqui, embora eu já possua o cadastro há um bom tempo. Não sou nenhum gênio da informática, mas estudo e estagio com isso. Muitas coisas não ficam claras para mim. Espero que alguém possa tirar essas dúvidas de forma clara. Agradeço já as ajudas em todo caso.

Sei que existem frameworks, que em tese, irão facilitar o trabalho ou ao menos reduzí-lo. Mas há coisas que não entendo ainda. Por exemplo, lido com Struts, sei que o servidor de aplicação é JBoss, SQL Server, JSP e HTML(acredito que seja óbvio esse). JavaScript e JQuery também.

Acredito ser possível que tudo funcione numa aplicação de cadastro, consulta, e relatório, simplesmente com JavaScript, por que devo usar o Struts?

Entendo que a vantagem do JQuery é que escrevo menos, e já possui muita coisa pronta, como as máscaras que acho bem úteis. Mas ainda assim é JavaScript. Se não me engano, consigo pegar as informações do form, usando JavaScript. Se isso é possível, também é possível inserir essas informações num objeto Java com suas propriedades e a partir daí, delegar ao JPA para que ele insira nos bancos correspondentes. Por que preciso utilizar o Struts?

O JSF parece fornecer formas de usar telas prontas e com visual de aplicação desktop. O restante me faz sentido. Mas n compreendo o ganho no uso do Struts.

Cada época tem uma moda nova, vai se acostumando. Importante é você ter uma base sólida em relação a conceitos, técnicas e evitar estudar frameworks mágicos que façam você perder tempo com aprendizado particular complexo do framework, ao invés de ter liberdade com a natureza do desenvolvimento web por exemplo. JSF é um exemplo que se perde mais tempo aprendendo ele do que saber web de verdade. Se a empresa que trabalha usa JSF e deseja continuar nela, não tem saída em ter que aprender JSF. Mas fora isso não caia no conto do JSF, web não é desktop.

Seus estudos devem ser focados no que você trabalha ou tipo de vaga que deseja entrar. Se vai ser uma vaga que use JQuery, estude JQuery. Se usam Angular, então estuda Angular. Ou seja, seu foco de estudo tem que ser o seu objetivo, estudar os itens mais usados nas vagas pretendidas. Loucura sair estudando tudo, a vida é maior do que isso, só é importante apenas acompanhar o resto.

Essa apostila dá um bom direcionamento inicial sobre web com Java: http://www.caelum.com.br/apostila-java-web/

Muito obrigado pela resposta, faz total sentido o que falou em focar…Mas também quero entender o porquê, por exemplo de se usar Struts, sendo que acho possível fazer o mesmo utilizando JavaScript. Não tenho experiência suficiente para compreender totalmente, mas lembro pelo pouco que vi de JavaScript, que há funções para pegar o texto de um input text por exemplo. Se posso fazer isso, tenho o que inserir em um objeto java e assim fazer a persistência com JPA. Ao meu entender o Struts não é essencial nesse caso. E tentando uma analogia com o JQuery, este ao menos reduz o que será digitado acredito. Então acho que embora corra o risco de abstrair muitas coisas do programador, o JQuery fornece ganhos. Não consigo ver um aproveitamento do Struts. Sabe explicar a vantagem dele?

O papel do Struts é receber e responder requisições no lado servidor, através de Actions. O JavaScript cuida do lado cliente. Existe JavaScript também do lado servidor, mas você teria que usar NodeJs por exemplo.

O Struts não é mais usado em projetos atuais. Um dos mais usados atualmente é o Spring MVC/Boot, usando Action e/ou Restful. E no lado client AngularJs e/ou JQuery.

JQuery até utilizo, mas bem pouco. Tem umas validações ou máscaras em cima disso. Crio funções que verificam um campo e algumas vezes uma que chame todas essas que verificam cada campo(para verificar todo o formulário). Estão pretendendo fazer uma próxima aplicação em JSF. Vou dar uma olhada daqui algum tempo. Ainda estou na faculdade e tenho uma série de pequenos empecilhos, mas continuo tentando acertar tudo para aprender mais. É aquilo que você falou também, não da pra querer aprender tudo na mesma fase da vida. Você é profissional da área já?

Sim, mas atualmente trabalho com ASP.NET MVC/WebApi. Java cresceu muito pros lados, não tem foco, então o desenvolvedor tem que buscar um foco ou ficar louco estudando infinitos frameworks.

Entendi. Te mandei uma mensagem.

São bastante tecnologias, e não adianta querer aprender tudo de uma vez, você vai se perder. Talvez entendendo o conceito de cada possa te ajudar. Vou tentar escrever um pouco das tecnlogias mais usadas.

Gerenciador de dependencias: Maven, Ant, Gradle
Esses ficam responsáveis por baixar as dependências (os jars), fazer o build do projeto (empacotar: seja em formato jar, war, ear), rodar testes automáticos

Testes: JUnit, TestNG, Selenium (web: automatizar chamadas de botão, simulando testes funcionais)
Responsável por criar os testes automatizados

Persistência:: JPA (especificação), Hibernate (implementação da especificação JPA)
Responsável por criar inserir, alterar, recuperar dados no banco

Business:: EJB, Spring, Struts, VRaptor
Esses ficam por gerenciar toda a camada de negócio, controle de transação, segurança

Criação das telas: Component-base: JSF (Primefaces, IceFaces, RichFaces…), Action-based: JSP, Angular. Dentro disso, utiliza: HTML, CSS, Javascript, (JQuery)

Aí tem outras coisas com integração continua (Jenkins, TeamCity), Mock (EasyMock, Mockito), Rest (RestEasy, Jersey), Controle de versão: Git, SVN

Um pouco mais avançado:

Tendências que vejo (opinião minha): CloudComputing (AWS), Microservices (REST), Action-based (Angular), NoSQL, Java 7 e Java 8 (principalmente lambdas)
Atualmente trabalho com APIs do Netflix, pra quem não conhece: http://netflix.github.io/#repo e RxJava: https://github.com/ReactiveX/RxJava

2 curtidas

Po brigadão mesmo, isso já deixa umas coisas mais fáceis de entender. SVN também utilizo. A parte complicada é entender o que faz o que e com quem interage. Porque a partir daí, já se pode estudar cada um, e fazer minhas escolhas. Particularmente tenho interesse em programar para android, ver como funciona, mas ainda não parei para estudar a fundo. Também não sei o mercado. Outro que até tenho interesse é programação em games. Mas queria fazer um curso disso antes.

Acho legal essa empolgação de aprender as coisas, é uma grande motivação pra sentar na cadeira e aprender rapidamente, pois está empolgado. Só tome cuidado com esquecer de aprender os fundamentos, de ir direto usando os frameworks e nem saber direito o que ele faz. Se não souber os fundamentos, você pode ficar dias quebrando a cabeça com algo relativamente besta.

Concordo. Não sei se há empolgação assim tão grande haha. Ontem eu estava tentando montar um ambiente para programar em android. Verei se consigo criar um Hello World hoje. Parei na barreira de encontrar a pasta Activity na árvore do projeto. O tutorial que eu estava lendo citava isso, mas precisei de mais de uma fonte, já que esse tutorial não indicava a forma tradicional de ir pelos menus, até encontrar o local para apontar a pasta do sdk android. Acho que vou focar nessa parte por enquanto. Até porque tenho as matérias da faculdade já. Hoje verei se fiz algo errado ou se foi outro problema.

Resumiu