Blog

Serie SCJP:Genérico/Generics

Salve! Salve! Pessoal! Mais um post da série Revisão SCJP. No ultimo post falei sobre Conjuntos/Collection e aproveitando o ritmo vou falar hoje sobre Generics/genéricos que foi adicionado ao Java 5 e consta no exame 310-055. Nessa coluna as explicações serão mais a nível de código então fique atento aos comentários.
Aos estudantes SCJP se liguem nas pegadinhas que pode constar no seu exame.
Let’s GO…

Pré-Requisito

– Instalação Java 1.5/superior

Last Column Java – Imasters  /Ultima Coluna Java – Imasters:  

Instalando e configurando ambiente JEE Netbeans 6 

Summary

This article presents a theory and practice about Generics. Generics are one subject that is present in the exam 310-055 and there are several questions about this subject. When I did my exam I did, about seven questions with generics and some lots difficult.
Generics serve for specific the type of Collection.
In the Java 5, you can specific that type of object your Collection can to get. I spoke Object, pay attention for not confuse with type primitives. Check the example
Ex.1
below.
The
Ex.2 not compile because I try to add object different this Collection, see: 
ist.add(“camilo”);
It is impossible, because we have one Collection of the type Integer. 

Genéricos

Os genéricos ele servem para especificar o tipo de conjunto. Ou seja, manter a proteção dos objetos para aquele determinado conjunto. “Procure não colocar maça na caixa de uva”. 

No Pré-Java 5  não era possível informar que tipo de conjunto. Veja:  

Ex.1

List l = new ArrayList();

l.add(“74”);

l.add(new Dog(“dd”));

//recebe qualquer coisa

 No Java 5 você especificar que tipo de objeto seu conjunto pode receber. Eu falei OBJETO cuidado para não confundir com tipos PRIMITIVOS.

 Ex.2

List<Integer> ist = new ArrayList<Integer>();

ist.add(99);

ist.add(44);

ist.add(“camilo”);//erro de compilação não pode receber String somente Integer

 Para o exame/sua vida como programador você não pode esquecer os pontos abaixo referente a genéricos:

 -Se usar Java 5 com pré-Java sua proteção vai para o “saco do lixo”, ele aceita qualquer coisa pensando que ta recebendo o tipo especifico.

 – Os erros com GENÉRICOS  são de compilação e não tempo de execução a não ser um quando acontece Cast que não seja possível.

 -Para a JVM em tempo de execução você está usando o pré-java, pois senão lançaria uma exceção.

 -O compilador ele que fica encarregado de verificar se esta tudo ok.

 -Compilar códigos com avisos não quer dizer erro de compilação. O compilador apenas avisa que ali a algo inseguro.

 -As proteções(tipos) nos conjuntos NÃO EXISTEM EM TEMPO DE EXECUÇÃO

 -Os tipos dos conjuntos(<Integer>, <Double> etc.) são destruídos em tempo de execução.

 Vejamos alguns exemplos:

//uso um tipo especifico mais passo para um não especifico proteção já era

import java.util.*;

class TestBad{

public static void main(String [] agrs){

List<Integer> list = new ArrayList<Integer>();

list.add(4);

list.add(9);

list.add(10);

Inserter in = new Inserter();

in.insert(list);

System.out.println(list);

}}

class Inserter{

void insert(List list){

list.add(new Integer(42));

list.add(new String(“camilo”));

list.add(new Double(3.9));

}}

/*está confuso? Por que adicionou uma String ao ArrayList de Integer ?
Observe que a classe que o
método insert recebe qualquer objeto e adiciona  à lista os desenvolvedores tiveram que manter isso, para que evitasse uma mudança desastrosa, para aos pré-java*/ 

/*mas é importante ter cuidado com isso no exame ele vai confundir ao infinito e  ficar brincando com Java 5 e pré-Java 5. Genéricos  é um bom assunto para brincar */ 

O código acima  compila com avisos já que temos um conjunto não seguro. Se o método da classe Inserter for modificado para void insert(List<Integer> list) o código não compila, pois somente posso ter conjunto Integer e estou adicionando ao meu conjunto outros objetos.

 A idéia de conjunto o interessante é pensar como um Barril experimente colocar dentro de um barril de polvora(Integer) algo que gere Calor(Double) eu acho que explode e você? (não compila).

 Vamos a outro exemplo:

import java.util.*;

