Ajudar a direcionar um iniciante em Java

Boa tarde colegas.

O Objetivo desse tópico é ter opiniões de programadores mais experientes em relação a minha trajetória em Java para saber se estou no caminho certo.

Para iniciar segue alguns dados pessoais:

Estou no quarto semestre da faculdade de desenvolvimento de sistemas, esse semestre vai ser focado em programação.
Segue a grade do semestre:
Estrutura de Dados
Programação Orientada a Objetos
Programação Web
Téc. Desenvolvimento de Sistemas
Técnicas de Programação

Estou fazendo cursos na K19 Treinamentos, segue a grade:
Orientação a Objetos em Java (Concluído)
Desenvolvimento web com JSF2 e JPA2 (Cursando)
Persistência com JPA2 e Hibernate (Não iniciado)
Desenvolvimento Web Avançado com JSF2, EJB3.1 e CDI (Não iniciado)
Integração de Sistemas com Webservices, JMS e EJB (Não iniciado)

NÃO TRABALHO NA ÁREA

Agora vamos ao que interessa.

Antes de começar os cursos em java, li muito sobre lógica de programação, comprei um livro Programação de computadores em Java do Rui Rossi, é voltado para desktop, li 1/3 do livro e estava gostando bastante do livro e percebendo o desenvolvimento, porém no curso o instrutor foi bem claro, se for perder tempo em java estude para WEB, ai veio as minhas dúvidas.

Decidi seguir o conselho do instrutor, comprei o livro Java para Web, mas não estou compreendendo muito bem o livro, muitas dúvidas que não são esclarecidas pelo próprio livro, não estou sentindo o desenvolvimento fluir como no livro para desktop, será que o livro é muito avançado pro meu nível?

Pesquisei sobre as primeiras certificações e se não estou errado, a maioria dos tópicos são conceitos que eu estava vendo no livro anterior para desktop.

Devo continuar focado em Web, mesmo sem compreender totalmente o livro?

Espero me aprofundar mais no cursos que estou fazendo para continuar a ler o livro para Web?

Conhecem algum outro livro voltado para Web?

Por favor, fico no aguardo a opinião de vocês.

Apenas uma leve opinião meu caro, talvez alguns tópicos sejam muitos simples, e outros nem tanto, porém são assuntos para você “seguir um carreira java”, portanto comece de baixo…
LOGICAMENTE não estou dizendo que deva saber tudo, mas deve estar pode dentro da maioria destas ferramentas, e saber que as outras existem e pra que servem…

----> JAVA BÁSICO

Classes e objetos
Introdução aos conceitos de classes e objetos
Notação UML
Sobrecarga de métodos
Heap, stack e garbage collector
Operador this

Modificadores de acesso, construtores e elementos estáticos
Modificadores de acesso e encapsulamento
Construtores
Atributos e métodos estáticos

Herança e Polimorfismo
Herança
Sobrescrita de métodos
Polimorfismo
Palavra-chave super e o operador instanceof

Classes Abstratas e Interfaces
Classes e métodos abstratos
Interfaces

Tratamento de Exceções
Checked e unchecked exceptions
Lançando, tratando e transformando exceções

Strings, Datas e Números
String e StringBuilder
Formatação de strings, datas e números
Números randômicos

Enums, Classes Wrappers e Autoboxing
Enums e seus elementos
Funcionamento das classes wrappers
Autoboxing

Organização do Código Java
Separação em pacotes e uso do import
Visibilidade package e protected
Criação de Javadoc
Geração de arquivos JAR

Coleção de Dados
Arrays
Listas
Conjuntos
Mapas

Introdução ao I/O
Fluxo de dados
Streams em arquivos
Classes Scanner, PrintStream e File

Programação Multithread e Sincronismo
O que são threads, como criá-las e executá-las
Ciclo de vida
Prioridade e a atuação do escalonador
Sincronização e comunicação de threads

Expressões Regulares
Como funcionam
Expressões regulares e o Java
Divisão de dados em tokens

