1 - Introdução
 

    Meu trabalho de formatura é baseado no estágio que realizei na empresa PCA Engenharia de Software, no período de Maio a Novembro de 2000. Com carga horária semanal de 20 horas em período letivo e 40h em período de férias.
    Durante o estágio participei da área de desenvolvimento da empresa.
    Nesse período participei de um único projeto: um sistema de gerenciamento de custos de recursos humanos, desenvolvido para o Grupo Abril.
 

2 - A empresa Logo da PCA
 

2.1 - Introdução

    A PCA Engenharia de Software é uma empresa de pequeno porte que tem como principal área de atuação o desenvolvimento de sistemas de informação para corporações e grandes empresas de diversos ramos de atividade.
    A PCA foi fundada em 1992, originalmente como uma consultoria em sistemas de informação. Mas rapidamente ampliou seu leque de serviços, passando a desenvolver soluções completas para os clientes desde a fase de análise e planejamento até a implementação da solução e treinamento dos usuários, passando pela escolha de hardware e software mais adequados às necessidades do cliente. Completando o ciclo de desenvolvimento de soluções, foi implantado um provedor de aplicações de Internet, que é utilizado para hospedar as aplicações desenvolvidas para os clientes.
    Além disso, a PCA desenvolveu sistemas nas mais variadas plataformas como, por exemplo, UNIX, Windows e MVS e também em diversos modelos como cliente/servidor (duas e três camadas),  intranet, Internet e aplicações standalone. Sendo que a área de intra/Internet se tornou umas das áreas de excelência da PCA, devido a sua importância vital nos atuais sistemas de informação.     Com isso a PCA adquiriu uma grande experiência em várias áreas de tecnologia, especialmente em redes, servidores de banco de dados, sistemas operacionais, Internet e no desenvolvimento de ferramentas e aplicações.

2.2 - Estrutura Interna

    Com relação à estrutura interna, por ser uma empresa de pequeno porte (por volta de 30 colaboradores) a PCA é bastante dinâmica. Entre seus colaboradores estão estagiários, funcionários e sócios distribuídos entre os setores administrativo, comercial e, principalmente, de consultoria/desenvolvimento.
    Uma característica da PCA é sua forma de organização horizontal, isto é, apesar de obviamente existir uma hierarquia de cargos,  todos são tratados de forma similar, isso pode ser notado já no ambiente de trabalho, onde todos os desenvolvedores e consultores (indenpendentemente de sua posição hierárquica) ficam num mesmo espaço com equipamentos similares. Além disso, todos tem o direito (e de certo modo o dever) de expressar sua opinião sobre qualquer assunto referente a empresa.
   A PCA tem como filosofia valorizar o profissional interno. Isso pode ser notado através de sua política de contratação, a não ser em condições especiais, tende sempre a contratar estagiários, que serão treinados e avaliados, para possivelmente serem efetivados, e dependendo de seu desempenho podem, posteriormente, serem convidados a sócios da empresa.
    A impressão passada através do texto de que a PCA tem uma alta taxa de efetivação é correta, mas o principal motivo para isso é a grande capacitação dos estagiários contratados, que são principalmente da Unicamp, da USP e da PUC. Um aspecto interessante é que praticamente todos os funcionários e sócios da PCA também se formaram nessas universidades.

2.3 - Organização no Desenvolvimento

    Para o desenvolvimento, em geral é formado um grupo que será responsável por todas as etapas do desenvolvimento da solução. Esse grupo é normalmente formado por 3 a 5 pessoas, sendo uma a responsável pelo projeto (em geral um sócio) e os outros participantes são escolhidos por suas especialidades e experiência profissional(tanto conhecimentos técnicos quanto capacidade de relacionamento inter-pessoal), exceto por estagiários (pois estes, normalmente, não possuem conhecimentos específicos) que são alocados para aprendizado e análise de potencial. Os membros do grupo podem, obviamente,  serem realocados para outros projetos temporariamente ou permanentemente de acordo com as necessidades da empresa.