class ConverPre{

public static void main(String agrs[]){

List lit = new ArrayList();

lit.add(58);

System.out.print(lit + ” “);

}}

No pré Java 5 isso não funcionava já que o Boxing não é feito de forma automática. Mas se encontrar uma questão assim no exame 310-055 pode marcar que compila e executa.

 Nesse ultimo exemplo apresento como pode acontecer uma exceção no caso de genéricos:

 import java.util.*;

public class GeneriList { 

//esse metodo nao quebra nenhuma regra 

static void adde(List lt){ 

lt.add(new String(“neto”));} 

public static void main(String[] args) { 

ArrayList<Integer> lis = new ArrayList(); 

lis.add(10);

lis.add(50);

adde(lis); 

System.out.println(lis); 

for(Integer it : lis){ 

int z = it; 

System.out.println(z);}}} 

Ele lança uma exceção por ter adicionado algo indevido no meu conjunto e quando fui retirar os elementos do conjunto achei que somente tinha Integer, porém fui enganado e vi uma exceção. 

A proteção foi  para o saco quando o método adde (pre-java 1.5) foi misturado com código que usa Java 5, mais o maior erro foi adicionar lt.add(String). Se fosse um Integer não teríamos problema.

 A exceção ocorre  tentar passar uma String para um Integer. O meu for espera um Integer do meu conjunto e não uma String.

 Uma situação como acima pode acontecer com um programador que não conhece as regras  de genéricos e se na equipe de desenvolvimento não contar com algum programador com o conhecimento a resolução para essa exceção pode consumir alguns minutos/horas e quem sabe gerar uma gambiarra.

 Essas são as questões faz parte do grupo das mais difíceis do exame e como a Sun não dar colher de chá a maioria das questões que envolver genéricos vai ser nesse nível (pelo menos as minhas foram).

A dica é: “Estude para aprender e para passar no exame!” 

Vou ficando por aqui! E na próxima coluna vou continuar o assunto de genéricos abordando polimorfismo e genéricos como eles se entendem? Aguarde até o próximo post.

Um abraço a todos! E até próxima! 

Serie SCJP:Conjuntos/Collection – Java

Salve! Salve!Pessoal! A partir de hoje darei inicio a uma série de post ao qual nomei: “REVISÃO SCJP”.
Espero que com essa série  possa ajudar aos pré-SCJP rsrs.
O objetivo é abordar dicas e apresentar aquele assunto “chato” e demorado de aprender quando está estudando para ser um Sun Certified Java Programmer.  Mas o post é recomendado também para os
iniciantes Java já que mais cedo ou mais tarde vocês encontrarão o assunto Collection (independente da modalidade de estudo: livro/escola).
O assunto é bastante importante: “Conjuntos/Collection”. Em primeira instância abordarei um pouco a definição  e em seguida apresento as classes e interfaces correspondentes. Por experiência própria não há outro segredo para aprender Conjuntos se você não praticá-lo incansavelmente. Aos estudantes SCJP pratique (muito++) e paralelamente associe toda parte teórica com a prática, lá vai uma dica abaixo:

Ex.: Se você está estudando a class ArrayList, pratique incansavelmente usando todos os métodos dessa class, crie códigos que lançam exceções e procure saber qual exceção é lançada. Outras que não compilam e saiba o porque.

Let’s GO…

Trabalhar com desenvolvimentos de sistemas e não envolver estrutura de dados é algo quase que impossível. Em algum momento você vai precisar armazenar informações e em outro buscá-las.

Todo programador já fez esse exercício:

Ex.1 “Crie um vetor de X posições e insira os seguintes dados […] e depois ordene, agora mostre o ultimo elemento”.

Ex.2 “Crie um vetor para armazenar nomes, porém não pode conter elementos repetidos […]”

Quando estamos iniciando os estudos como programador, solucionar esse exercício não pode ser algo tão simples em nível de programação.

Java possui algumas APIs que facilita a vida do programador, para que ele não queira “reinventar a roda”. Termine de ler o post e descubra por que…

 

Summary

The objective this article is presents a theory and practice about Collection in Java. If you is studying for SCJP is recommend the reading. There isn’t other form of the learn collection if you not practice. The students of the exam SCJP there will some questions about collection that can be easy or difficult depend of your level of study with this subject. In the end this article there are some example.

Definition collection: represents any structure of dados, where object are storage. (Kathy Sierra)

 

Pré-Requisito

