MAC499 - Proposta do Trabalho de Formatura Supervisionado

aluno: Ricardo Koji Ushizaki
riko@linux.ime.usp.br

supervisora: Dilma Menezes da Silva

Trabalho Final - novembro/2000



Voltar à Página Principal


1. Empresa (organização, ramo de atividade).

2. Equipe - esquemas de trabalho.

3. Projetos - prazos e conclusões.

4. Ferramentas e técnicas.

5. Desafios e frustrações.

6. IME e o estágio - aplicações práticas.

7. Conclusão.



1. Empresa.

A empresa e seu ramo de atividade já foi descrito na introdução do 1o. semestre, mas acrescentarei informações relativas ao seu quadro de funcionários, comparando com o 1o. e 2o. semestre deste ano.

A empresa é de pequeno porte, no início de 2000 constituía-se de apenas 16 colaboradores, cresceu e no meio do ano chegou a ter quase 40. Passado um mês, caiu para 30, e em setembro quando deixei a empresa existiam em torno de 25 colaboradores.

É fácil notar que a empresa passou por altos e baixos, e no período que estagiei, observei muitas coisas. Primeiro, no início do ano, a empresa estava formando seu quadro de funcionários, o produto a que ela defendia ainda nem existia (o portal rededc), e havia grandes perspectivas de crescimento. No período de maior crescimento, justamente abril/junho, o portal estava sendo lançado. Passado a euforia inicial, reduziu-se o número de funcionários.

A organização da empresa consistia basicamente de 2 equipes de engenheiros com aproximadamente 4 pessoas cada, 1 equipe de design com 3 a 4 pessoas e 1 equipe de desenvolvedores de 8 pessoas no início. Deste modo, a equipe de desenvolvedores se dividia (informalmente) em 4: uma junto com cada equipe de engenheiros, uma responsável pelo portal e outra desenvolvendo módulos especiais do site. Mas essa divisão não existia, pois muitos eram alocados para áreas onde se precisava de ajuda


2. Equipe.

topo

Durante o 1o semestre de 2000, eu desenvolvi juntamente com uma das equipes de engenheiros o módulo de Informática, trabalhando com o seguinte esquema de trabalho:
- um engenheiro criava idéias de funcionalidades do módulo de Informática (veja detalhes em Atividades do 1o semestre);
- eu discutia essas idéias e avaliávamos quais eram viáveis e quais não. Isso era importante, pois ao se colocar essas idéias na prática, eliminava-se as tarefas impossíveis de se realizar, conseguindo com isso a compreensão da equipe de engenheiros às limitações de um site na Internet, muito diferente de se ter aplicativos end-users locais;
- no início, eu mesmo desenvolvia o que era discutido, e aprendia com a tecnologia sendo utilizada (Java Servlets, Banco de Dados, HTML/JavaScript).

A equipe de desenvolvedores inicialmente era pequena, e eu trabalhava sozinho, mas contava com a ajuda de outros mais experientes, o que achei muito válido. Mas muito mais válido achei a experiência de poder pesquisar e estudar a tecnologia sendo utilizada, pois não conhecia Servlets, e tinha apenas uma base teórica de Banco de Dados. Acredito ser muito importante conseguir algum valor agregado às funções que se executa, poder sempre aprender com tudo o que se faz. No meu caso, aprendi muito com a linguagem Java utilizando Servlets, e SQL utilizando os bancos de dados MySQL (no início) e depois migrando para Oracle. Tecnologias de Internet hoje são importantes de se conhecer e foi a linha que segui desde o início.

No final do 1o. semestre passei a trabalhar junto com um nova equipe formada por 4 desenvolvedores para um novo módulo do site. Destes 4, apenas uma pessoa não conhecia Java, e conseguimos ajudá-la durante o decorrer do projeto. Não foi feito nenhum treinamento para essa pessoa, nem tampouco para nenhuma outra da equipe inteira durante meu estágio todo, o que não foi muito bom. Na minha opinião, por ser uma empresa de Internet, seria bom manter sempre uma equipe ligada com as principais tecnologias de ponta, o que conseguíamos somente através de nossos próprios estudos e colegas. Isso pode ter sido uma das causas pelos quais todo projeto possuía seus problemas (mal planejamento, atrasos, mal estruturado), e ao longo dos meses percebia-se como consequência de tais falhar que alguns módulos ficavam difíceis de se integrar.


3. Projetos - prazos e conclusões.

topo

