MAC499 - Trabalho de Formatura Supervisionado

 

 

Nome do aluno: Christian Rivolta Bernauer

Nome do supervisor: Ana Cristina Vieira de Melo

Tipo de trabalho: Estágio

Nome da empresa: Empresa X

Período do estágio: Maio de 2000 a maio de 2001

Nota ao leitor: os nomes citados neste trabalho, tanto de pessoas quanto de empresas, são fictícios, apesar de representarem pessoas e empresas reais. Devido a um acordo de sigilo assinado na empresa, foi necessário manter a privacidade de todas as partes envolvidas.

  1. Sobre a empresa
  2. A Empresa X é uma empresa de soluções e serviços. Seus campos de atuação são principalmente nas áreas dos processos de produção, atendimento a cliente (pós-venda) e administração de recursos humanos (administração de material, documentação técnica e treinamento), mas não limitados a estes.

    Fundada na Alemanha, a empresa já possui filiais na própria Alemanha, Estados Unidos, Inglaterra, Polônia, Espanha e Brasil. No Brasil desde 1996, a filial resolveu em 2000 expandir sua área de atuação também para soluções em software. Portanto, em maio de 2000 foi criado o departamento de desenvolvimento de software do qual eu fiz parte desde sua criação.

  3. Sobre as atividades
  4. Dentro da empresa eu trabalhei como desenvolvedor de programas, em conjunto com uma equipe que se alterou (algumas pessoas saíram, outras novas foram contratadas) durante o ano que passei lá. Estive envolvido no projeto A da Automóveis S.A, no projeto Hotel Digital, participei do treinamento da ferramenta Intershop e de todo o processo do projeto Feirão Digital. O projeto A será analisado mais a fundo por ter sido o primeiro trabalho do grupo e por ter apresentado vários erros de engenharia de software que eu acho relevante comentar. Apesar de todos os problemas que tivemos, o projeto foi concluído.

    2.1) Treinamento Intershop (setembro/outubro de 2000)

    Após o projeto A (que foi o primeiro projeto da equipe), todos nós recebemos treinamento em Intershop (www.intershop.com). Este programa é um "wizard" para criar lojas online e já tem dentro dele todo um sistema de controle de estoque, promoções, estatísticas de acesso e vendas e criação de perfis de clientes. Além disso, no seu "back-office", ele tem um estrutura para a criação de um "e-marketplace". Ou seja, no fundo ele é um shopping center virtual. Dois membros da equipe (Denis e Bernardo) inclusive foram para a matriz na Alemanha em junho para receber treinamento no Intershop para depois passá-lo para nós. Este programa foi a base de desenvolvimento do projeto Feirão Virtual.

    2.2) Projeto Hotel Digital (novembro de 2000)

    A idéia deste projeto era criar uma ferramenta relativamente genérica que pudesse ser vendida e adaptada aos sistemas e sites já existentes de hotéis e que permitisse a realização de reservas de quartos online. Resolvemos investir neste projeto por ser um nicho de mercado crescente e ainda não muito explorado. Participei de todo o desenvolvimento da parte de engenharia de software. Nós criamos os diagramas de classes e de banco de dados, resolvemos fazer o projeto em jsp (pois é uma excelente ferramenta para criação de páginas dinâmicas, a equipe agora tinha programadores Java, linguagem multiplataforma e de graça) e até começamos a programar. Porém, como este projeto não era nenhum pedido de cliente e no mês seguinte acabamos recebendo muitos pedidos, tivemos que nos envolver em outros projetos e o Hotel Digital ficou suspenso pelo menos até minha saída da empresa.

    2.3) Projeto Feirão Virtual (dezembro/2000 a maio/2001)

    Este projeto foi um pedido da empresa Empresa B. Esta empresa trabalha como provedora de informações e editora de estudos no mercado de embalagens. A idéia deles era criar um "feirão virtual" onde compradores e vendedores pudessem se encontrar e fazer melhores negócios. Ou seja, vendedores poderiam expor seus produtos para mais pessoas e os compradores poderiam procurar os produtos que melhor satisfizessem suas necessidades. Assim foi criado o site deles.

    Este projeto envolveu mais uma empresa, a Empresa C, que desenvolve soluções "customizadas" em Intershop justamente para este tipo de aplicação, chamado de e-marketplace. Portanto, o que ocorreu foi o seguinte: a Empresa B contratou a Empresa C para desenvolver o site e suas customizações. Por ser uma empresa americana, a Empresa C desenvolveu o site somente em inglês e por não ter filiais aqui, ela não forneceria a implementação física. Portanto a Empresa B contratou a Empresa X para dar o suporte "computacional" aqui no Brasil, já que nós éramos a única empresa brasileira a trabalhar com Intershop. O site ficaria hospedado na Empresa D. Portanto nosso trabalho era traduzir as páginas para o português, instalar e fazer funcionar o Intershop (que não é nada fácil) nos computadores da Empresa D e prestar suporte após isso. Para a instalação do Intershop foi chamado um técnico da Empresa X da matriz alemã.

    Neste projeto eu participei desde as negociações até a entrega final. Não posso entrar em mais detalhes sobre este projeto pois assinei um NDA (non disclosure agreement – contrato de confidencialidade).

     

  5. O projeto A (junho/2000 a agosto/2000)