Instalação Java 1.5/superior

My Column Java – Imasters /Minhas Colunas Java – Imasters:

Instalando Tomcat em 10min

Mais um pouco sobre threads em Java

Criando Servlet Netbeans 6

Criando uma aplicação Servlet & JSP – Netbeans 6

Criando pagina de erro em aplicações Java

Conjunto

Representa qualquer estrutura de dados, onde objetos são armazenados (Kathy Sierra).

Em um conjunto é possível: inserir, remover, buscar, recuperar objetos.

 

Conjunto pode ser:

Ordenado X Classificado:

– Ordenado: existe uma ordem para o conjunto seguir. Por exemplo, um conjunto de números inteiro segue 1..2…3.

– Classificado: ordem do conjunto por alguma regra de classificação. Por exemplo, class Carro, regra de classificação para os elementos armazenados nela pode ser pela cor, fornecedor, alfabeto, código de fabricação etc.

 

Em Java temos:

 

Collection – é uma INTERFACE. Onde Set, List e Queue derivam dessa interface. Métodos comuns add(), remove(), size().

 

Collections – é uma CLASS que armazena vários métodos estáticos utilitários como sort() que serve para ordenação dos elementos.

 

HashTable – essa class não é ordenada, mais segue uma lógica interna para determinar a ordem dos elementos com base nos códigos hashing. Os métodos dessa class são sincronizados e não aceita chaves nem valores null.

 

HashMap – aceita chaves e valores null, os métodos dessa class não são sincronizados e tendem a rodar mais rápido que HashTable. Chaves duplicada acaba gerando uma subscrição no valor.

 

HashSet – não existe uma ordenação na interação. Não aceita objetos iguais no conjunto desde que o código hashing seja implementado de forma eficiente.

 

ArrayList : é como um Array – mantém a ordem pelo índice.

 

LinkedHashSet : mantém a ordem pela inserção, não aceita duplicatas caso o código hashing esteja implementado de forma correta.

 

LinkedList:aceita duplicata e a ordem de iteração é por inserção.

 

PriorityQueue: Ordena os elementos usando prioridade definida pelo programador. Pode ser por: ordem natural dos elementos, implementação do java.util.comparator. Aqui é quebrada a idéia de FIFO em uma fila.

 

Métodos da classe PriorityQueue:

 

offer() à adiciona um elemento a fila.

Métodos que retorna null se estiverem vazio:

poll() à retorna o elemento com maior prioridade e remove

peek() à mostra o elemento com maior prioridade e não remove.

Esses lançam exceções não verificadas:

remove() à remove um elemento, se estiver vazio lança uma exceção.

element()à retorna o elemento na ponta da queue se estive vazia lança uma exceção

As interfaces correspondentes a cada Classe:

 

A Interface List: índice tem relevância.

Arraylist,Vector,LinkedList,

Interface Set: não aceita elementos duplicados

HashSet, LinkedhashSet, TreeSet(nao aceita null – TreeSet).

Interface Map: identificadores (Keys) exclusivos são relevantes.

LinkedHashMap e HashTable(métodos sincronizados), HashMap(aceita valores e chaves null).

Percebam a essência de usar conjuntos:

//Criarei poucos exemplos para não ficar um post muito grande, a idéia é mostrar a eficiência dos conjuntos.

Ex. 1

import java.util.ArrayList;

import java.util.Collections;

public class Locadora {

public static void main(String[] args) {

ArrayList<Integer> filmes = new ArrayList<Integer>();

filmes.add(10);

filmes.add(5);

filmes.add(35);

//método sort pertence a classe Collections há pedaginhas no exame perguntando quem é o pai desse método…

Collections.sort(filmes); System.out.println(filmes);

}}//imprime o conjunto ordenado simples não?

……………..

Ex. 2

//usando chaves, agora associei esse código com a teoria do HashMap abordada no inicio do post

import java.util.HashMap;

class Maphash{

public static void main(String agr[]){

HashMap<Integer,String>add = new HashMap<Integer,String>();

add.put(10,”tv”);

add.put(14,”som”);

add.put(10,”micro”);

//me retorne o cara com a chave 14

System.out.println(add.get(14));

System.out.println(add.size()); //me mostre o tamanho do meu conjunto

}}

…………………

Ex. 3

//Um exemplo mais “útil”: cadastrando produto

import java.util.Map;

import java.util.LinkedHashMap;

