Desafios e dificuldades |
A maior dificuldade que eu encontrei durante
o desenvolvimento do projeto foi a adaptação com a
parte do sistema que já havia sido desenvolvida no ano passado.
Como a documentação do sistema era bem escassa, foi
bastante difícil entender o que cada classe fazia e como
elas se relacionavam para prover as funcionalidades desenvolvidas.
Além disso, a versão inicial do sistema fazia uso
de um arcabouço para persistência dos dados que era
totalmente desconhecido por mim – o Prevayler. Isso dificultou
e emperrou a continuação do projeto porque tivemos
que estudar a arquitetura e o funcionamento do Prevayler para poder
continuar a desenvolver os demais módulos do sistema.
Superada a fase inicial, as dificuldades
começaram a aumentar à medida que a Flávia
e eu tentávamos implementar as demais funcionalidades, pois
a arquitetura que havia sido desenvolvida teria que ser refatorada
para suportar os novos módulos. Esse trabalho de refatoração
foi muito longo e exaustivo e tomou uma proporção
ainda maior quando substituímos o Prevayler por um sistema
de persistência através de EJB usando o JBoss. Essa
dificuldade poderia ter sido minimizada se a versão inicial
do sistema tivesse testes para todas as funcionalidades implementadas.
Dessa forma, a cada refatoração poderíamos
re-testar o sistema para garantir que a mesma não “quebrou”
nada que já estava funcionando.
Também vale ressaltar que durante
a maior parte do ano trabalhamos sem cvs e isso trouxe novas dificuldades,
pois tínhamos que nos organizar muito bem para não
atrapalhar um ao outro na hora de mexer no código. Em outubro,
quando o projeto foi incluído no arca [1],
pudemos trabalhar com o cvs do arca e essa dificuldade foi anulada.
Foi também um pouco difícil
conciliar o tempo que eu tinha que dedicar às matérias
de graduação e ao meu estágio com o tempo que
eu tinha que despender com o projeto. Diversas vezes os eps e provas
que se espalharam pelos semestres consumiram um tempo que poderia
ter sido alocado para o projeto. |
|
Realizações |
Justamente por termos encontrado várias
dificuldades, a maior realização foi ter conseguido
superar essas dificuldades e produzir um sistema funcional, bem
documentado e testado. Cada etapa que superamos me rendeu um aprendizado.
A experiência de continuar um trabalho que já havia
sido começado foi única e eu acredito que isso contribuiu
para me tornar um profissional mais completo. |
|
Trabalho em Equipe |
O relacionamento com a minha companheira
de equipe, a Flávia, foi muito bom durante todo o desenvolvimento
do projeto. Como já trabalhamos juntos anteriormente e já
conhecíamos o estilo de trabalho um do outro, pudemos começar
o projeto e delinear os objetivos mais rapidamente. Todas as decisões
sobre o projeto foram discutidas amplamente entre nós dois,
de maneira que ambos sabiam exatamente tudo o que estava se passando
com o qualquer parte do trabalho que estávamos desenvolvendo.
Sempre estivemos abertos às idéias um do outro, levando-as
seriamente em conta na hora de tomar as decisões. Isso foi
um fator-chave para a manutenção de um bom relacionamento
durante toda a duração do projeto.
Também gostaria de destacar a presença
dos funcionários da biblioteca – que serão os
clientes do nosso projeto – sempre que foi solicitada. Eles
se mostraram muito interessados pelo nosso trabalho e quiseram se
envolver com o projeto, opinando e dando idéias para aperfeiçoá-lo.
Com isso tínhamos uma equipe que não era só
formada pela Flávia e eu – os programadores –
como também pelo professor coordenador Fábio Kon e
pelos futuros clientes do sistema. Essa foi uma experiência
realmente positiva, uma vez que eu nunca tinha tido a oportunidade
de trabalhar em equipe com os clientes do projeto que eu estava
desenvolvendo. Isso por si só já tornou o trabalho
de formatura diferente de todos os trabalhos que eu já havia
desenvolvido até então. |
|
O Curso e o Projeto |
Diversas disciplinas foram importantes
para a realização desse projeto em particular, mas
de uma forma geral todas as disciplinas do nosso currículo
são importantes para a formação de um senso
crítico que é essencial para o nosso desenvolvimento
profissional. Gostaria de citar aqui as disciplinas que foram mais
importantes para a realização do projeto:
• MAC0323 – Estrutura de
Dados. A todo momento temos que tomar decisões
com respeito às estruturas de dados mais adequadas para a
situação que estamos modelando e essa disciplina foi
fundamental para decidirmos pelas estruturas que melhor podiam representar
as abstrações que nós necessitávamos.
• MAC441 e MAC413 – Programação
Orientada a Objetos e Tópicos de POO. Como
todo o projeto foi desenvolvido utilizando linguagem Java e o paradigma
orientado a objetos, essas duas matérias foram muito importantes,
pois me ajudaram a construir um conhecimento sólidos dos
conceitos mais importantes de programação orientada
a objetos. Especialmente Tópicos de POO, pois as discussões
promovidas a respeito de arcabouços e padrões de design
contribuíram diretamente para uma melhoria da qualidade do
código que eu estava escrevendo.
• MAC338 – Análise de Algoritmos.
Na minha opinião uma das matérias mais importantes
do curso. Essa disciplina estimulou meu senso crítico com
relação à eficiência, clareza e elegância
do código que eu tive que desenvolver. Posso dizer que meu
modo de programar mudou significativamente após essa disciplina.
• MAC440 – Sistemas de Objetos Distribuídos.
Como o projeto desenvolvido trata-se de um sistema distribuído,
essa disciplina ajudou muito nas decisões a respeito da arquitetura
que íamos construir, bem como na resolução
de problemas que encontramos durante o desenvolvimento do projeto.
Além dessas, outras disciplinas também
contribuíram de alguma forma para o desenvolvimento do projeto:
MAC426 – Sistemas de Bancos de Dados,
MAC332 - Engenharia de Software e MAC438
– Programação Concorrente. |
|
O Estágio e o Projeto |
O principal motivo pelo qual escolhi como
trabalho de formatura o desenvolvimento de um projeto em detrimento
do meu estágio foi a possibilidade de aprendizado. Desenvolver
um projeto longo, enfrentando as dificuldades que iriam aparecer
me beneficiaria mais do que simplesmente relatar minha experiência
de estágio, que, de certa forma, já estava estagnada.
Entretanto, a experiência do estágio
também contribuiu para o sucesso do desenvolvimento do projeto
de formatura, principalmente com relação às
tecnologias utilizadas. Um exemplo disso é o desenvolvimento
da parte web do projeto baseado no arcabouço Struts do projeto
Jakarta [2]. O uso desse arcabouço
foi motivado pela experiência que tive com ele no ambiente
de estágio, onde ele se mostrou uma ótima solução
para implementação do padrão MVC para web. |
|
Conclusão |
Considerei a confecção
do trabalho de formatura uma peça muito importante para minha
formação como bacharel em ciência da computação.
Eu tive a possibilidade de escolher como trabalho de formatura relatar
a minha experiência adquirida no estágio ou desenvolver
um novo projeto e escolhi o último. E acredito que essa tenha
sido a melhor decisão, pois enquanto no estágio eu
já não estava mais aprendendo nada valioso para minha
formação, o projeto me proporcionou uma experiência
única e todas as dificuldades que encontrei durante o desenvolvimento
do mesmo só me trouxeram benefícios.
Além disso, o projeto foi uma boa
oportunidade de aplicar os conceitos adquiridos durante a graduação.
Nosso curso nos dá uma base firme e geral, estimulando nosso
raciocínio e nosso senso crítico e permitindo que
nos aprofundemos em qualquer área de interesse. Isso ficou
muito evidente para mim durante a execução do projeto,
quando tive que resolver problemas específicos da aplicação
que estava sendo construída. Para isso tive que pesquisar
e estudar tecnologias específicas, mas a base do conhecimento
necessário para o correto entendimento e aplicação
das tecnologias já tinha sido construído.
Tenho um grande interesse de me aprofundar
na área de sistemas de objetos distribuídos e pretendo
fazer mestrado nessa área a partir do ano que vem. Também
pretendo estudar algumas tecnologias relacionadas por conta própria
a fim de aprimorar meus conhecimentos. |
|
Referências |
|