Mentorização AI IBM Case

olá Pessoal,

Desta vez o nosso entrevistado é  o Mario Razec. Para quem não conhece  o Mário é um grande exemplo de aluno e que tem um futuro brilhante. O mesmo tem participado do programa Mentoring Program IBM e resolvi entrevista-lo para que o nosso amigo Razec possa compartilhar um pouco da experiência obtida no programa, além de que forma este impactou na vida acadêmica. Já que durante a mentorização o Mario estava ainda como graduando em Ciência da Computação.

Lets go…


Mini-curriculo

Mario C. Ponciano a.k.a Razec, Bacharel em Ciência da Computação pela Anhanguera Educacional/Leme graduado em dezembro 2009. Onde foi estudante mentorizado IBM o qual pesquisou sobre a Interoperabilidade de Web Services em Sistemas Distribuídos e foi construído um projeto open-source com objetivo de compartilhar pequenos recursos assim como o reuso do código.

Entusiasta open-source, possui um grande interesse de se tornar Arquiteto de Sistemas e Pesquisador de Novas Tecnologias. Contribuí em projetos open-source, assim como Eclipse Platform além de escrever tutoriais e participar da comunidade de software livre.

1.blog: como conheceu o Programa ? E por que se interessou ?

Mário: Através de uma palestra com José Damico, do programa IBM Academic Initiative realizada na Anhanguera Educacional/Leme, onde falou sobre novas tecnologias, hacking, AI, open-source, java, etc.

O interesse surgiu após mencionar alguns assuntos relacionados com minhas metas, então quando mostrou que poderia colaborar com o open-source através de ferramentas IBM, além de construir algo que a comunidade poderia utilizar e agregar conhecimento para meu futuro.

2.blog: Além de você quantos outros colegas de sua instituição estão sendo mentorizado pelo programa?

Mário: Na Anhanguera Educacional/Leme apenas eu. Mas após alguns universitários terem visto o post no blog do IBM Academic Initiative começaram à procurar para tirar dúvidas e para participar do projeto, provando assim que o projeto realmente existe possibilitando que todos tirem proveito.

3.blog: Fale um pouco como o programa de Mentorização influenciou e tem influenciado na sua vida acadêmica.

Mário: Influenciou à estudar e buscar pela resposta como um verdadeiro cientista da computação, permitindo ajudar outros com as descobertas realizadas. Aprendi a trabalhar com ferramentas que apenas ouvia-se falar como: RAD, DB2, WebSphere, SOA.

4.blog: Quais os primeiros pontos no inicio que você considerou como um “obstáculo” ?

Mário: Acredito que o grande obstáculo são as pessoas ao redor dizendo que tudo é difícil e as respostas a algumas questões exigem pesquisa profunda. Porém acredito que todos os obstáculos podem ser vencidos com a persistência.

5.blog: Comente um pouco o trabalho do mentor.

Mário: Como tecnologia tem a tendência de evoluir muito rápido e ao mesmo tempo o mentor, como o próprio nome diz é a pessoa que guia o aprendiz de maneira que não perca seu tempo em busca de algo que não o ajudaria, tem por objetivo em colocar o estudante no caminho certo tirando suas dúvidas e sempre melhorando com idéias objetivas, é feito isto através de pequenas reuniões, e-mail e algumas madrugadas no skype. =)

6.blog: além da experiência técnica, qual outro tipo de experiência você conseguiu obter desde que entrou no programa?

Mário: O programa incentivou a aprender o inglês e tenho me dedicado muito a isto, pois toda documentação é em inglês e isto tem contribuído para uma evolução substancial. Obtive também muitos amigos, além de aumentar meu networking e colaborar em projetos open-source.

7.blog: Fale sobre o seu projeto

Mário: O projeto consiste na idéia de facilitar a vida do desenvolvedor, todos que desenvolvem sabem como é cansativo toda vez escrever o mesmo trecho de código ou então relembrar como fazer determinada sintaxe. Isto acontece pela razão de existir muitas linguagens de programação com uma sintaxe pré-definida.

Com esta idéia em mente o projeto permite poupar tempo armazenando pequenos trechos de códigos repetitivos, conhecidos como snippets.

Exemplo:

Um usuário aprendeu a utilizar um For-Each-Loop em Java, então cria-se um snippet.

for (tipo var : coleção) {corpo-do-loop}

Este pequeno trecho criado pelo o usuário pode ser enviado e armazenado no skypilot-sharing, o trecho armazenado passa a ficar disponível para o desenvolvedor e quando precisar reutilizar o código basta procurar pelo mesmo, através do plugin criado para o Eclipse e adicionar o trecho do código ao projeto, sem a necessidade de reescrever novamente o trecho do código, ou relembrar a sintaxe.