import java.util.Scanner;

class Loja{

static String info;

public static void main(String [] agrs){

 

Map<Integer,String> cad = new LinkedHashMap<Integer,String>();

 

Scanner dados = new Scanner(System.in);

int qtde=0;

int cadinfo=0;

int cont=0;

System.out.println(“quantos produtos deseja cadastrar “);

qtde = dados.nextInt();

while(cont<qtde){

System.out.print(“\n Digite o nome do Produto “);

info = dados.next();

cad.put(cadinfo, info);

cadinfo++;

cont++;

}

System.out.println(“total de produtos cadastrados “ + cad.size());

System.out.println(“imprimindo produtos cadastrado….”);

 

for(int a=0;a<cadinfo;a++){

System.out.println(cad.get(a));

}

 

System.out.println(“Codigos chaves dos produtos por ordem de insercao “);

System.out.println(cad.keySet());

System.out.println(“Remova um produto digite o codigo “);

int co = dados.nextInt();

cad.remove(co);

System.out.println(“total de produtos cadastrados “ + cad.size());

}}

<!–[if gte mso 9]> Normal 0 21 false false false PT-BR X-NONE X-NONE <![endif]–><!–[if gte mso 9]> <![endif]–> <!–[endif]–>

Bom pessoal! Vou ficando por aqui, espero que tenham gostado do post e até próxima serie REVISÃO SCJP! Não deixem de comentar: sugestões/criticas etc.

Conforme mencionei na semana passada, que estarei criando um pequeno summary de cada post para facilitar a vida da galera do fórum javaranch que também são leitores do blog.

Como não foi possível atender ao pedido de criar posts 100%  em inglês (porém a vontade é grande, quem sabe ano que vem quando estarei formado?!) devido minha falta tempo achei o summary uma forma de apresentar o post e daí cada leitor decide se  realizará a tradução conforme foi sugerido por um dos  leitores. Ao experts no inglês que identificar algum erro no summary favor mandar uma sugestão, pois não estou usando tradutor. Já que considero mais uma forma de  poder praticar o idioma.

Abraços!!

<!–[if gte mso 9]> Normal 0 21 false false false PT-BR X-NONE X-NONE <![endif]–><!–[if gte mso 9]> <![endif]–>

<!–[endif]–>

Comunicando Servlet & JSP

Salve! Salve! Pessoal! Quero agradecer aos comentarios e emails que venho recebendo!

Em especial recebi  5 emails de alguns usuarios do javaranch, onde solicitaram a tradução de algumas colunas do blog para o ingles. Porém pela minha falta de tempo, nao foi possivel atender ao pedido, mas  foi sugerido por um dos usuarios (javaranch) a criação de um pequeno resumo em ingles sobre a coluna, onde segundo esse usuario isso facilitaria no momento de decisão “se valeria apena ele realizar tradução ou nao da coluna, levando em conta o summary”.  

obs.: Não estou usando tradutor para criação dos resumos. Agradeceria aos “experts no idioma” caso encontre algum erro, favor me comunicar. 🙂

Em uma das minhas colunas explique o que é JSP e sua funcionalidade. E se você não sabe o que é um Servlet e como configurar o XML para chamá-lo veja nessa coluna.  

Hoje vou mostrar como  Servlet & JSP “conversam”.  Veja abaixo  os pequenos exemplos, porém bastante funcionais para entendimento.

Aproveitando o momento Há uma matéria minha no imasters semelhante a essa, porém usando a ferramenta netbeans 6 para desenvolvimento e percebam que com o auxilio de uma IDE o processo é mais simples.

 É importante lembrar que muito não vai adiantar se você não sabe nada sobre o código gerado pela IDE (ex.: se você não souber por que o método é doPost/doGet?!), isso afetará diretamente no momento da manutenção do software por exemplo.

 Summary

The objective this article is presents the communication between Servlet e JSP without assist one of the IDE. If you don’t know that is one Servlet or JSP see this article (in Portuguese). I will go to present too as a class .java can “talk” with one application JSP.

 

Pré-Requisito:

– Ambiente JEE instalado e configurado

– Saber o que é  Servlet & JSP.

 Minhas Colunas Java no Imasters:  

Instalando TomCat em 10min

Mais um pouco sobre threads em Java

Criando Servlet Netbeans 6

Criando uma aplicação Servlet & JSP – Netbeans 6

 Livro recomendado