----> JAVA AVANÇADO

Annotations e Reflection API
O que são annotations, como criá-las e usá-las
Uso da reflexão com objetos

Generics
Comparação entre o uso e não uso do generics
Uso do generics em classes e métodos
Generics e as subclasses
Wildcars

Inner Classes
Características de uma inner class
Os 4 tipos de inner classes existentes

Concorrência e Paralelismo com java.util.concurrent
Interfaces Runnable e Callable
Conditions e locks
Programação paralela
Tarefas futuras
Operações atômicas

Programação em Rede com Sockets TCP/IP e UDP/IP
Sockets TCP/IP e UDP/IP
Multicast

Programação Distribuída com RMI
RMI Registry
Stubs e Skeletons
Invocação de objetos remotos
Implementação de um cliente

Tópicos Avançados de I/O
Argumentos de linha de comando
A classe Properties
Serialização de objetos
Acesso aleatório a arquivos

Acessando Bancos de Dados Através de JDBC
Arquitura do JDBC
Uso de conexões, statements e results sets
Metadados
Transações
Atualizações em lote

Desenvolvendo Aplicações Gráficas com Swing
Containers, components e layout managers
Menus
Tratamento de eventos

Manipulação de Dados nos Formatos XML e JSON
Manipulação de XML com as APIs DOM e SAX
Validação com XML Schema
Manipulação de dados no formato JSON

Log em Aplicações com SLF4J e Logback
O papel das APIs SLF4J e Logback
Loggers, log levels, appenders e layouts
Configuração

Criando Testes de Unidade com o JUnit
Implementação de métodos para testes de unidade
Execução e verificação dos resultados dos testes
Test suites

Automatizando Tarefas com o Ant
O Ant como automatizador de tarefas
Build file
Project, target, task e properties

Manipulação de Dados com a New I/O API
Channels e Buffers
Memory-Mapped Files
I/O assíncrono

Internacionalização
Locale
ResourceBundle e MessageFormat
Formatação de números e datas

----> JAVA - WEB

Introdução ao JSF
A plataforma Java EE
Aplicações web em Java
Funcionamento do JSF

Configurando o ambiente de desenvolvimento
Instalação do JDK
Instalação da IDE Eclipse
Instalação do servidor de aplicações GlassFish

Beans e injeção de dependência com CDI
Uso de beans CDI no JSF
Escopos de CDI beans

Tags e Componentes JSF
Tags existentes no JSF
Integração entre JSF e JavaScript
Resources

Navegação entre telas
Navegação estática e dinâmica
Regras de navegação
Forward e redirect
Métodos GET e POST

Templates e tags com Facelets
Templates de páginas
Inclusão de páginas
Decorators
Tags customizadas com Facelets

Tabelas dinâmicas com o componente DataTable
Criação de tabelas
Configuração das propriedades das tabelas

Conversores e validadores
Conversão de dados
Validação de dados

Eventos em JSF
Ciclo de vida de requisições
Eventos existentes no JSF

Integração de com banco de dados usando JPA
Arquitetura e funcionamento da JPA
Entidades e relacionamentos
Gerenciando conexões com bancos de dados
Transações

Modelo MVC e estrutura das aplicações
O modelo MVC e sua aplicação no JSF
Aplicação de design patterns na camada model

Utilizando AJAX com JSF
Requisições AJAX no JSF
Ciclo de vida de requisições AJAX

Dicas práticas de JSF
Dicas úteis para desenvolvedores

PrimeFaces - Dando mais poder ao JSF
Configuração
Componentes básicos e avançados do PrimeFaces
Exemplos práticos de usos de componentes
Temas

Por fim, deve saber sobre JPA, EJB, JPQL, Banco de Dados (eu utilizo postgres), JSF… and go on!

---- E POR ULTIMO, E TALVEZ ** SUPER IMPORTANTE**: Aprenda, decifre, sonhe… com “Design Patterns” <<- esses caras ai fazem muita diferença em organização e performance.