Maiores informações sobre Projeto: Skypilot-Sharing (US) ou Skypilot-Sharing (BR)

8.blog: Mario, que mensagem você poderia deixar para os alunos que ainda não se “despertaram” para o programa?

Mário: Aproveite a oportunidade e corra atrás de suas metas tendo em mente as palavras de Napoleon Hill: “Action is the real measure of intelligence.”

9.blog: Gostaria de Agradecer a Alguém?

Mário: Sim. Afinal tudo isto consegui concluir graças aos IBMers Argemiro Lima perdendo algumas horas de sua madrugada no skype, Juliano Martins, José Damico e obrigado Camilo Lopes pela oportunidade de explicar um pouco mais sobre o IBM Academic Initiative.

Mario, eu que tenho agradecer a você por ter disponibilizado um pouco do seu tempo e compartilhado essa valiosa experiência e ficando ai como um exemplo para os demais alunos, que vivem reclamando da vida. A persistência e o acreditar são pontos chaves em nossa vida.

abracos,  see you next post.


Follow me: http://twitter.com/camilolope

Como ser um Programador Senior Java

Olá Pessoal,

Ano passado eu falei como ser um programador júnior & pleno. Discutimos qual o perfil técnico que no minimo o programador deve “ter” e o que esperado por algumas companhias. Claro que nenhuma informação contida no post era algo cientificamente comprovado(nesse também não). Apenas um achismo do autor tendo como base a experiência, analise do mercado, bate papo com alguem do RH e um pouco de achismo. Hoje vou falar sobre ser Pleno.

  • O que é ser um programador pleno?

  • Como se tornar um?

  • O que preciso saber tecnicamente para ter um perfil de Programador Java Pleno?

Lets go…

Outros posts:

Antes de começar, quero dizer que um profissional de IT não vive apenas dos conhecimentos técnicos nos dias de hoje. Há outras qualidades que são avaliadas e tem o mesmo peso ou até mais que o número de frameworks, certificações e tempo de experiência. Um exemplo que posso citar é trabalho em equipe, relacionamento, comunicação, equilíbrio etc. Do que adianta ser “bom” tecnicamente, mas você não sabe se comunicar bem, não tem proatividade, se acha o dono do mundo e não consegue de forma nenhuma trabalhar em equipe?!! Você pode ter a experiência que for em uma determinada tecnologia, mas os pontos que acabei de citar, eles são classificatório/eliminatório em um processo seletivo. O que um dia as empresas já fizeram “vista grossa” e queria apenas aquele “cara de informática” para “mexer com o computador”. Esse perfil não existe mais nas melhores empresas para se trabalhar.

Mas, a pergunta de muitos: “Camilo, o que eu preciso aprender, para se tornar um programador sênior, quantos frameworks, quanto tempo isso leva? Etc”.

  • Primeiro: Não existe o tempo definido e sim sua experiência adquirida nos projetos que tem participado e tecnologias que tem usado, não existe receita dizendo que somente se vc usou tecnologia X por Y tempo que vc pode se tornar um programador sênior. A sua capacidade de resolver problemas usando a tecnologia correta, atendendo os requisitos do cliente e não perdendo o foco do negócio vai contribuindo para sua formação. Então tire isso da mente que você vai se tornar sênior somente daqui à 5-10 anos. por alguem ti falou Não está escrito em lugar nenhum isso, porém a média geral que bem comum de  ver no mercado, é que boa parte dos seniors não tem menos de 5 anos de experiência, mas por que isso? Bem, lembre-se que vc passa um bom tempo como júnior, depois vai para pleno e cai em sênior Mas, tb não há nada que diga que vc tem que seguir essa ordem. Já tive colegas que entrou como júnior e ficou por 1 ano e depois já caiu para sênior, isso vai do skill técnico do profissional + projeto + habilidades não técnicas que citei no inicio do post.

Agora outro ponto importante, é o projeto que você está participando ele é um fator bem decisivo e que acelera o processo, se tem um projeto bem ativo, dinâmico, que esteja aberto ao uso de novas tecnologias isso vai contribuir diretamente para sua formação e não tem salário que pague por isso.