Servlet & JSP

 Let’s GO… 

Exemplo 1: Criando uma pagina JSP que será acessada via Servlet 

Configurando o arquivo XML

Web.xml

[…]

<!– chamando um jsp via servlet –>

                <servlet>

                               <servlet-name>comjava</servlet-name>

                               <jsp-file>/serv.jsp</jsp-file>   

                </servlet>

               

                <servlet-mapping>

                               <servlet-name>comjava</servlet-name>

                               <url-pattern>/compra</url-pattern>

                </servlet-mapping>

<!– fim –>

[…]

Criando o arquivo .jsp

Nome do arquivo= serv.jsp

<html>

<body>

<% out.println(“Usando servlet”);

%>

</body>

</html>

Para o exemplo acima digite no browser: HTTP://localhost/sua_aplicacao/compra

Você receberá a mensagem: “Usando Servlet” e observe que na barra de endereço está o arquivo serv.jsp

Exemplo 2 : Criando um redirecionamento em Servlet.

lista.jsp

<html>

<body>

Sua Lista de compra:

<%  //usei o redirecionamento em um Servlet para chegar aqui

out.println(foo.Midia.getItem());

 %>

</body></html>

 Midia.java

package foo;

import java.util.*;

public class Midia{

               

                public static ArrayList getItem(){

                ArrayList<String> lista = new ArrayList<String>();

                                               lista.add(“Caneta”);

                                               lista.add(“CD”);

                                               lista.add(“Pen”);

                               return lista;

                }} 

web.xml

[…]

<!–chamando um Servlet e o Servlet  redireciona a pagina para o jsp –>

                <servlet>

                               <servlet-name>listacomp</servlet-name>

                               <servlet-class>servM</servlet-class>

                </servlet>

               

                <servlet-mapping>

                               <servlet-name>listacomp</servlet-name>

                               <url-pattern>/compras.do</url-pattern>

                </servlet-mapping>

[…]

 servM.java

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class servM extends HttpServlet{

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{

                response.setContentType(“text/html”);                           

response.sendRedirect(“/sua_aplicacao/lista.jsp”);                                              

}}

/* aqui acontece um redirecionamento quando o xml chamar essa class, onde ele vai executar a pagina lista.jsp*/ 

Conclusão

Bom, espero que tenham gostado do artigo, e percebam a comunicação entre Servlet, JSP e.java.

O seu arquivo .java  é uma classe Java normal semelhante aquela quando você começa estudar Java porém sem o método main. Vejo sempre iniciantes com essa dúvida como fazer que  “Hello World” apareça no browser.  Claro que o exposto aqui é um ponto de motivação para continuação dos estudos na plataforma JEE. Mas busquei nas três colunas (Servlet,  JSP e Hoje) apresentar um pouco de cada e sua utilidade. 

Você pode ouvir/ler que Servlet/JSP  não são mais  usados para desenvolvimento de sistema, mas acredito que isso varia de projeto para projeto. Realmente há projetos que solicitam tecnologias mais robustas e outros que tanto faz se a tecnologia é recente ou uma mais antiga (até hoje vejo software sendo desenvolvido em Clipper e vagas de emprego a procura de programadores).

Claro  que você (bom programador )deve dar preferência para aquela(s) tecnologia  que você tem o maior domínio técnico  e que  possibilite “boas práticas de programação” e  siga todas as recomendações da engenharia de software.

Um abraço a todos e até a próxima!

Estágio em T.I

Salve!Salve! Após o  recesso junino, estou de volta! E hoje vou falar um pouco sobre estágios em T.I. Alguns odeiam quando falam “estágio” outros  ja gostam e ver essa modalidade por outro ângulo. Procurei inserir nessa coluna minha experiência e discussoes que ja participei sobre o tema. Espero que gostem da coluna e que apos a leitura espero que cada um venha  saber se um estágio é importante ou nao para sua carreira profissional.
Achei essa materia importante sobre o google. E resolvi compartilhar! Percebam que o grande está cada dia mais vivo que nunca. E supresas nao vao faltar.

let’s go…

A questão é: vale apena fazer um estágio? Por que fazê-lo ou não?

São perguntas como essas  e  semelhantes que afligem muitos profissionais de T.I mesmo aqueles com experiência comprovada existe a possibilidade do mesmo fazer um estágio.