O resto meu caro… Você vai aprendendo com o tempo! um abraço e bons estudos.

[quote=tiagoberga]Apenas uma leve opinião meu caro, talvez alguns tópicos sejam muitos simples, e outros nem tanto, porém são assuntos para você “seguir um carreira java”, portanto comece de baixo…
LOGICAMENTE não estou dizendo que deva saber tudo, mas deve estar pode dentro da maioria destas ferramentas, e saber que as outras existem e pra que servem…

----> JAVA BÁSICO

Classes e objetos
Introdução aos conceitos de classes e objetos
Notação UML
Sobrecarga de métodos
Heap, stack e garbage collector
Operador this

Modificadores de acesso, construtores e elementos estáticos
Modificadores de acesso e encapsulamento
Construtores
Atributos e métodos estáticos

Herança e Polimorfismo
Herança
Sobrescrita de métodos
Polimorfismo
Palavra-chave super e o operador instanceof

Classes Abstratas e Interfaces
Classes e métodos abstratos
Interfaces

Tratamento de Exceções
Checked e unchecked exceptions
Lançando, tratando e transformando exceções

Strings, Datas e Números
String e StringBuilder
Formatação de strings, datas e números
Números randômicos

Enums, Classes Wrappers e Autoboxing
Enums e seus elementos
Funcionamento das classes wrappers
Autoboxing

Organização do Código Java
Separação em pacotes e uso do import
Visibilidade package e protected
Criação de Javadoc
Geração de arquivos JAR

Coleção de Dados
Arrays
Listas
Conjuntos
Mapas

Introdução ao I/O
Fluxo de dados
Streams em arquivos
Classes Scanner, PrintStream e File

Programação Multithread e Sincronismo
O que são threads, como criá-las e executá-las
Ciclo de vida
Prioridade e a atuação do escalonador
Sincronização e comunicação de threads

Expressões Regulares
Como funcionam
Expressões regulares e o Java
Divisão de dados em tokens

----> JAVA AVANÇADO

Annotations e Reflection API
O que são annotations, como criá-las e usá-las
Uso da reflexão com objetos

Generics
Comparação entre o uso e não uso do generics
Uso do generics em classes e métodos
Generics e as subclasses
Wildcars

Inner Classes
Características de uma inner class
Os 4 tipos de inner classes existentes

Concorrência e Paralelismo com java.util.concurrent
Interfaces Runnable e Callable
Conditions e locks
Programação paralela
Tarefas futuras
Operações atômicas

Programação em Rede com Sockets TCP/IP e UDP/IP
Sockets TCP/IP e UDP/IP
Multicast

Programação Distribuída com RMI
RMI Registry
Stubs e Skeletons
Invocação de objetos remotos
Implementação de um cliente

Tópicos Avançados de I/O
Argumentos de linha de comando
A classe Properties
Serialização de objetos
Acesso aleatório a arquivos

Acessando Bancos de Dados Através de JDBC
Arquitura do JDBC
Uso de conexões, statements e results sets
Metadados
Transações
Atualizações em lote

Desenvolvendo Aplicações Gráficas com Swing
Containers, components e layout managers
Menus
Tratamento de eventos

Manipulação de Dados nos Formatos XML e JSON
Manipulação de XML com as APIs DOM e SAX
Validação com XML Schema
Manipulação de dados no formato JSON

Log em Aplicações com SLF4J e Logback
O papel das APIs SLF4J e Logback
Loggers, log levels, appenders e layouts
Configuração

Criando Testes de Unidade com o JUnit
Implementação de métodos para testes de unidade
Execução e verificação dos resultados dos testes
Test suites

Automatizando Tarefas com o Ant
O Ant como automatizador de tarefas
Build file
Project, target, task e properties

Manipulação de Dados com a New I/O API
Channels e Buffers
Memory-Mapped Files
I/O assíncrono

Internacionalização
Locale
ResourceBundle e MessageFormat
Formatação de números e datas

----> JAVA - WEB