Vejamos a parte técnica de aprendizado que se espera de um sênior Java:

  1. Parece que isso nem deveria aparecer aqui, mas é bom repetir. Experiência em Java, O.O, Design Patterns são fundamentais para um bom sênior Java;

  2. Ter o conteúdo da SCJA, SCJP, SCWCD, SCDJWS de forma suave na mente e na prática. Não estou dizendo que deve ser certificado, mas dominar todo aquele conteúdo como tomar café-da-manhã todos os dias;

  3. Dominar XML de forma fluente.

  4. Ser capaz de eliminar POGs e bugs de um sistema em questão de segundos ou de minutos, sem cometer erros. Essa habilidade é importante lembre-se tempo é $$.

  5. Ser capaz de otimizar código de tal forma que o entendimento seja como somar 2 +2. Quer uma prova disso: Veja o livro refactoring de Martin Fowler o cara refatora de uma forma que tem que ser elogiada. Então usar de forma bem XP, Refactoring etc. Não pode ser uma novidade para um sênior

  6. Conseguir transformar qualquer tipo de requisito mal-definido e contraditório em algo funcional, eficiente, sem bugs e nada de gambiarras;

  7. Tratar SQL, JDBC, Java, JSP, HTML, Servlet, JavaScript, Reflection, Annotations, XML, EJB, SOA, Threads e concorrência como coisas tao trivialmente simples como respirar. Tendo total, completo e absoluto domínio sobre isso

  8. Dominar os frameworks mais usados mercado, exemplo no momento que escrevo o posts: Struts 2, Spring, JSF, Hibernate etc. De 10 vagas para Java 10 pedem pelo menos conhecimento em 1 desses frameworks. Seja para júnior,pleno ou sênior

  9. E por ultimo não parar de estudar, continuar de olho no mercado devorando novas tendências.

  10. Preciso dizer que é bom saber inglês? E de preferência dominar o idioma de verdade e nao somente o “inglês técnico”.

Bem pessoal, vou ficando por aqui e espero que tenham gostado, o objetivo maior aqui é mostrar e ajudar aqueles que estão perdido “o que estudar Java?! ”, acredito com os pontos citados dar para ter um ideia e traçar o mapeamento o que estudar. Claro que as informações aqui não passa  apenas da minha opinião,  e não acordei hoje e resolvi escrever sobre o assunto e pronto. Pesquisei, conversei com colegas mais experientes, aproveitei profissionais de alto de nível em seleção de profissionais IT, para sugar um pouco as necessidades deles etc. E isso já vem sendo feito a um certo tempo. Não deixem de suas opiniões.

Abraços, see you next post.


Follow me: http://twitter.com/camilolope

Undeploy e Deploy Tomcat Eclipse

Olá Pessoal,

Neste post veremos um video cedido pelo autor Edson Gonçalves mostrando como fazer um undeploy/deploy no TomCat dentro da IDE Eclipse, vejam é que bem simples e fácil. Confiram abaixo o video.

Se nao conseguir visualizar o video clique aqui.

Simples não?! abracos e até o próximo post!

Problema Tomcat 8080 no Eclipse – Solução

Ae! Pessoal, hoje o post é mais uma dica de como resolver um pequeno impasse que dar as vezes quando estamos usando o TomCat Server dentro do Eclipse.

Lets go…

Quem usa com bastante frequência TomCat dentro do Eclipse é comum receber o erro abaixo, e ter que reiniciar a maquina para tudo voltar o normal.

Se vc for tentar matar o processo, não vai encontrar nada relacionado ao tomcat. E vc tenta parar o server clicando no botão “stop” no Eclipse e acha que tudo deu certo, porém ao tentar executar um nova aplicação  vc é informado que o servidor está executando na porta 8080, sendo que vc está certo que não há nada rodando nessa porta, pois você já deu um Stop no TomCat. Então o que fazer?

  1. A pior solução eh reiniciar o computador.

  2. E a melhor é matar um processo com o nome de javaw.exe. Conforme a imagem abaixo: (poderiamos achar que seria algo como “tomcat”, mas não é).

Quero chamar atenção que há outros processos com o nome java, mas o que roda o tomcat é um tal de javaw que não consome quase nada de memoria a media é 20-45 K. “Mate” este processo e teste novamente sua aplicação no Eclipse. Concerteza, a felicidade vai estar estampada em seu rosto de ver aplicação rodando sem precisar reiniciar o computador.

Resumindo o nome do processo não tinha nada ver com o que poderiamos esperar. Na primeira vez que fui tentar fazer isso, esperava encontrar um processo com um nome “tomcat” ou algo próximo, mas nunca passou pela minha cabeça que seria  um “javaw”. Independente do nome, nao precisamos mais reiniciar o computador quando quando estivermos em uma situação como descrita acima.

Valeu pessoal, espero que a dica possa ajudar quem está passando por isso. Abraços e até o próximo post.

Java Básico + Hibernate JPA + Mysql