Este foi o primeiro projeto no qual a equipe se envolveu. Acredito ser o mais interessante para relatar detalhadamente pois foi nele que encontramos as maiores dificuldades e problemas. Problemas estes que devem ser muito comuns na área, por isso decidi analisá-los e explicá-los para que outras pessoas não cometam os mesmo erros.

OBS.: O projeto A foi dividido em duas partes: servidor e cliente. Como apenas participei da parte cliente do projeto é sobre ela que vou falar.

3.1) A equipe

Como disse anteriormente, a Empresa X havia resolvido ingressar no mercado de soluções em software. Assim foi criado o departamento no qual eu trabalhei. Foram contratadas inicialmente 5 pessoas.

O gerente do departamento era Bernardo. Sua experiência era em gerenciamento de projetos e Sybase. Depois dele na "hierarquia" estava Denis, programador Java que estava fazendo pós-graduação na UNICAMP. Como administrador da rede local estava Eduardo, que também era professor de Java na PUC-SP. O quarto membro da equipe era Cláudio, engenheiro com bastante experiência na área de informática. Para completar o departamento estava eu, um aluno do terceiro ano do BCC.

Nossa primeira tarefa foi montar a sub-rede para o nosso departamento. Como todos nós tínhamos conhecimentos básicos de Linux/UNIX e por ser gratuito, decidimos que o ambiente de trabalho seria este. Após fazer a instalação em todas as máquinas e nos adaptarmos, fomos designados ao nosso primeiro projeto.

3.2) Situação inicial do projeto

A AUTOMÓVEIS S.A. já era uma cliente da Empresa X na área de treinamento de pessoal e criação de manuais. Fomos então contratados para alterar o sistema A, que se trata de um sistema de avaliação da qualidade e desempenho das concessionárias Automóveis S.A. no Brasil. Essa avaliação é necessária para AUTOMÓVEIS S.A. manter um nível de qualidade de suas concessionárias. As participantes recebem prêmios por avaliações positivas, daí o interesse também por parte das concessionárias. Este programa já existia, porém foi feito em Macro do Excel e cada concessionário preenchia esse formulário de auto-avaliação e enviava um disquete ou e-mail para a central dos avaliadores com o arquivo gravado. Dispensável dizer que este tipo de coisa não é uma solução ótima. O que nos foi proposto era refazer esse programa na linguagem que achássemos melhor, desde que ele cumprisse certos requisitos:

Essa era somente a parte cliente do projeto. A parte do servidor era para os avaliadores poderem acessar as respostas das concessionárias e aprová-las ou não, porém não participei da parte do servidor neste projeto.

O prazo para a entrega da parte cliente era de 6 semanas. Como fechamos o projeto no final de junho, teríamos até o final da primeira semana de agosto para entregar uma versão final para a AUTOMÓVEIS S.A.. Esse prazo era muito rígido pois seria preciso fazer CDs para todas as concessionárias da AUTOMÓVEIS S.A. no Brasil e enviá-los, isso depois de o programa passar por alguns testes do próprio pessoal da Automóveis S.A.. Como a avaliação é semestral, este CD deveria estar nas concessionárias no máximo no começo de setembro.