Participei de muitos projetos, mas irei destacar 3 deles, e comentarei sobre seus prazos e minhas conclusões:

- Plugin do AutoCad

Primeiro projeto ao qual participei.Teve a maior duração também (cerca de 2 meses). Basicamente, devia-se criar um modo automático de instalação de desenhos para o AutoCad no seu menu, que era estruturado em LISP.

Este projeto utilizou-se de uma pessoa de outra empresa ao qual discutíamos juntas as funcionalidades do plugin. Essa pessoa possuía o conhecimento da ferramenta AutoCad, e eu cuidei da edição do LISP do AutoCad, utilizando algumas APIs do próprio Delphi. Conseguimos ao final de 2 meses atingir nossos objetivos, mas aprendi muito com nossos erros nesse projeto. Entre eles, destaco:
- a falta de uma especificação inicial fechada fazia com que sempre houvesse idéias novas (às vezes boas, às vezes não) por parte da engenharia, que levavam a pequenos atrasos do projeto;
- falta de um cronograma do projeto. De novo, não existindo prazos para se fechar tais funcionalidades, o projeto se estendia e ninguém percebia;
- falta de conhecimento da tecnologia, inclusive a minha, levando a se considerar um tempo para pesquisa e estudo antes de se iniciar a implementação do projeto.

Dentre os acima, acredito que a falta de conhecimento da tecnologia não seja um erro em si, mas sim o que erramos foi não prever esse tempo para a execução do projeto. É muito importante estudar a tecnologia antes, saber usá-la e então aplicá-la corretamente, o que evita problemas futuros. Mas em muitos projetos tal tempo não é (ou nunca é) considerado, o que pode ser uma falha de projeto.

- Módulos do site - Informática para Construção e Ajuda On-Line

O módulo Informática possuía muitas funcionalidades, entre elas a busca por determinado software e a parte dos Utilitários para Cálculos de Engenharia. Acredito que neste módulo não tivemos muitos problemas pois usou-se a tecnologia de Servlets, e havia na equipe pessoas experientes nisso. Além disso, conseguimos pensar em uma boa estrutura de classes, utilizando o potencial da linguagem Java, o que acelerou nosso desenvolvimento.

Mas um dos fatores que mais me chamou a atenção foi a tentativa de se separar o desenvolvimento do design das páginas, ou seja, a funcionalidade separada da arte final do site. Isto foi uma questão que durou muito tempo, e o máximo que conseguimos foi introduzir um sistema de templates de html, no qual apenas inseríamos em determinadas partes da página o html gerado dinamicamente pelo servlet. O problema ocorria porque os designers não podiam visualizar a página durante o desenvolvimento, somente na integração final, e isso consumiu boa parte dos desenvolvedores em tarefas que não deveriam ser deles, como a de arrumar layouts de páginas.

O módulo Ajuda On-Line eu desenvolvi sozinho o sistema, que era um help do site explicando sobre o que o usuário estaria visualizando no momento. Neste módulo, fora o constante problema com os designers, não tive nenhum outro tão grave, e pôde-se chegar a um bom produto final. Aqui destaco alguns fatores os quais acredito influenciaram no seu sucesso:
- a experiência maior já adquirida dos projetos anteriores, o que me impediu de cometer os mesmos erros (cronogramas, documentação, know-how da tecnologia);
- trabalhei juntamente com a pessoa que especificou o sistema, o que me ajudou muito na hora de se solucionar dúvidas. Ao pararmos para pensar, nós desenvolvedores diariamente enfrentamos desafios, técnicos ou do sistema, e tendo a pessoa que pensou o sistema por perto, já elimina e agiliza o processo de desenvolvimento do software;
- aqui destaco a linguagem Java, reutilizando códigos já existentes, facilitando muito e evitando a replicação de códigos existentes.

- Módulo Orçamento On-Line

Este projeto contou com uma equipe de 4 desenvolvedores, e desde o início começamos certo. O Orçamento On-Line possibilita que compradores e vendedores de construção civil possa efetuar seus orçamentos pela Internet. Possuía duas grandes área: Compras e Vendas. O fator que ajudou muito nesse projeto foi a experiência dos engenheiros nessa área, ajudando muito na especificação inicial do sistema.

Foi feito um cronograma bem dividido, pois havia muitas tarefas mesmo para 4 pessoas juntas, o que levou a um tempo estimado de 3 meses. Mesmo assim, podíamos acompanhar diariamente a nossa evolução sabendo o que estava atrasado ou não. Além disso, a especificação inicial foi discutida conosco, e fechada desde o início. Mesmo que tal especificação foi se modificando ao longo do projeto, em toda mudança era estudado sua viabilidade e então uma nova duração para tal tarefa.