2.4 - Clientes

    Para ser ter uma idéia melhor sobre a área de atuação da PCA, veja seu portfólio de clientes aqui.
 
 

3 - O projeto
 

3.1 - Introdução

    O departamento de recursos humanos (RH) do grupo Abril sentia a necessidade de um sistema que permitisse uma melhor análise dos custos relacionados ao setor de recursos humanos (ex: contratações, demissões, aumentos individuais e coletivos, treinamento, benefícios,  etc.).
    A Abril possuía na época um sistema integrado de controle de RH e pagamento da folha salarial (e benefícios), mas esse sistema era muito pobre em suas ferramentas de área de análise de custos, e por ser um pacote comercial,  era necessária muita customização.
    A solução encontrada foi manter o sistema de RH que já estava sendo utilizado (apesar de suas deficiências) - que continuaria responsável pelas efetivações da folha de pagamento, das contratações, das demissões, etc - e desenvolver um novo sistema que seria responsável em prover o setor de RH do cliente com um extenso leque de informações, tais como:

    Para se ter uma idéia da complexidade do sistema. Aqui estão alguns números sobre o grupo Abril.
 
9 Mil Funcionários 
R$ 1,488 Bilhão de Receita Líquida em 1999
R$ 924 Milhões em Investimentos nos Últimos Seis Anos 
Mais de R$ 200 Milhões em Tributos e Contribuições Pagos a Cada Ano 
R$ 46 Milhões Investidos em Benefícios e Treinamento Para os Funcionários em 1999
dados obtidos do site www.abril.com.br

    O projeto do qual participei consistia parcialmente no desenvolvimento de um sistema de planejamento e controle orçamentário de recursos humanos (conhecido por PCRH) que suprisse as necessidades do departamento de RH do grupo Abril.
    Digo parcialmente, pois, o sistema foi definido para ser implementado no ambiente de intranet da Abril. Com isso foi decidido que o PCRH seria integrado a um sistema on-line que já existia na intranet da Abril: o GTA (Gestão de Talentos Abril), que também foi desenvolvido pela PCA. Em linhas gerais o GTA é um sistema de acompanhamento profissional de todos os funcionários do grupo Abril.
    O projeto como um todo foi chamado de ISRH (Integração de Sistemas de Recursos Humanos) que consistia de duas fases distintas:
            1. Migração do sistema GTA implementado em PL/SQL para ASP
            2. Desenvolvimento do PCRH, também utilizando a tecnologia ASP
 