Portanto, nosso trabalho era simplesmente aprender como funcionava um programa em Macro relativamente simples e convertê-lo para uma linguagem de programação para que ele deixasse de depender do Excel. Para isso teríamos 6 semanas e 5 pessoas. Parece fácil, afinal, o programa tinha apenas uns formulários para serem preenchidos, umas contas simples de serem feitas, imprimir os formulários e envia-los via internet. Mas foi aí que os problemas começaram.

3.3) Desenvolvimento do projeto

Primeiro de tudo, por ser uma equipe recém-criada, ninguém se conhecia e muito menos conhecia a empresa. Portanto perdemos algum tempo num período de adaptação: ninguém sabia direito como lidar um com o outro ou com a empresa. Isso já fez com que levássemos mais tempo para entrar num ritmo eficiente de trabalho.

Segundo, no começo do projeto (no final de junho), perdemos dois membros da nossa equipe temporariamente: Denis e Bernardo foram duas semanas para a Alemanha para receber treinamento em Intershop, que usaríamos em projetos futuros.

Terceiro, como tínhamos decidido que nossa plataforma de desenvolvimento seria Linux, resolvemos rescrever o A em Java 1.2 (era a versão estável da época), pois também era gratuito. Porém nem Bernardo nem Cláudio tinham conhecimento algum de Java. Eu tinha um conhecimento básico e Eduardo e Denis conheciam bastante, porém com isso, nossa equipe de programadores estava reduzida à metade. E esses foram apenas os problemas iniciais.

Independente dessas coisas, começamos a trabalhar. Fizemos o diagrama de classes em conjunto e distribuímos as tarefas para cada um dos membros. Cláudio se engajou em aprender Java para assim poder nos ajudar mais para frente. Bernardo e Denis foram para a Alemanha, o que deixava Eduardo e eu para fazer o projeto, porém, na primeira semana de julho fiquei ausente por causa de provas finais no IME. Logo, nossa equipe estava reduzida a um programador.

Passada a minha semana ausente, Denis e Bernardo voltaram da Alemanha e portanto o nosso projeto poderia começar a andar a todo vapor. Bernardo, por ser o gerente, acabou se dedicando a assuntos administrativos (aquisição de novos projetos, contratação de novos membros, contratação de banda larga para a empresa, etc.) e acabou não se envolvendo muito no projeto. Ele apenas conferia o andamento e cobrava resultados, sem saber muito o que estava ocorrendo.

Eu fiquei encarregado de fazer o módulo que faria a conexão do programa com o servidor para enviar as avaliações. Como nunca tinha feito algo parecido, acabei levando uma semana para criar um módulo que fizesse a conexão via FTP (com autenticação por senha) e enviasse um arquivo.

Eduardo estava encarregado de fazer a interface gráfica. Ela acabou sendo feita sem auxilio de uma ferramenta, pois todas as ferramentas para criação de interface gráfica para Java, gratuitas e que rodavam em Linux, eram muito primitivas ou muito pesadas. Porém por entender muito de Java isso não foi um impecílio. O problema foi que, como achamos a interface gráfica e a navegação dentro do programa muito mal-elaborada e confusa, resolvemos melhorá-la e alteramos a cara original do programa em Macro. No final da segunda semana de julho recebemos a visita de um funcionário da AUTOMÓVEIS S.A. que veio inspecionar o andamento do projeto. Foi aí que descobrimos que a interface do programa não deveria ser alterada, pois os usuários do programa (que já tinha 1 ano e meio) já estavam acostumados com ela e a mudança do programa deveria ser transparente para eles. Portanto, toda a interface gráfica criada até aquele momento teve que ser jogada fora.

Isso não foi tão problemático, afinal, a funcionalidade continuava praticamente a mesma, só precisaríamos mudar a "aparência" do programa. Na terceira e quarta semana de julho continuamos a fazer o programa. Porém ele não andava como esperávamos. Cláudio ainda estava aprendendo Java, nós demorávamos mais tempo do que prevíamos para fazer os módulos, a equipe inteira estava desmotivada devido ao comportamento do gerente, que somente cobrava resultados sem se interessar pelo que estava se passando. Na terceira e quarta semana eu fiquei encarregado de descobrir duas coisas no projeto para serem resolvidas: a impressão dos relatórios e como instalar um programa Java em Windows de maneira simples, para que ele pareça um executável. E o prazo da entrega estava chegando perto.