Projetos - Conclusão

Percebe-se que com o tempo adquirimos experiência que nos ajudam a evitar erros e atrasos nos projetos. Mas o que muito ajuda e não foi mencionado acima é a equipe de trabalho. É muito importante saber trabalhar em equipe, pois cada um tem um valor agregado a dar ao projeto. Aprende-se muito com o outro, troca-se conhecimentos e consegue-se um produto melhor no final, e todos ficam motivados com o trabalho.


4. Ferramentas e técnicas.

topo

A tecnologia utilizada foi Java Servlets, utilizando uma base de dados Oracle, rodando em um servidor HP com sistema operacional Linux. Havia também um servidor interno que era utilizado pelas equipes de engenharia, que rodava WindowsNT. O link com a internet pertencia à própria empresa, via ondas de rádio.

Os servlets são processos que rodam do lado servidor da aplicação, e atende às requisições HTTP do cliente. Basicamente, ele recebe uma requisição, utiliza a camada de negócios do sistema (consultas ao banco de dados), e monta o html de resposta ao cliente. É possível saber mais sobre essa tecnologia no site da Sun (java.sun.com), que possui tutoriais muito bons sobre esta e outras tecnologias que utilizam a linguagem Java.

Durante os projetos que participei utilizei uma estrutura desenhada para suportar os módulos do site. Assim, no início existia um ou mais servlets para cada módulo, e não existia uma integração entre um módulo e outro. Por exemplo, o módulo de Informática no qual participei, não se comunicava com o módulo de Materias para Construção.

Com o tempo isso foi se tornando um pequeno problema, mas como as classes Java estavam bem modularizadas, conseguiu-se integrar todo o site em um só servlet que atendia a todas as requisições, e repassava as chamadas para os módulos correspondentes. A consequência disso foi a reestruturação de todo o código do site, mas só das classes que tratavam diretamente com o cliente web. A parte da lógica de negócios, que envolvia principalmente consultas à base de dados, não foi alterada.

Após essa reestruturação geral, ficou mais fácil fazer com que os módulos se comunicassem. Por exemplo, existiam tabelas do banco de dados que pertenciam somente ao módulo de Empresas, que continham informações de cadastro das empresas filiadas ao site, e necessitávamos que os softwares de Informática possuíssem as informações de seu fabricante. Foi possível utilizar as classes que já existiam para Empresas que comunicavam com o banco de dados, não sendo necessário a recriação e replicação de código para o sistema.


5. Desafio e frustrações.

topo

Acredito que um dos maiores desafios no início foi aprender a tecnologia utilizada e saber aplicá-la corretamente. Mas como já estava acostumado com o esquema do IME, de muitas vezes não se conhecer e ter de aprender tal matéria, não foi tão difícil assim. Na minha opinião, aprender algo que não se conhece ou domina é muito estimulante, e ter de aprender essa nova tecnologia foi um dos desafios que encontrei.

Outro desafio que tive foi saber lidar juntamente com a equipe de engenheiros, que cuidavam da especificação, e da equipe de designers, que cuidavam da arte final. Com os engenheiros, era preciso saber separar o prático do irreal que eles pediam, mas isso com o tempo foi se amenizando, após muitas discussões sobre o sistema, e até da compreensão da parte deles da tecnologia sendo lidada. Agora, com a equipe de designers ocorreram muitos problemas, muito mais no início, devido à total falta de esquematização do trabalho.

O problema com os designers ocorriam justamente porque não existia uma sincronização do trabalho, ou seja, eles bolavam um layout e nós programávamos as funcionalidades, mas muitas vezes terminávamos sem o novo layout, utilizando apenas um rascunho da página. Ao final, ocorria uma integração do layout com nossas funcionalidades, e isso custava muito tempo. A solução encontrada foi receber já o novo layout e programar em cima desse, mas ainda existia uma certa dependência com eles. Até o momento que saí da empresa, o esquema continuava o mesmo.

Não tive nehuma frustração em relação ao estágio, mas talvez tenha faltado uma maior preocupação por parte dos dirigentes de se manter a equipe bem treinada, ou mesmo atualizada com novas tecnologias que pudessem surgir. A equipe era bem heterogênea, poucos sabiam bem Oracle, por exemplo, e alguns sabiam bem Java, outros Delphi. Talvez poderia ter até existido um ciclo de aprendizado entre os próprios desenvolvedores, fato esse que aprendi ao sair da Touch e começar na EverSystems. Lá a preocupação de se manter a equipe com um bom nível de aprendizado é grande, não havendo muitas disparidades entre os desenvolvedores.