Introdução ao JSF
A plataforma Java EE
Aplicações web em Java
Funcionamento do JSF

Configurando o ambiente de desenvolvimento
Instalação do JDK
Instalação da IDE Eclipse
Instalação do servidor de aplicações GlassFish

Beans e injeção de dependência com CDI
Uso de beans CDI no JSF
Escopos de CDI beans

Tags e Componentes JSF
Tags existentes no JSF
Integração entre JSF e JavaScript
Resources

Navegação entre telas
Navegação estática e dinâmica
Regras de navegação
Forward e redirect
Métodos GET e POST

Templates e tags com Facelets
Templates de páginas
Inclusão de páginas
Decorators
Tags customizadas com Facelets

Tabelas dinâmicas com o componente DataTable
Criação de tabelas
Configuração das propriedades das tabelas

Conversores e validadores
Conversão de dados
Validação de dados

Eventos em JSF
Ciclo de vida de requisições
Eventos existentes no JSF

Integração de com banco de dados usando JPA
Arquitetura e funcionamento da JPA
Entidades e relacionamentos
Gerenciando conexões com bancos de dados
Transações

Modelo MVC e estrutura das aplicações
O modelo MVC e sua aplicação no JSF
Aplicação de design patterns na camada model

Utilizando AJAX com JSF
Requisições AJAX no JSF
Ciclo de vida de requisições AJAX

Dicas práticas de JSF
Dicas úteis para desenvolvedores

PrimeFaces - Dando mais poder ao JSF
Configuração
Componentes básicos e avançados do PrimeFaces
Exemplos práticos de usos de componentes
Temas

Por fim, deve saber sobre JPA, EJB, JPQL, Banco de Dados (eu utilizo postgres), JSF… and go on!

---- E POR ULTIMO, E TALVEZ ** SUPER IMPORTANTE**: Aprenda, decifre, sonhe… com “Design Patterns” <<- esses caras ai fazem muita diferença em organização e performance.

O resto meu caro… Você vai aprendendo com o tempo! um abraço e bons estudos.[/quote]

Muito obrigado por responder, é exatamente isso que eu estava procurando.

na sua opinião o aprendizado é na ordem que você citou?

Java Basico / Avançado / Web?

Qual o livro de java web que você comprou?
Eu, sinceramente, sou contra essa idéia de que ‘java é só web’. É uma parte importante, mas não é todo o java.
Afinal, se você não quiser web, quiser android, poderá ter problemas.
Então, sugiro que retome o livro anterior, leia-o, pratique os exercícios e, assim que se sentir a vontade, volte para web, desde que o livro seja bom.

[quote=drsmachado]Qual o livro de java web que você comprou?
Eu, sinceramente, sou contra essa idéia de que ‘java é só web’. É uma parte importante, mas não é todo o java.
Afinal, se você não quiser web, quiser android, poderá ter problemas.
Então, sugiro que retome o livro anterior, leia-o, pratique os exercícios e, assim que se sentir a vontade, volte para web, desde que o livro seja bom.[/quote]

Vlw por responder!

Livro Web = Programação Java para Web
http://www.javaparaweb.com.br/blog/

Me interessei por causa que ele tem três projetos desde o início.

Acho que nesse meio aí faltou alguma coisa sobre protocolo HTTP e TCP/IP, ou protocolos de rede de maneira geral, afinal de contas, cliente e servidor não se comunicam por mágica. Parece óbvio, mas já vi gente no fórum perguntado porque que o JOptionPane que ele instanciava no Servlet não aparecia no browser …

Particularmente, eu nem gosto muito dessa história de “Java Para Web”, afinal de contas, a linguagem é a mesma, a especificação da JVM é a mesma , você pode muito bem fazer uma aplicação Web com Java apenas com JSE (é claro que você vai ter que reinventar a roda, mas …).

De qualquer maneira, minha sugestão é você focar em conceitos fundamentais (OO, bancos de dados, redes) o máximo de tempo possível. Claro que em algum momento você vai precisar aprender as ferramentas (JSF, JPA, etc.), mas quanto mais conceitos você conhecer, mais naturais as ferramentas vão lhe parecer.