A parte da instalação seria um problema, afinal, o computador teria que ter uma máquina virtual Java instalada nele (coisa que não havia e nós teríamos que dar um jeito de fornecê-la). Porém eu encontrei uma ferramenta shareware na internet que criava algo parecido com um executável para Windows a partir de um arquivo Java. Ela "embutia" a maquina virtual nele, criando um arquivo muito pesado. Testei apenas com um programa pequeno e funcionou, porém havia ainda a dúvida se funcionaria com um programa grande e complexo como o que estávamos desenvolvendo. Porém isso só poderia ser testado quando nosso programa estivesse pronto. Estando isso relativamente resolvido, passei para a parte da impressão.

Numa sexta-feira pouco depois do almoço, faltando uma semana para entregarmos uma versão beta do programa, eu me deparei com um problema: o sistema de impressão em Java 1.2 era muito precário, necessitava de muita memória e poderia não imprimir dependendo da marca da impressora. Sem mencionar que se faltasse memória, o programa poderia travar. Esse tipo de coisa seria inaceitável para um cliente como a Automóveis S.A.. Convocamos na hora uma reunião de emergência com nosso gerente, Bernardo, e o diretor da empresa no Brasil, Alfredo. Devido a todos os problemas enfrentados até aquele momento, já havíamos nos perguntado se Java realmente fora uma escolha boa, mas naquele momento, devido ao problema de impressão, fomos obrigados a tomar uma decisão drástica: trocar a linguagem! Apesar de terrível, foi a única solução possível. Como já havíamos perdido 5 das 6 semanas que dispúnhamos para realizar o projeto, teríamos que ser muito cuidadosos antes de tomar uma decisão. Decisão essa que precisava ser tomada às pressas. Passamos algumas horas na reunião discutindo os problemas encontrados e vendo quais seriam os problemas que ainda teríamos. Após longa discussão, decidimos que a melhor linguagem disponível seria Delphi. Ela apresentava as seguintes vantagens:

Resumindo, Delphi já tinha como módulos nativos a solução de todos os nossos problemas. Apesar de apenas o Cláudio conhecer Delphi, todo mundo foi capaz de aprender a manusear essa ferramenta em apenas um fim de semana.

Tomada essa decisão, corremos para adquirir a ferramenta no mesmo dia, enquanto o resto da equipe instalava Windows em todas as nossa máquinas (afinal, Delphi não roda em Linux). Trabalhamos no fim de semana para não perder mais tempo e, como já conhecíamos o problema, o andamento do projeto foi bastante rápido. Cada pessoa acabou ficando responsável pelas mesmas partes que tinha feito na primeira e fracassada parte do projeto. Eu acabei ficando apenas com a parte dos relatórios, conexão FTP e instalação pois as aulas no IME recomeçaram e eu tinha assim menos tempo disponível para o trabalho. Contudo, em apenas duas semanas e meia (com penas 10 dias de atraso) conseguimos entregar o projeto.

3.4) Conclusão do projeto

Se formos ver, 10 dias de atraso não é muito. Porém, como o prazo inicial era de 40 dias, esse atraso representou um atraso de 25%. Fora que este prazo só foi cumprido por que toda a equipe trabalhou durante os fins de semana e fez horas extras durante a semana. Além disso, os custos do projeto foram calculados baseados em horas normais de trabalho e utilizando ferramentas gratuitas. Com todas as horas extras e a aquisição de licenças para Windows e Delphi, é indispensável dizer que estouramos em muito o custo do projeto (os valores reais não me foram informados e, mesmo assim, não creio que seja relevante ou ético dize-los).

Após esse "bem sucedido fracasso", nosso gerente Bernardo foi demitido. Durante o projeto, devido a sua falta de interesse e envolvimento no que fazíamos, a relação entre ele e o resto da equipe foi se desgastando até ser criado um ambiente quase hostil. Ao final do projeto, os 4 membros da equipe (eu inclusive) foram falar com o diretor Alfredo para expor o nosso descontentamento com nosso gerente. A diretoria também não estava muito satisfeita com seu desempenho e por isso ele acabou sendo desligado da empresa. Sua responsabilidades foram passadas para Denis, que nós já conhecíamos e tínhamos respeito por sua competência e conhecimentos na área de computação.

