Especialista X Generalista

março 20, 2009

Há um tempo atrás, voltando do almoço, estava conversando com o Anderson sobre o que vale mais a pena ser hoje em dia, Especialista ou Generalista. Esse post é um dos mais antigos rascunho que eu tenho, mas como o assunto surgiu num tópico do GUJ, resolvi adiantar o assunto.

Há o mundo ideal que acredito que seja unanimidade, que é voce saber tudo de tudo… tudo de redes, tudo de sistema operacionais, tudo de hardware, tudo de JSF, de JPA, tudo do seu negócio… e assim vai… mas hoje com a quantidade de novas tecnologias surgindo é impossível acompanhar. Quando vou numa livraria e fico olhando a quantidade de assuntos que existem e as vezes eu nem imaginava, eu cada dia tenho mais certeza que quanto mais estudo mais coisa tenho a aprender.

Voltando ao assunto, o que basicamente é um especialista e um generalista, na minha visão

Especialista: Um profissional extremamente técnico, conhecendo o detalhe, e com grande conhecimento numa plataforma ou framework especifico, como jsf, jpa, ejb3 ou jms. Geralmente a hora desse profissional é bem mais cara, e ele é chamado para “apagar incendios”, quando existe um problema que ninguem sabe resolver. Já almocei com um arquiteto da BEA uma vez que foram em uma empresa que trabalhava, e me disse que hoje tava em SP, amanha no RJ e semana que vem no Ceará, sempre para resolver grandes problemas e sobre grande pressão.

Generalista: Um profissional técnico, sabe usar razoavelmente bem o que está no seu projeto, as vezes esquece um ou outro detalhe de um framework por exemplo, já que usou relativamente poucas vezes, e, o mais importante de tudo, conhece muito bem o seu negócio, já que tendem a pegar um projeto do início ao fim.

A escolhe entre as duas opções depende muito do tipo de carreira que queira seguir.

Sendo generalista, voce tende a ficar em empresas um tempo maior, entendendo seu negócio, suas aplicações, e seu valor para aquela empresa é maior, e consequentemente para o mercado seu valor é menor, por exemplo, voce trabalha numa empresa com sistemas de telecomunicações e depois ir trabalhar numa empresa de seguros, o que voce aproveitaria do seu conhecimento de negócio?

Sendo um especialista, voce tende a estar cada hora em uma empresa diferente, trabalhando geralmente sobre maior pressão, adquirindo maior experiencia (que na minha opinião se ganha vivendo várias realidades diferentes, e não sempre a mesma realidade), trabalhando um periodo menor w ganhando um salário maior, mas para a empresa que voce presta serviço, voce não agrega valor para o negócio dela, já que está ali para resolver um problema técnico, mas para o mercado seu valor é maior, porque tecnologia é igual no mundo todo.

Agora, a decisão de qual caminho seguir, é sua!
Boa Sorte!

Montando um ambiente de desenvolvimento – Parte 2

março 3, 2009

Uma vez instalado um software de controle de versão, no nosso caso o SVN, e de extrema importancia um software de integração continua. No mercado há alguns servidores de integração continua, o CruiseControl e o Continuum são um exemplo desse tipo de software, e esse último será nosso foco nesse post.

A vantagem imediata que tivemos na utilização de um software de integração onde trabalho foi através dos seus builds automatizados(configuramos 2 vezes ao dia) pegamos no início constantes erros de compilação e falha nos testes. Nunca se deve commitar nada pro SVN que esteja com problema, porque sempre que precisarmos pegar qualquer versao do repositório, ela tem que compilar e ser testada sem falhas. Outra vantagem desse tipo de software num ambiente cooporativo quando há aplicações dependentes, nos testes é capaz de detectar erros deste tipo, tendo um servidor de repositório de jar (Archivaa por exemplo, que falaremos num próximo post)

A instalação é simples de ser feita, eu optei pela versão standalone por ser simples instalação, lembrando sempre que focamos sempre praticidade! Voce pode encontrar o continuum para download em http://continuum.apache.org/download.html, baixe a versão standalone. Após download descompacte o continuum, e para testar, basta executar dentro do diretório bin:

fernando@fenote:/usr/local/java/apache-continuum-1.2.3/bin$ ./continuum start
Starting Apache Continuum...

Agora temos o continuum no ar sobre um servidor Jetty na porta 8080. Acho interessante mudar a porta do Jetty e configurar o email do continuum para notificações de builds, ambos no arquivo $CONTINUUM_HOME/conf/jetty.xml. E claro colocar o continuum para inicializar junto com o seu Sistema Operacional, no caso do Ubuntu, usamos o seguinte comando


fernando@fenote:/usr/local/java/apache-continuum-1.2.3/bin$ sudo ln -s continuum /etc/init.d/
fernando@fenote:/usr/local/java/apache-continuum-1.2.3/bin$ sudo update-rc.d -n continuum defaults 99

Agora basta acessar http://localhost:8080/continuum/, cadastrar seu projeto e programar seus builds!

Boa Sorte!

Referencia: http://continuum.apache.org

Montando um ambiente de desenvolvimento – Parte 1

fevereiro 18, 2009

Montar um ambiente de desenvolvimento é sempre algo bem trabalhoso, e, não é algo que fazemos no nosso dia a dia. Um bom servidor de desenvolvimento é aquele que não lembramos que existe, não nos damos conta de que está ali. Se um dia sentirmos sua falta significa, com certeza, que algum problema apareceu. Nessa sequencia de “posts” pretendo mostrar como montar um servidor de desenvolvimento usando Subversion(SVN), Continuum, Archiva e o Trac da forma mais simples pra você entender e de manutenção o mais fácil possível. O nosso foco é desenvolvimento e não montar servidor.

Essa primeira parte é como montar um Subversion (SVN) e acessá-lo via http com Apache. Mas por que SVN? O SVN é um sistema de controle de versão, assim como o CVS, com a vantagem de ocupar menos espaço em disco e ter a opção de renomear arquivo sem perder o versionamento. Você consegue também versionar diretórios. Outra opção ao SVN é o GIT que está conquistando cada vez mais seu espaço. Mas por que Apache? Ele é um Servidor http leve, de fácil configuração e muito difundido em todo o mundo. Pelo fato da nossa preferencia por servidores linux, essa instalação foi feita sobre um linux Ubuntu 8.10 64bits. Dessa forma a idéia é:

Instalar o apache que será nosso servidor http
fernando@fenote:~$ sudo apt-get install apache2

Instalar o SVN propriamente dito
fernando@fenote:~$ sudo apt-get install subversion

Uma vez o SVN instalado precisamos criar um diretório para que fique o seu repositório
fernando@fenote:~$ sudo mkdir /var/lib/svn

Criar um repositório:
fernando@fenote:~$ sudo svnadmin create /var/lib/svn/

Repare que ele cria um conjunto de diretórios e arquivos de controle internos e um banco de dados(Berkley DB) para armazenamento (diferente do CVS que armazena no sistema de arquivos).
O Apache tem um módulo de integração com o SVN que é necessário para configurar o contexto e a autenticação
fernando@fenote:~$ sudo apt-get install libapache2-svn

Ao instalar o módulo, ele irá criar um arquivo de configuração chamado dav_svn.conf. Este arquivo é onde está toda a parte chata da configuração do SVN.
fernando@fenote:~$ sudo vi /etc/apache2/mods-available/dav_svn.conf

Dentro do arquivo há varios tipos de configurações e autenticações, até mesmo via LDAP. Mas aqui faremos via um arquivo de senha porque é muito mais fácil de se restaurar ou mover o SVN para outro servidor restaurando um backup. Focaremos praticidade! Colocando as informações abaixo no arquivo dav_svn.conf e alterando onde você entender necessários os diretórios dentro do seu sistema de arquivos

# O /svn eh o contexto do apache
<Location /svn>

# Habilita o SVN
DAV svn

# Caminho do seu repositorio
SVNPath /var/lib/svn

# Tipo de Autenticacao
AuthType Basic

# Nome que vai aparecer ao pedir usuario/senha
AuthName "Fernando Franceschi Repositorio"

# Arquivo onde fica usuario/senha
AuthUserFile /var/lib/svn/conf/fernando.passwd