6. IME e o estágio - aplicações práticas.

topo

Uma das diferenças que notei entre os colegas do BCC e a equipe que trabalhei foi uma maior integração que obtive com a equipe do estágio. Isso talvez venha do fato de ficar mais tempo com essa equipe do que quando se tem algum EP para se fazer no IME. Uma outra diferença que notei foi uma maior responsabilidade com a equipe em que se trabalha, obviamente por se tratar de trabalho. Isso foi bom pois adquiri uma maior responsabilidade tentando entregar (alguns) EPs no prazo.

Sobre as matérias do IME que foram mais relevantes ao estágio, cito todas aquelas que tive a oportunidade de se programar em Java, claro, e também matérias básicas como Estrutura de Dados e outras mais importantes como Programação Concorrente, Engenharia de Software e Banco de Dados. Acredito que tive uma boa base nestas matérias, mas ainda há muito o que aprender, por exemplo da parte de Engenharia de Software. Não citei pois não cheguei a cursar, mas Orientação a Objetos é muito importante, e talvez não deveria ser mais uma optativa. Aprendi muito dessa parte no estágio, e pelo menos para minha carreira acredito ser muito importante.

Sobre aplicações que pude ter na prática, cito muito a importância da Engenharia de Software em projetos. mesmo que não tenha conseguido fixar todas as técnicas aprendidas durante o curso, tentei aplicar algumas como requerimentos do projeto, forma de se desenvolver um projeto, seus testes. A parte de Banco de Dados apliquei bem pouco, ou seja, apliquei muito o SQL aprendido durante o curso, mas não cheguei nem perto de usar as Formas Normais. Muito importante também é dominar a parte de Estrutura de Dados, saber exatamente qual a melhor estrutura para se guardar os dados, além de saber bem a parte de orientação a objetos.


7. Conclusão.

topo

A área que estagiei é muito promissora, principalmente a programação em Java utilizando não só Servlets, mas outras tecnologias que aprendi ao começar na EverSystems, por exemplo Entrerprise Java Beans, uso de XML/XSL, JNDI e LDAP, entre outras, são muito importante para nosso conhecimento.

Aprendi muito durante meu estágio na Touch, mas para aprimorar meus conhecimentos técnicos estou seguindo passos diferentes agora. Acredito ser muito importante o profissional estar sempre atualizado com novas tecnologias, principalmente na nossa área, por isso aconselho fortemente todos sempre usarem pelo menos 2 horas por dia para o estudo e pesquisa de novas tecnologias. A Internet hoje é uma fonte muito rica de conhecimentos, existem muitos sites que possuem tutoriais, documentação e artigos sobre essas novas tecnologias, basta sabermos nos guiar nessa fonte de conhecimentos, sabermos focar nosso estudo na tecnologia em interesse, e o mais importante, saber utilizá-la corretamente na prática.

Acredito que todos nós somos eternos pesquisadores, estamos sempre aprendendo, devemos estar sempre atualizados. Mas um outro lado que defendo também é saber ensinar o que sabemos. Transmitir conhecimentos faz com que todos se sintam motivados pelo trabalho, e mantém-se um bom nível técnico da equipe. É muito importante que não se guarde conhecimento, e sim saiba pelo menos indicar o caminho para aquele que não sabe. Isso eu senti bastante ao começar meu estágio, pois não conhecia nada e fui sendo orientado aos poucos, até saber como guiar meu próprio caminho.

Enfim, achei muito enriquecedora a oportunidade de se fazer estágio, consegue-se aprender muito além do que se aprende no IME. O importante é saber usar o que se tem de uma boa base teórica conseguida na graduação e conciliar com o mercado de trabalho. É importante também estagiar na área que mais se tem interesse de seguir carreira, e tentar traçar um próprio plano de carreira para que sempre se esteja crescendo profissionalmente, e nunca parar de aprender. Com isso, a pessoa estará sempre preparada para novos rumos que sua carreira possa tomar.


Ricardo Koji Ushizaki

novembro/2000 - IME - USP

Voltar à Página Principal

Última atualização: 29/11/2000

Ricardo Koji Ushizaki
Bacharelado em Ciência da Computação - IME - USP

riko@linux.ime.usp.br