3.2 - GTA e sua migração

    O GTA(Gestão de Talentos Abril) foi um sistema desenvolvido pela PCA para fornecer para o RH do Grupo Abril um mecanismo eficiente para acompanhar e gerenciar as habilidades e potencial de cada um dos funcionários do grupo, mas é especialmente utilizado para gerencialmente de executivos.
    O sistema permite que qualquer funcionário da Abril que possua uma conta na intranet da mesma (abrangendo quase a totalidade dos funcionários do grupo) possa editar uma série de dados profissionais como: histórico profissional na Abril e anterior ao mesmo, formação acadêmica, cursos realizados, vivência internacional, idiomas conhecidos e sua fluência em leitura/escrita/conversação, etc;  e outros dados que o funcionário queria compatilhar como hobbies (mergulho, pintura, etc). Além disso o funcionário pode responder aos anúncios on-line de vagas em aberto no grupo Abril. Outro aspecto interessante é que o sistema monta automaticamente um currículum on-line da pessoa que poderá ser visualizado pelo pessoal de RH que fará o recrutamento para novas vagas.
    Outro uso do sistema é feito pelo pessoal do RH que pode cadastrar vagas no sistema para que os funcionários em geral possam analisa-las e responde-las se for o caso. O RH pode ainda fazer a seleção das pessoas que possuem o perfil mais adequado para as vagas em aberto, isso é feito através de uma consulta a base de dados do pessoal da Abril e utilizando critérios de busca extremamente flexíveis.
    O GTA é utilizado por diversos perfis de usuários (inclusive o de administrador do sistema), para isso ser possível o mesmo possue uma interface única para cada pessoa, pois as permissões são definidas de acordo com o perfil do usuário e também pode ser customizado de acordo com o usuário, no caso de ele ser uma exceção ao seu perfil. É importante salientar que toda essa customização é transparente ao usuário final, ou seja, basta o usuário logar-se ao sistema para acessar seu menu personalizado.
    O GTA foi desenvolvido originalmente usando PL/SQL e depois foi migrado para a tecnologia ASP (Active Sever Pages) da Microsoft, como o sistema já estava funcionando não era necessária muita documentação pois o sistema já estava especificado, inclusive sua interface que deveria permanecer a mesma. Esta migração inicial facilitou o aprendizado do ASP pela do projeto pois o sistema já era conhecido.
    A migração iniciou-se em Fevereiro/2000 e foi até o final de Maio/2000 isso sem levar em consideração posteriores correções de bugs e alterações pedidas pelo cliente, como um subsistema que indicasse, automaticamente,  pessoas que tivessem um perfil adequado quando uma vaga fosse aberta. Minha participação nessa parte do projeto, lembrando que fui contratado em Maio/2000,  foi basicamente de correções de bugs e manutenção do código de outros programadores (quatro programadores para ser mais específico,  e, aliás,  devo ter pago boa parte de meus pecados nessa época, devido a falta de documentação do sistema e de uma estrutura de comentários no código do sistema), além de implementar algumas novas funcionalidades.
    O GTA foi migrado para o ASP para sua posterior integração com o PCRH (que será descrito a seguir), agora os motivos para adoção dessa tecnologia não são de meu conhecimento.
 

3.3 - O PCRH e seu desenvolvimento

    O PCRH (Planejamento e Controle orçamentário de Recursos Humanos) foi desenvolvido para suprir uma necessidade gerencial do RH do Grupo Abril (para maiores detalhes veja seção 3.1).
    O PCRH apesar de possuir um número de usuários potenciais muito menor, possuia um número muito maior de perfis, além uma personalização individual maior e ainda uma grande necessidade de  segurança,  isso agregou muita complexidade ao sistema de permissões de acesso as transações.
    Outro fator de complexidade foi a integração dos dados do PCRH com o sistema de gerenciamento finaceiro de RH do Grupo Abril. Como havia dados comuns aos dois sistemas e além disso o PCRH necessitava de vários dados desse outro sistema, foi decido utilizar uma base de conversação que faria a ponte entre os dois bancos de dados e seria atualizado uma vez por dia.
    O desenvolvimento do PCRH iniciou-se em Maio/2000 e foi nessa parte do projeto que tive maior participação.
    Houve diversos atrasos com a entrega do PCRH devido a diversos problemas que são abordados a seguir.
    Devido aos problemas o PCRH passou a ser desenvolvido no cliente pois era necessário ter acesso a base de dados para os testes além de ter de se fazer o trabalho de conversão dos dados da base de conversão do projeto para  a base do PCRH.
    Minha saída da PCA ocorreu no final de Novembro/2000, ainda haviam probremas mas parecia que o projeto rapidamente estava caminhando para sua conclusão.
 

3.4 - Problemas

    Vários foram os problemas enfrentados durante o desenvolvimento do ISRH.
    Um dos mais sérios, senão o principal, foi uma especificação inicial negligente em vários aspectos, em especial na documentação. O problema da documentação foi sentido em toda sua extensão quando o coordenador inicial do projeto retirou-se da empresa, e junto com ele, grande parte da especificação "informal" do PCRH.
    Isso serve para ilustrar outro problema sério ocorrido durante o projeto, a alta rotatividade dos membros da equipe, apesar de ser um projeto longo, creio que houve uma troca excessiva dos membros da equipe (em sua grande maioria por fatores que a PCA não tinha controle), sejam por que profissionais se retiraram da empresa ou foram remanejados para outros projetos. Aliando-se esse problema com uma documentação pobre durante o desenvolvimento, tem-se, sendo extremamente otimista, um grave problema.
    Outro fator que comprometeu os prazos do projeto foram problemas relacionados à interação com a empresa responsável pelo sistema comercial de RH do cliente. Aqui os principais problemas eram devidos a atrasos e a diversos erros nas bases de dados (na original e na de conversão).
    Como desgraça pouca é bobagem... devido aos problemas enfrentados e ao conseqüente atraso, os usuários começam a alterar o que já havia sido especificado para que o sistema se adeque melhor as suas necessidades, o problema é que não é possível ficar alterando o sistema de acordo com a vontade dos usuários, mas ficar sem alterar gera um certo descontentamento e aumenta o risco do sistema não ser bem aceito e lembre-se não havia uma especificação documentada, logo era necessário novos acordos toda semana.
 