olá Pessoal,
Recebi alguns emails pedindo para criar um post mais puro com Hibernate + JPA, ou seja, sem o uso de JSF. Atendendo aos pedidos, montei um post bem simples, onde vamos criar a nossa velha classe Java com o método main e armazenar as informações em um BD (MySql) tendo o Hibernate como framework de persitencia. Entao se você deseja dar os primeiros passos usando os frameworks: Hibernate + JPA para persistencia de dados nao deixe de ler o post a seguir.
Lets go..
Outros posts.
– JSF + Hibernate + MySql no Eclipse
– Hibernate Annotations + JSF + MySql
– Busca com Hibernate Annotation + JSF
Atenção: Não apresentarei como criar um DB ou configurar o Hibernate no Eclipse. Qualquer dúvida consulte um dos posts acima. Vou considerar que você já tem um ambiente de desenvolvimento pronto para entrar em ação.
Dados do DataBase:

  • Crie um DataBase (usarei uma chamada livraria)
  • crie uma tabela (usarei uma tabela com o nome camilo )
  • Dados da tabela: id(auto_increment), nome(varchar), cidade(varchar)
  • Preparação do projeto
    1.Crie um o Java Project no Eclipse com o nome que achar conveniente.
    2.Agora crie uma estrutura de packages conforme a imagem a seguir

    3.Adicione os arquivos .jars do mysql, hibernate + JPA ao projeto. Clique com o botão direito no projeto escolha Properties e depois clique em JavaBuild. Na tela que aparece clique em Add external jars. (Caso nao tenha uma Library para os .jars )

    Desenvolvimento/Teste
    1.Agora crie uma classe Java com nome de Pessoa no package br.com.bean.

    package br.com.bean;
    /*se os arquivos .jars nao estiver no projeto
     * nao será possivel encontrar os imports
     */
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    @Entity
    @Table(name="camilo")
    public class Pessoa {
    	
    	private String nome; 
    	private String cidade; 
    	@Id
    	int id;
    	public String getNome() {
    		return nome;
    	}
    	public void setNome(String nome) {
    		this.nome = nome;
    	}
    	public String getCidade() {
    		return cidade;
    	}
    	public void setCidade(String cidade) {
    		this.cidade = cidade;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	
    }

    2.Crie uma classe ConexaoHibert.java no package br.com.conexao

    private static final SessionFactory sessionFactory;
    	private static final ThreadLocal threadLocal = 
    		new ThreadLocal();
    	/* observe o que temos de importante 
    	 * nesse bloco static, o arquivo
    	 * que possui os dados de conexao com 
    	 * o banco de dados hibernateconfig.xml 
    	 */
    	static{
    		try{
    			sessionFactory = new  AnnotationConfiguration().
    			configure("hibernateconfig.xml")
    			.buildSessionFactory();
    		
    		}catch (Throwable e) {
    			throw new ExceptionInInitializerError(e);
    		}
    	}
    	//retorna uma sessao de comunicacao com o BD
    	public static Session getInstance(){
    		Session session = (Session) threadLocal.get();
    		session = sessionFactory.openSession();
    		threadLocal.set(session);
    		return session;
    	} 

    3.Crie uma class PessoaDAO no package br.com.hibernatedao

    package br.com.hibernatedao;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import br.com.bean.Pessoa;
    import br.com.conexao.ConexaoHibert;
    
    public class PessoaDAO {
    	private Session session;
    	
    	public void Salvar(Pessoa p){
    		//obtem uma sessao
    		session = ConexaoHibert.getInstance();
    		Transaction tx = null; //permite transacao com o BD 
    		
    		try{
    			tx = session.beginTransaction();
    			session.save(p);
    			tx.commit();//faz a transacao
    		}catch (Exception e) {
    			e.printStackTrace();
    			//cancela a transcao em caso de falha
    			tx.rollback();
    		}finally{
    			session.close();
    		}}}
    

    4.Agora crie uma arquivo .xml em source conforme o code abaixo:

    
    
    
     
      org.gjt.mm.mysql.Driver
    
      jdbc:mysql://localhost/livraria
    
      camilo
      integrator
      
     
    
    

    Fique atento aos nomes usado na class Pessoa.java para fazer anotação. Veja que eu tenho o nome da tabela no BD diferente do nome da minha class Java (fiz de proposito). Então somos obrigado a definir o name da tabela, caso contrario a JPA vai considerar o nome da classe.
    5.Agora crie uma classe no package br.com.teste com o nome de PessoaTest.java.

    package br.com.teste;
    
    import br.com.bean.Pessoa;
    import br.com.hibernatedao.PessoaDAO;
    
    public class PessoaTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Pessoa p = new Pessoa(); 
    		p.setNome("mel"); 
    		p.setCidade("Salvador");
    		PessoaDAO pdao = new PessoaDAO(); 
    			pdao.Salvar(p);	}}
    

    6.Salve e execute a classe PessoaTest.java e verifique se os dados foram inseridos no BD.

    Pronto!Bem simples não? E menos cansativo que usar o velho padrão DAO. Espero que tenham gostado do post. Abracos e até o proximo post…


    Follow me: http://twitter.com/camilolope