O primeiro ponto a abordar é: o estágio não é obrigatório, mas é recomendado por especialista e vários profissionais conceituados de T.I.  A minha opinião sobre estágio é que considero ele um momento de “glória” para qualquer profissional, é uma fase que você pode testar varias habilidades e descobrir aquela que você sente mais prazer em desenvolver para sua  futura carreira.

Vejo bastante nos fóruns, grupos que o estágio é visto por alguns profissionais de T.I como “trabalho escravo” mais não é levado em conta que esse aspecto é referente mais a empresa que o objetivo do estágio por lei. Tudo depende da forma que é aplicado, infelizmente boa parte das empresas (com exceções  que representa a minoria) usam o estágio como meio de diminuir custo e aumentar o lucro, já vi casos que de demiti um desenvolvedor de 4 anos e põe 1 ou 2 estagiários para o cargo sendo que em termos de custos realmente são menores para uma empresa e nesse caso “empurra” trabalho + trabalho para o estagiário se ele reclamar demiti o profissional e pronto. Já que é bem simples e fácil o  processo de demissão para a empresa onde não há custos ao contrário do processo de CLT ou PJ.

Agora também temos outro lado da moeda, onde muitos profissionais de T.I querem ficar “rico” com estágio ou quer ganhar pelo menos semelhante ou bem próximo que um gerente de projetos (dizem que o salário aqui é altíssimo hehe por isso citei). Porém não é assim que as coisas funcionam.

O estágio é o “ponta pé” inicial na carreira é ponta do iceberg e também uma das melhores fases de sua carreira (pode acreditar). O estágio vai acompanhar você mesmo quando for CLT já que o processo de avaliação em uma boa empresa é constante. Há empresas que a cada X meses testam seus profissionais avaliam o desempenho, identifica novas habilidades etc.

O estágio é um investimento, principalmente para aqueles sem experiência, não adianta investir muito (me refiro com excesso) em certificações, cursos, mas sem uma pequena experiência (free-lance, participar de projetos open-source etc). Quando não tem como comprovar a experiência você profissional de T.I fica com mais pedras no caminho, porém isso não que dizer que é impossível conseguir um trabalho, a questão é que pode levar mais tempo.

Case

Já fiz estágios quando iniciei a carreira e nas empresas que passei cada uma com uma política diferente referente a estágio, em uma, por exemplo, trabalhava apenas uma tarde e o salário era como previsto em lei e já em outra trabalhava das 08 as 22h (1h para almoço) e o salário como previsto em lei, porém a carga horária fora da lei e  mais um detalhe é uma empresa de grande porte com filial fora do Brasil. Então o “tamanho” da organização não define como será seu estágio e sim a política  adotada pela mesma. Trabalhei dessa forma porque era necessário investir, já que tinha o conhecimento técnico, porém não tinha como comprovar as horas e horas que ficava em casa estudando e fazendo “projetos caseiros” e ainda aproveitava que a empresa tinha boa participação no mercado e bastante respeitada então isso ia influenciar bastante em uma nova contratação futura. Trabalhei assim por 1 ano com o objetivo de em breve buscar uma empresa com uma melhor valorização profissional , então na época o mercado solicitava 6 meses no mínimo como experiência, então quis está um pouco acima do mínimo já que acima do exigido fica mais fácil o “poder” de negociação com o novo emprego.

Fatores que influenciam

Claro que outros fatores influenciaram, pois na época morava com meus pais então não tinha custo nem com a energia que consumia e isso é um ponto importante, pois ao sair de casa para novos “desafios” a coisa é diferente quando moramos com nossos pais. A moral da historia é que com 1 ano e três meses apareceu 3 empresas onde já tinha deixado o currículo, para um processo de contratação e daí conseguir ver o “poder”  de ter experiência + conhecimento e como isso influenciou diretamente no processo de negociação (pelo menos parei de ouvir do entrevistador dizendo: “há você não tem experiência, será uma grande oportunidade para você aqui na empresa adquirir sua primeira experiência” ouvia isso constante quando não tinha experiência)

 No estágio

Um estágio é possível desenvolver varias habilidades, uma delas é de responsabilidade, agilidade, aprendizado em áreas afins, ou seja, é o mundo de conhecimento que cabe a cada profissional saber como abraçar essa oportunidade.  Outro ponto importante é que você acaba descobrindo algumas habilidades que normalmente não encontraria lendo livros, artigos ou fazendo um curso, certificações ou pelo seu “EGO”. Daí você chega a conclusão de qual área de T.I deseja seguir, nos corredores das universidades sempre rola aquele velho papo: “que área você  quer seguir quando terminar o curso?”  O estágio ele ajuda a tomar essa decisão.  Eu mesmo já passei por essas áreas: redes, manutenção computadores, monitor de informática, suporte técnico, design gráfico, web design.