[quote=rmendes08]Acho que nesse meio aí faltou alguma coisa sobre protocolo HTTP e TCP/IP, ou protocolos de rede de maneira geral, afinal de contas, cliente e servidor não se comunicam por mágica. Parece óbvio, mas já vi gente no fórum perguntado porque que o JOptionPane que ele instanciava no Servlet não aparecia no browser …

Particularmente, eu nem gosto muito dessa história de “Java Para Web”, afinal de contas, a linguagem é a mesma, a especificação da JVM é a mesma , você pode muito bem fazer uma aplicação Web com Java apenas com JSE (é claro que você vai ter que reinventar a roda, mas …).

De qualquer maneira, minha sugestão é você focar em conceitos fundamentais (OO, bancos de dados, redes) o máximo de tempo possível. Claro que em algum momento você vai precisar aprender as ferramentas (JSF, JPA, etc.), mas quanto mais conceitos você conhecer, mais naturais as ferramentas vão lhe parecer.
[/quote]

Obrigado por postar sua opinião.

Entendo.

Estava pensando em dar uma pausa nos cursos presenciais, na última aula até comentei com o instrutor sobre esse assunto, justamente para fixar os conceitos OO e fundamento do J2SE para ir pra java web com uma base mais sólida.

Porém não trabalho na área e bem o mal fazendo o curso estou vendo java constantemente, o que também é bom.

Não sei qual seria a melhor opção.

[quote=Artur Martini][quote=rmendes08]Acho que nesse meio aí faltou alguma coisa sobre protocolo HTTP e TCP/IP, ou protocolos de rede de maneira geral, afinal de contas, cliente e servidor não se comunicam por mágica. Parece óbvio, mas já vi gente no fórum perguntado porque que o JOptionPane que ele instanciava no Servlet não aparecia no browser …

Particularmente, eu nem gosto muito dessa história de “Java Para Web”, afinal de contas, a linguagem é a mesma, a especificação da JVM é a mesma , você pode muito bem fazer uma aplicação Web com Java apenas com JSE (é claro que você vai ter que reinventar a roda, mas …).

De qualquer maneira, minha sugestão é você focar em conceitos fundamentais (OO, bancos de dados, redes) o máximo de tempo possível. Claro que em algum momento você vai precisar aprender as ferramentas (JSF, JPA, etc.), mas quanto mais conceitos você conhecer, mais naturais as ferramentas vão lhe parecer.
[/quote]

Obrigado por postar sua opinião.

Entendo.

Estava pensando em dar uma pausa nos cursos presenciais, na última aula até comentei com o instrutor sobre esse assunto, justamente para fixar os conceitos OO e fundamento do J2SE para ir pra java web com uma base mais sólida.

Porém não trabalho na área e bem o mal fazendo o curso estou vendo java constantemente, o que também é bom.

Não sei qual seria a melhor opção.

[/quote]

Aí é a hora de ser pragmático. Prossiga com os cursos, mesmo que você tenha a sensação de estar atropelando as coisas. Afinal de contas, logo você vai procurar um estágio ou emprego, e tendo o curso no currículo te dá mais chances para uma entrevista. Mas não menospreze esse conhecimento um pouco mais “teórico”, sob o risco de ficar viciado em tutoriais.

[quote=Artur Martini]
Muito obrigado por responder, é exatamente isso que eu estava procurando.

na sua opinião o aprendizado é na ordem que você citou?

Java Basico / Avançado / Web?[/quote]

Sim Artur! … este é um bom caminho pra você seguir, construindo uma ótima base e chegando até um nível mais avançado em Java.
lembrando* é uma opinião, você poderia iniciar diretamente na Web, porém vai apanhar muito mais se decidir isso, (Mas é possível aprender sim).

Obrigado a todos pelas opiniões.

Se mais alguém quiser expor a opinião eu agradeço!