3.5 - Formas de acompanhamento do projeto pelo coordenador do mesmo

    O acompanhamento do desenvolvimento projeto era baseado diretamente nas tarefas entregues pelos desenvolvedores. Uma vez designada a tarefa para um desenvolvedor este a executava completamente e depois a repassava para o coordenador quando então era submetida a mais testes. É claro que quando surgia alguma dúvida durante o desenvolvimento de uma tarefa o coordenador estava sempre disposto a auxiliar.
    Mas durante a execução do projeto o coordenador já não tinha muito controle sobre o que estava sendo produzido. Esse problema ocorreu devido à má especificação inicial do projeto, o que acabou por utilizar muito tempo do coordenador com reuniões com o cliente e refazer parcialmente o levantamento de suas necessidades.
 
 

4 - Tecnologias e Ferramentas

    As tecnologias com as quais tive contato foram:

    E as ferramentas foram: 5 - Treinamento

    Durante meu estágio na PCA, não participei de nenhum curso. Pois como entrei no meio do projeto, todos os outros integrantes já haviam recebido o treinamento necessário nas tecnologias envolvidas. Por isso, meu aprendizado foi baseado basicamente em leitura (livros, artigos e sites) e na prática.
    Outros pontos importantes foram a ajuda e as dicas (sem mencionar a paciência) fornecidas pelos companheiros da equipe e da empresa de modo geral que sem dúvida foram muito importantes para uma rápida absorção das tecnologias empregadas e grande aumento de minha produtividade.
    Além da falta de um treinamento inicial, não tive tempo para estudar de maneira satisfatória (pelo menos do meu ponto vista) as tecnologias envolvidas. Isso se deve aos prazos do projeto e, principalmente, a minha falta de conhecimentos sobre as tecnologias e ferramentas utilizadas (antes do estágio só conhecia um pouco HTML e SQL).
    Em minha primeira semana tive de aprender o Active Server Pages, Oracle, JavaScript, HTML avançado e relembrar meus conhecimentos de SQL obtidos no IME. Além de utilização de ferramentas como o Interdev da Microsoft e ferramentas da Oracle.    Obviamente só consegui aprender o básico (o que era suficiente para minhas atribuições iniciais), mas com o passar do tempo meus conhecimentos foram se aprimorando.
    Apesar de ser um pouco inconveniente no início, essa falta de treinamento não acarretou maiores problemas para a absorção do conhecimento necessário para o projeto. Aliás, eu, como todos os alunos do IME, já estou acostumado em aprender sozinho o que é necessário.
 
 

6 - Bibliografia

    Alguns dos livros que utilizei durante o projeto:

    Para obter o conhecimento necessário para o projeto foram consultadas inúmeras outras fontes, como diversos sites na internet, outros livros de referência e várias listas de discussão.
 
 