Não pense que estágio são flores, eu mesmo não encontrei nenhuma no meu caminho, somente espinhos, porém espinhos diferentes. O que compensa é no olhar para trás e ver o quanto foi importante ter passado por aquilo e quanto contribuiu para sua evolução pessoal e profissional, o aumento $$(se acontecer) é uma conseqüência  apenas.

Não quero dizer que o estágio é a melhor opção e deve adotá-lo por toda sua vida,  mas sua participação considero importante na carreira profissional.

Má prática

Muitas empresas aproveitam e fazem do estágio um trauma para os profissionais, mas isso sempre vai existir já que é uma questão de cultura organizacional. Agora há empresas com vagas para estágio com o objetivo de descobrir talentos (outro nome para o estágio) já que não há profissional qualificado como elas querem sobrando. Quando uma empresa busca do estágio formar bons profissionais, normalmente não há o processo de “exploração” aqui ela procura seguir as normas estabelecidas por lei, há casos que o estagiário que vim até fora do horário dele para trabalhar mesmo sem remuneração, mas a empresa não permite.

Oportunidades/Investimentos

Do mesmo modo que você paga R$ 2.000,00 para fazer um bom curso (Java, por exemplo) isso é equivalente a investir em um estágio. E com o estágio você adquire conhecimento + experiência + rede de contatos e no curso você adquire apenas o conhecimento (as vezes faz contato profissionais). Vale salientar que sem o conhecimento é difícil até de conseguir um estágio, mais quero alertar aqueles que acham que porque fizeram vários cursos + cursos que isso vai definir na hora de contratação emprego, nesse caso você pode passar por todas as etapas do RH mais quando chegar o momento do gerente do projeto, analisar os finalistas pode ter certeza que de cara ele vai analisando experiência (mesmo que você tenha 6 meses ele irá analisar)+ conhecimento(nessa ordem).

Tempo /Experiência

Nunca ache que tempo é tudo, há projeto com 6 meses que os profissionais envolvidos não adquiriu nem 1/3 de experiência que outro  colega que está em um projeto de 3 meses. Um projeto de 6 meses pode estar  com setores parado, atrasado, enrolado com questões comerciais e por ai vai. Agora o de 3 meses está a todo vapor com X horas de desenvolvimento na semana,  e dentro do prazo. A importância aqui é quando você for concorrer a uma vaga mesmo saindo de um estágio para outro, é fundamental dizer quanto tempo levou naquele projeto e as principais atividades que exerceu. Pode ter certeza que alguém no processo de seleção vai analisar isso, e quem sabe seja o processo definitivo.

Minha sugestão

Se você quer adquirir conhecimento mais sólidos faça estágios (participar de um projeto open source é outra modalidade de estágio), porém não vá com a idéia de querer ficar milionário com o estágio veja que você está investindo como você investe para certificação (voucher + tempo de estudo). Também é importante procurar estágio que ofereça uma remuneração dentro do mercado nacional/local.

Acredito que o processo de estágio fica mais difícil para os que possuem família (s) já que há pessoas que dependem de no mínimo uma renda X e precisa de uma melhor garantia de emprego e isso o estágio não oferece, já que hoje você está e amanhã não pode estar mais, no CLT não é diferente, porém aqui há o seguro desemprego, FGTS etc.

Outra dica quem estar estagiando seja um sugador de informações queira saber de “tudo” um pouco e sempre perguntando o por quê?.

Um abraço a todos e espero tenha gostado dos dois lados da moeda do estágio, claro que as explanações aqui são limitadas, porém busquei abordar os pontos chaves. E gostaria de finalizar a coluna com a mensagem abaixo e acho importante cada leitor faça uma reflexão busque acrescentá-la em sua carreira.

“Não existe sorte. A sorte é o encontro do preparo com a oportunidade. Portanto, se quiser ter sorte na vida, esteja preparado para as oportunidades.”
Dr. Lair Ribeiro

Entendendo JSP

Para quem estar iniciando no mundo JEE, sempre tema uma duvida o que é um JSP? E qual sua real utilidade? Neste post tentarei explicar esse “bicho” JSP.