# Diz que so usuarios validos tem acesso a ler e gravar
Require valid-user
</Location>

Criando um usuário no arquivo fernando.passwd que será usado na nossa autenticação
fernando@fenote:~$ sudo htpasswd -c /var/lib/svn/conf/fernando.passwd fernando

Lembre-se que o parâmetro -c sempre cria um novo arquivo. Então só use na primeira vez que for executado. Agora, após configurar tudo falta apenas dar permissão de gravação para o usuário www-data que é o usuário do apache, pois a gravação é feita através dele.
fernando@fenote:~$ sudo chown www-data:www-data -R /var/lib/svn/

Agora só reiniciar o apache
fernando@fenote:~$ sudo /etc/init.d/apache2 restart

Para teste local, acesse http://localhost/svn

Dentro do Eclipse recomendo o plugin Subclipse que funciona muito bem. Para backup use
fernando@fenote:~$ sudo svnadmin hotcopy /var/lib/svn /backup

Recomendo utilizar o cron para efetuar esse backup durante a madrugada, e fazer um tar.bz2 para melhor compressão do backup. Para restaurar basta configurar o arquivo dav_svn.conf apontando para o lugar restaurado, e

Boa Sorte 🙂 !

Referencia: http://svnbook.red-bean.com
Download apache: http://httpd.apache.org/download.cgi
Download SVN: http://subversion.tigris.org/getting.html

Certificação Java, vale a pena?

outubro 2, 2008

Hoje em dia, com o crescimento enorme no números de sistemas, criou-se uma demanda absurda de profissionais Java principalmente em São Paulo. Valendo a lei da “Oferta e Procura”, não é difícil achar profissionais com 2 anos de experiencia ganhando em média 30 a 40 reais a hora. “A Galinha dos ovos de ouro” do mercado se voltou a Java(.NET também) e gerando uma demanda enorme de treinamento e certificações Java como:

  • Sun Certified Java Associate (SCJA)
  • Sun Certified Java Programmer (SCJP)
  • Sun Certified Java Developer (SCJD)
  • Sun Certified Web Component Developer (SCWCD)
  • Sun Certified Business Component Developer (SCBCD)
  • Sun Certified Developer for Java Web Services (SCDJWS)
  • Sun Certified Mobile Application Developer (SCMAD)
  • Sun Certified Enterprise Architect (SCEA)

É muito comum encontrar no GUJ pessoas estudam muito para conquistar certificações e quando tiram não sabem o que fazer com ela, ou mesmo acham que assim conseguirá uma promoção, aumento ou um novo emprego. Isto ocorre talvez por uma falta de planejamento da sua carreira, de traçar um objetivo para onde quer estar daqui há alguns anos.

Uma certificação de SCJP, a mais difundida no mercado, para algumas empresas são pré-requisitos (pelo fato de participar de licitações onde conta muito o número de profissionais certificados numa equipe), mas não são de maneira alguma garantia de emprego, e sim um diferencial atestando que esse profissional estudou(dedicação) e passou na prova(aplicou o que estudou naquele instante). Conheci pessoas que passaram numa certificação Java sem ao menos ter escrito 1 programa em Java e também conheci pessoas que reprovaram com 2 anos de experiencia(sem estudar), e até mesmo certificados SCEA que não sabiam a diferença de um EJB Session Bean Stateless de um StateFull. O mais importante de uma certificação não acho que seja o que ela representa para os outros e sim o que ela representa para VOCE!

Acho bem interessante tirar certificação SCJP, mas não creio que apenas ela irá a longo prazo te ajudar, mas ela é pré-requisito para outras certificações como SCBCD, SCWCD que são certificações especializadas e olhadas diferentes no seu curriculum. Então, se for tirar certificação, NÃO PARE numa SCJP.

Um profissional sem experiencia em Java, acho muito recomendado fazer certificações, mas sempre pensando em aprender com elas, mas já para profissionais com experiencias em Java, o ganho não seria o mesmo, já que perder 1 ou 2 meses estudando para fazer uma certificação, seria melhor utilizado estudando novas tendencias/tecnologias