3.5) Os erros, suas causas e o que poderia ter sido feito para evitá-los

Os problemas que tivemos durante o projeto podem ser divididos em duas categorias: técnicos e de gerenciamento.

Os erros de gerenciamento foram muitos. Primeiro, não tivemos uma boa especificação do projeto. Isso fez com que tivéssemos que refazer toda a interface gráfica. Se o programa estivesse bem especificado, saberíamos que a aparência do programa seria mantida e não perderíamos tempo nem refazendo-a nem tentando criar uma nova que não foi utilizada.

Lendo a descrição acima podemos ver que também houve uma falta de acompanhamento do projeto pela gerência. Isso deteriorou a comunicação entre estes dois grupos o que é outro grande problema, pois o projeto estava sendo gerenciado pelos programadores, o que não deve ser feito. Uma supervisão externa é bastante recomendável para o bom andamento de um projeto.

Houve também uma má distribuição do pessoal. Durante o projeto estavam sendo contados 4 programadores em tempo integral, porém 1 deles se ausentou por duas semanas por motivo de viagem, eu me ausentei uma semana por causa das provas e um deles ainda estava em treinamento na linguagem. Portanto, esses fatos deveriam ter sido levados em conta na distribuição de tarefas e planejamento do andamento.

Eu atribuo todos esses erros à falta de planejamento e, creio eu, falta de experiência das pessoas envolvidas, principalmente de quem estava gerenciando o projeto. A equipe estava andando sem muito rumo e por isso não chegávamos a lugar algum.

O principal problema técnico foi a limitação da linguagem escolhida, que no fundo reflete um erro no planejamento, que é um problema de gerenciamento. Porém fatos como problemas de impressão e dificuldade para instalação são problemas técnicos da linguagem. Foi feita uma má escolha por falta de conhecimento das linguagens disponíveis e falta de análise do que poderia ter sido usado. Um planejamento mais detalhado, pesquisando diversas linguagens de programação e escolhendo a melhor ferramenta para solucionar nosso problema teriam sido vitais para evitar o ocorrido.

 

3.6) Saldo do projeto

Todos os problemas que enfrentamos acabaram tendo um saldo positivo. No começo nenhum membro da equipe se conhecia. Após passar por essa experiência estressante, a equipe acabou se conhecendo muito bem em um tempo relativamente curto. Cada um viu as qualidades, defeitos e limitações dos outros, o que tornou a equipe muito mais coesa e bem preparada para projetos futuros. Aprendemos a lidar uns com os outros de uma forma melhor, evitando atritos. As tarefas eram mais bem distribuídas, pois sabíamos onde cada um mais se destacava. Enfim, passamos rapidamente pelo processo de adaptação de uma nova equipe e nos tornamos um grupo mais eficiente rapidamente.

Outra vantagem foi que todos aprenderam uma linguagem de programação nova, Java ou Delphi, descobrimos as limitações do Java e acima de tudo, aprendemos que dificilmente um projeto dará certo sem um planejamento adequado.

 

4) Sobre a experiência de trabalho

Achei muito interessante a experiência que tive nesta empresa. Primeiro, por que eu fiz parte da equipe desde sua formação. Por isso, tive a chance de ver como é começar algo do zero, vivi todos os problemas de adaptação que tivemos e presenciei o crescimento da equipe. Essa é uma experiência que com certeza poucas pessoas já tiveram.

Além disso tudo, tivemos um primeiro projeto bastante traumático e turbulento, uma relação ruim com nosso superior, tivemos um projeto que foi descontinuado (Hotel Digital), passei por um processo de treinamento (Intershop) e tive a oportunidade de acompanhar um projeto do começo ao fim (Feirão Virtual). Para um primeiro emprego e em uma empresa que fiquei apenas um ano, acredito ter passado por experiências e acontecimentos que muitas pessoas não vivenciam em anos de trabalho.

Dentro da empresa sempre tive um relacionamento muito bom e saudável, tanto com meus colegas de trabalho quanto com meus superiores. A empresa sempre respeitou o fato de eu priorizar os estudos sobre o trabalho, portanto, quando eu precisava faltar alguns dias para estudar ou terminar um EP, não havia problemas. Era só eu compensar as horas depois ou em casa.