7 - Desafios Encontrados

    Trabalhar na PCA foi interessante, pois um pequeno (ou nem tão pequeno) desafio era encontrado praticamente todos os dias. Seja uma consulta SQL que a princípio parecia muito complexa, aspectos administrativos do Oracle, ou descobrir alguns "truques" para trabalhar com Active Server Pages ou ter de aprender a programar ActiveX em VisualBasic em dois dias...
    Outro desafio constante e nada trivial que encontrei foi o desenvolvimento de interfaces de usuário eficiente utilizando páginas Web. As limitações do HTML (mesmo utilizando uma linguagem script) foram críticas em algumas interfaces do projeto, tanto que a solução adotada em alguns pontos foi a utilização de controles ActiveX, que permitiam uma interface muito melhor, sendo mais poderosa e familiar ao usuário. Mas por outro lado, a utilização de controles ActiveX exige muito mais processamento por parte do host cliente, além de ser uma solução mais complexa e só é utilizável em máquinas com browser da Microsoft. Por esses motivos uma solução alternativa o HTML puro só era utilizada quando estritamente necessária.
 
 

8 - Frustrações Encontradas

    Um ponto que foi bastante frustrante foram os diversos atrasos que o projeto enfrentou durante seu desenvolvimento. Isso acaba ocasionando uma certa desmotivação com relação ao mesmo, com o passar do tempo isso vai se tornado cada vez mais aparente entre os membros da equipe. Na minha opinião a falta de motivação acarreta uma perda na qualidade final do produto, pois nem sempre as soluções mais adequadas são utilizadas.
    Mas o que me deixou mais frustrado foi não ter acompanhado um projeto desde seu início, pois eu acho bastante interessante a parte de especificação do problema e modelagem de sua solução.
 
 

9 - O estágio e o BCC
 

9.1 - Diferenças na cooperação entre colegas do BCC e equipe de trabalho

    Em relação a ajuda mútua, meu estágio foi bem parecido com os trabalhos realizados no BCC, pois tanto no IME como na PCA todos colaboraram entre si para conseguir seus objetivos, no caso da PCA produzir um software superior para o cliente e no IME ser aprovado nas disciplinas.
    Mas as semelhanças acabam por ai, pois os objetivos a serem cumpridos são bastante distintos, bem como o tempo de dedicação - na empresa vôce deve trabalhar em equipe praticamente todo o tempo, já na faculdade o tempo é reduzido devido as várias disciplinas.
    Considero os projetos em grupo do BCC fundamentais para preparar o aluno para o mercado de trabalho, pois neles pode-se sentir na pele as dificuldades e também a necessidade de se trabalhar em conjunto com pessoas que tem opiniões distintas para se desenvolver trabalhos complexos. E além disso para aprender a ter um melhor senso crítico, especialmente com relação a própria opinião.

9.2 - Disciplinas diretamente aplicadas no estágio

    Não estão citadas disciplinas que considero fundamentais para um profissional da computação, tais como MAC 122 - Princípio de Desenvolvimento de Algoritmos e MAC 323 - Estrutura de Dados, pois nenhum desenvolvimento poderia ser realizado sem os conceitos aprendidos através destas disciplinas.
    As disciplinas tiveram seu conteúdo aproveitado de forma mais direta no estágio foram:

MAC 332 - Engenharia de Software
    Esta disciplina é fundamental para o processo de planejamento e desenvolvimento de qualquer projeto de software. Todo profissional da área de computação deveria conhecer o básico sobre metodologias de desenvolvimento tanto quanto estrutura de dados e algoritmos. No estágio da PCA, infelizmente não tive participação nos estágios iniciais de desenvolvimento, mas esta disciplina serviu para que eu pudesse fazer uma análise própria dos fatores que prejudicaram o andamento do projeto, e, portanto, aprender com as dificuldades encontradas e tentar evitá-las.

MAC 426 - Sistemas de Banco de Dados
    A importância dessa disciplina foi óbvia durante meu estágio, pois grande parte de meu trabalho era realizar diversas consultas (e alterações) em SQL na base de dados. Ter uma sólida base Álgebra Relacional facilitou muito meu aprendizado de SQL. Além disso, ter um conceito de um sistema de banco de dados facilitou o entendimento do banco Oracle e permitiu compreender melhor como otimizar as buscas realizadas no mesmo.