Lembrando que há muitos detalhes técnicos sobre JSP que não vou abordar nesse post, já que o objetivo aqui é dar uma introdução generalizada sobre JSP.

Let’s GO..

Pré-Requisito para rodar páginas JSP

– Instalação e configuração

JavaServer Pages (JSP) são páginas Java embebidas( cheio do corote) em HTML. Uma página dinâmica é gerada pelo código JSP.

Em outras palavras JSP é uma página bem parecida com uma página HTML, com a diferença de que podemos inserir Java dentro da página.

Estrutura JSP:

<% %> tag para adicionar o comando Java desejado, conhecido como scriptlet

<%– –%> comentário

<%! %> declaração de atributos ou métodos

<%= %> expressão de resultado

Diretivas

São usadas para fornecer informações especiais ditas ao Container sobre a página JSP.

Diretiva page: permite a importação de classes <%@ page %>

Pontos chaves sobre JSP:

– você vai usar quando não quer colocar seu código Servlet com HTML (PrintWriter)

– e quando quer escrever código Java em jsp

– em uma expressão (<%= %>), você não pode usar o método com o tipo de retorno void como uma expressão. O Container vai descobrir que não há nada para exibir pra esse método e o que verá será apenas erro.

Exemplo 1 : ola.jsp

<html>

<body>

<% out.println(“olá Mundo!”);

%>

</body>

</html>

É o mesmo: Ola.java

public class Ola{

public static void main(String args[]){

System.out.println(“ola Mundo”);

}}

Exemplo 2: com importação de classes Java:

<html>

<body>

<%– importando a class java –%>

<%@ page import=”java.util.Date,java.text.DateFormat”%>

<%– declarando um metodo –%>

<%! String exibir(){

Date d = new Date();

DateFormat df = DateFormat.getDateInstance(1);

String resultado = df.format(d);

return resultado;

}

%>

<%– Exibindo o resultado –%>

<%= “Seja bem vindo: ” + exibir() %>

</body>

</html>

Exemplo 3: Criando um contador de acesso.

<html>

<body>

<%! int cont=0;

//declarei como static

%>

Essa página ja foi acessada

<%=

//usando expressores para imprimir

++cont %>

</body>

</html>

Distribuindo JSP:

– para distribuir e testar seu JSP é simples coloque no caminho /webapps/sua_aplicacao

abra o browser e digite HTTP://localhost/sua_aplicacao/nomedoarquivo.jsp

Há desvantagem em usar Java em JSP?

Bom se você for daqueles programadores que quer colocar todo Java em JSP terá problemas no futuro.

Imagine que você tenha uma monte de arquivos JSP abarrotado de código Java enfiadas em cada pedaço da página acomodadas entre scriplets, expressões. Daí como o seguinte: você tem que saber ler e entender estes elementos e como manter páginas escritas com eles, caso contrario o seu sistema chega naquela situação: “não consigo mais mexer”.

Não estou dizendo que não é para usar JSP, pelo contrario, “use mais com moderação”. Até por que a finalidade do JSP é executar códigos Java, mais isso não quer dizer que você programador deve fazer seu .jsp toda lógica do negócio, ou que venha fazer tudo que seu Servlet faz. Isso é colocar o “pé na cova”.

Posso comunicar meu JSP com meu Servlet ?

Sim, e deve. Normalmente é assim que acontece o Servlet recebe a solicitação, entregará a solicitação para o JSP.

Aguardem… Assunto do próximo do post.

Conclusão

Sempre que você quiser exibir aquele seu programa (Hello World) que fez quando iniciava com Java, porém agora quer exibi-lo no browser, use JSP & Servlet 🙂

Lembrando que JSP não é para colocar toda sua aplicação Java. Você pode usar para exibir no browser aquele ArrayList que está na class Lista.java mais você não que colocar a lógica do .java dentro do seu JSP, então essa é uma alternativa. Lembre-se que páginas JSP não precisam ser compiladas.

Incentivo

Para aprendizado, pegue seus arquivos .java (incluindo o “Hello World!”) e execute ele via JSP, depois via Servlet + JSP.

“não há aprendizado sem prática, sem ver exceções, erros de: compilação, declarações etc. Isso faz parte de qualquer nível de aprendizado se quiser ser um bom programador veja cada, erro, exceção como a velha coke”.

Um abraço a todos e até o próximo post!