Durante o semestre, devido à carga horária do IME, eu ia para o escritório apenas 3 vezes por semana, o que as vezes me impedia de participar de grandes projetos (por exemplo, fiquei de fora da parte servidor do projeto A). Isso me causava uma certa frustração, pois me sentia pouco útil. Porém nas férias, como eu trabalhava período integral, eu era tratado como qualquer outro funcionário, recebendo as mesmas responsabilidades (foi durante as férias que fiquei cuidando do projeto Feirão Virtual). Nunca fui discriminado por ninguém por ainda estar na faculdade e nem por não aparecer todos os dias da semana no trabalho. Aliás, isso nunca aconteceu comigo em nenhum lugar que trabalhei, mas sei de colegas que já sofreram disso.

Creio que as disciplinas mais relevantes e importantes para a minha experiência profissional tenham sido os laboratórios de programação (pois foi neles que aprendi o que são grandes projetos e conheci várias linguagens), programação orientada a objetos (além de aprender P.O.O., ainda tivemos um projeto grande, aprendi padrões e um pouco de UML), engenharia de software (que veio meio tarde, pois cursei a disciplina depois do projeto A), estrutura de dados (que é usada em todas as áreas) e obviamente as disciplinas básicas (MAC110 e MAC122), pois foi nelas que aprendi a programar. Porém igualmente importante para minha contratação e bom desempenho dentro da empresa foi o conhecimento que adquiri fora da faculdade: conhecimento de línguas, habilidades sociais ("social skills") e boa redação. O principal motivo por eu participar tão ativamente do projeto Feirão Virtual foi o fato de eu ser fluente em inglês e alemão, além de ter aprendido no colégio como redigir cartas comerciais e me relacionar com pessoas comercialmente. Durante este projeto, participei de todas as reuniões com clientes, telefonava tanto para Alemanha quanto para os Estados Unidos para discutir detalhes com profissionais com muitos anos de experiência a mais que eu e escrevi quase todos os e-mails para ambos estes países necessitando apenas de um visto de meus supervisores. Esse tipo de coisa é muito valorizado no mercado de trabalho hoje em dia e não é incentivado na faculdade. Tenho certeza que eu não teria participado tão ativamente deste projeto não fossem meus conhecimentos adquiridos fora do IME.

Uma diferença importante que vi entre os trabalhos realizados no IME e no meu estágio foi que, no IME, estamos sempre trabalhando em grupo, fazendo EPs em duplas, normalmente programando no mesmo micro. No meu trabalho era mais "cada um por si", onde cada pessoa recebe o que deve fazer e não há muita interação na hora de programar. Confesso que não sou muito fã do trabalho solitário, gosto de discutir o que estou fazendo com outras pessoas, mostrar e ver códigos, porém acredito que isso seja um pouco irreal no estado atual do mercado, que exige resultados muito rápidos.

Por fim, acabei saindo da empresa pois tive a oportunidade de trabalhar no projeto Genoma, que na época me interessava muito. Acabei saindo deste estágio 7 meses depois por estar muito desestimulado nele (o projeto não andava para frente, estava tudo meio desorganizado, eu não fazia quase nada). No momento não estou trabalhando (faço uns "bicos" de vez em quando, mas nada sério), principalmente porque quero terminar logo meus estudos e por isso estou cursando muitas disciplinas este ano, o que me impossibilita até de ter um emprego meio-período. Porém essas experiências me mostraram o que realmente me interessa. Gosto de participar de projetos grandes, da parte de engenharia e desenvolvimento, de resolver os problemas realmente complicados, porém não gosto muito da parte de implementação. Acho a programação algo muito braçal. Gosto principalmente da parte humana do negócio (negociações, lidar com pessoas, etc.). Tenho facilidade de lidar com pessoas, falo cinco línguas e não tenho vergonha de falar em público. Quando for procurar um emprego no começo do ano que vem, vou prestar bastante atenção para escolher uma empresa que reconheça essas capacidades em mim e que me dê a oportunidade de usá-las, pois creio que eu lido muito melhor com pessoas do que com máquinas.