MAC 446 - Princípios de Interação Homem Computador
    Esta foi uma disciplina a qual pude facilmente avaliar sua importância, pois desenvolvi algumas interface baseadas nos padrões utilizados no projeto, sem pensar em todas as necessidades do usuário final. Moral da história, tive de refazer uma parte significativa destas interfaces. Mas o ponto importante é que quando precisei redesenhá-las, eu já havia cursado mais da metade da disciplina e sabia como avaliar melhor as necessidades do usuário e pude criar interfaces que atendiam melhor as necessidades e expectativas dos usuário final.

MAC 448 - Redes de Computadores
    Esta é uma matéria de grande importância atualmente. Pois os conceitos aprendidos são utilizados no dia-a-dia. Saber o que é o protoloco TCP/IP e como funciona é essencial para qualquer um que trabalhe num ambiente de rede.
 
 

10 - Aprimoramento dos conhecimentos e evolução na carreira

    Como as tecnologias e ferramentas evoluem de uma forma muito rápida, pretendo me manter informado do que ocorre de novo no mercado através de revistas, sites, listas de discussão e amigos da faculdade e dos colegas de serviço. Aliás farei isso com prazer pois eu gosto de aprender novas tecnologias e metodologias.
    Um diferencial de uma formação sólida é que apesar de não parar de surgir novas tecnologias raramente vê-se surgir um novo conceito. Seja um conceito de programação concorrente, de banco de dados, de estrutura de dados. Por exemplo: a pouco tempo comecei a ver XML (eXtensible Markup Language)  e XSLT (eXtensible Stylesheet Language Tranformations), o XSLT que basicamente  transforma um XML em qualquer outro formato estruturado,  e a primeira vista pode parece bastante complexo, mas basicamente é um tradutor de grámaticas e para quem já teve Autômatos e Linguagens Formais sua manipulação torna-se mais  simples e natural.
    Pretendo ainda fazer pós-graduação mas ainda não sei em qual área, vou esperar mais um pouco para ver como minha carreira vai evoluir. Me interesso pela área de administeração, mas gosto de várias áreas de computação, entre elas: modelagem (especialmente orientada a objetos), engenharia de software, redes e banco de dados.
 
 

11 - Conclusão

    Para mim o estágio (não só o da PCA) teve  uma enorme importância,  pois, mais de uma vez, já fiquei desanimado com o curso do BCC, não sabia se era exatamente essa a carreira que gostaria de seguir, não sabia qual a utilidade das disciplinas que estava estudando. Com o estágio ganhei uma nova motivação (além da financeira...), pude colocar em prática meus conhecimentos durante o curso e ver que ainda há uma infinidade de áreas e assuntos a se estudar em computação que são muito interessantes. Com o estágio, meu interesse pelas disciplinas cresceu (mas não por todas...) e meu interesse em realmente aprender (não só para ser aprovado) a matéria exposta também.
    Mas o estágio também traz seus problemas, quem já fez 6 ou 7 disciplinas no IME e trabalhou paralelamente sabe do que estou falando. É preciso saber separar seu tempo e definir suas prioridades, eu aprendi da pior maneira basta olhar o primeiro semestre de 2000, bem pelo menos no segundo fui aprovado em 7 disciplinas (sem contar esta discilplina: MAC 499) mas isso só foi possível devido  as prioridades que estabeleci (no caso o curso) e a um estágio bastante flexível. É claro que o aprendizado de cada disciplina pode não ter sido o máximo, mas acho que absorvi conhecimento suficiente das disciplinas que cursei.
    Um ponto muito importante para uma carreira de sucesso (ou pelo menos para o ínicio de uma) é uma boa formação acadêmica e isso tenho certeza que o IME fornece. O IME propicia uma sólida base conceitual sobre diversas áreas da computação mas o mais importante é que ele nos prepara para sermos grandes... alunos, sim,  pois todos (ou pelo menos a grande maioria) saem daqui aptos a aprender rapidamente  e de forma consistente as mais diversas diversas áreas e tecnologias da computação. E isso é algo exremamente valorizado pelas empresas e não muito fácil de se encontrar no mercado profissional.