No começo do ano, estava bastante indeciso com relação ao que fazer de trabalho de formatura. Não sabia se partia para uma iniciação científica, um estágio ou ainda um projeto. Primeiramente, decidi fazer um estágio. Como gosto de administração de redes, procurei algo nesta área e comecei a estagiar em uma empresa como administrador de redes. Porém, logo notei que seria difícil produzir um bom trabalho neste tipo de estágio, pois não havia um grande projeto ou algo mais interessante sobre o qual pudesse escrever. Instalação de servidores, resolver alguns problemas, montar uma rede, sempre pequenos trabalhos. Percebi, então, que a dificuldade de realizar o trabalho em cima de um estágio está justamente na dificuldade de conseguir um assunto interessante para trabalhar. Decidi, portanto, juntamente com mais três colegas, o Carlos, o Cleber e o Giuliano, que iria partir para um projeto. Bastava agora arrumar um tópico que todos gostassem e um professor que aceitasse nos orientar. Primeiramente, tivemos a idéia de desenvolver um conjunto de ferramentas que nos auxiliasse a construir e implantar Intranets de um modo rápido. Mas logo achamos um assunto mais interessante, WorkFlows, e decidimos, em comum acordo, supervisionados pelo professor Alfredo, que aceitou nos orientar, desenvolver este sistema apresentado nesta monografia. Porém, continuei paralelamente no estágio que comentei anteriormente, mas agora sem me preocupar em achar no estágio o meu trabalho de formatura. Posteriormente, tive que largar o estágio, pois estava impossível de me manter nos dois ao mesmo tempo e resolvi me dedicar mais ao projeto.
Logo no início, me deparei com um grande problema. Nunca havia mexido com este tipo de sistema. Em todo o curso universitário, tive que desenvolver muitos projetos voltados mais para a área científica, sem me preocupar muito com assuntos como interface com usuário, segurança na comunicação dos dados, tolerância a falhas, etc. Foram poucos projetos em que tive que me preocupar com este tipo de assunto, e mesmo quando havia algum projeto assim, não era necessário um grande aprofundamento nestes tópicos. Outra coisa que me deixou bastante confuso foi a falta de um escopo para o trabalho. Quão genérico ele deveria ser? Deveríamos especializar o programa e fazer com que ele cumpra bem determinado papel ou deveríamos deixá-lo mais genérico para que possamos adaptá-lo para servir em diferentes situações? Optamos por fazer algo mais genérico. Mas essa decisão foi bastante difícil e gerou muitas discussões proveitosas. Durante todo o curso, quando vamos fazer nossos Exercícios-Programa, sempre recebemos um papel com tudo exatamente especificado, e não percebi que um dos tópicos mais difíceis no desenvolvimento de software é, justamente, fazer essa especificação, delimitar qual é o problema que queremos resolver e se manter neste escopo. E é justamente devido a esta minha falta de percepção, que não dei muita importância para engenharia de software, na época em que tive a matéria. Só agora venho perceber a sua real importância, como comentarei mais adiante.
Após decidirmos sobre o que iríamos fazer, faltava decidir como iríamos fazer, isto é, que tecnologias iríamos utilizar. Foi aqui que surgiu uma outra grande dificuldade para mim. Até o momento eu não havia mexido com muitas das tecnologias que utilizaríamos. Nunca tinha trabalhado com servidor de aplicação, com J2EE, com JDO, com Struts, com Velocity entre outros nomes estranhos dos quais nem sabia do que se tratava. Havia um volume imenso de informação que eu deveria aprender em pouquíssimo tempo. Acredito que se ficasse apenas na leitura de livros, não teria dado tempo para aprender o que precisava. Foi neste ponto que a ajuda dos meus colegas de projeto foi crucial. Uns já trabalhavam com essas tecnologias, outros já tinham conhecimentos em uma ou outra área, me ajudando muito no aprendizado e foram bastante compreensivos com a minha necessidade de primeiro ter que aprender para depois ajudá-los a implementar. Aproveito para agradecê-los. Creio que em empresas não podemos contar com este tipo de ajuda, o que faz deste projeto uma experiência única, comparado com os trabalhos que terei na minha vida profissional.
Gostaria também de ressaltar a importância da Rede Linux do IME no nosso trabalho de formatura. Grande parte do nosso trabalho foi desenvolvido nas salas da Rede Linux, que proporciona um ambiente muito bom de trabalho, onde todos podem se reunir para discutir, onde todos os participantes podem programar ao mesmo tempo em máquinas diferentes e inclusive utilizar diferentes máquinas para rodar os diferentes servidores dos quais precisávamos. Sem ela, isto seria impossível. Boa parte dos meus quatro anos de curso no IME foram gastos dentro das salas da Rede Linux, e ela me proporcionou um excelente apoio para o aprendizado.
Com o passar do ano, melhorou um pouco a minha percepção sobre quais matérias são realmente importantes e quais têm uma importância mais reduzida neste tipo de projeto. Quero deixar claro, aqui, que se o estilo de projeto fosse outro, talvez tivesse chegado a conclusões completamente diferentes, pois cada matéria tem pesos diferentes dependendo da área com a qual se trabalha. Feito esta ressalva, seguem as matérias que achei importantes, seguidas de um breve comentário:
Estas duas matérias são essenciais, pois através delas aprendi técnicas básicas de programação. Foi onde conheci a lógica de programação, que, independentemente da linguagem, se utiliza no desenvolvimento de software. Uma boa formação nestas duas matérias garantem uma base sólida para entender tópicos mais avançados.
Aqui, tive contato com o primeiro projeto maior e mais trabalhoso. Foi muito bom para aprender a trabalhar em grupo e, principalmente, para saber organizar o tempo de forma a conseguir acabar o projeto.
Nesta matéria, tive o meu primeiro contato com Java. Foi aqui, também, que aprendi os conceitos básicos de orientação a objetos e fiz o meu primeiro projeto em Java. O conhecimento que adquiri aqui, portanto, foi crucial para a realização do projeto de formatura.
Atualmente, considero esta matéria de extrema importância. Ela nos dá a visão que precisamos para saber "por onde começar" a enfrentar o problema. Percebi que é bastante difícil saber qual a melhor estratégia a ser utilizada em um projeto. A engenharia de software nos dá ferramentas para lidar-mos com este problema. O projeto que fizemos nesta matéria, também, foi o que mais se aproximou do tipo de projeto que fizemos como trabalho de formatura.
A grande maioria dos sistemas feitos atualmente tem que persistir muitos dados em disco. No nosso projeto, não foi diferente. Apesar de utilizarmos algo diferente para persistir os dados (JDO), sempre utilizamos os conceitos básicos de BD. Estas duas matérias me deram o conhecimento teórico e prático, respectivamente, para saber utilizar de modo correto um banco de dados, fazer a modelagem de um BD, mexer com SQL e linguagens procedurais entre outras coisas. Apesar de Laboratório de Banco de Dados ser uma matéria optativa, para mim, teve maior importância do que a obrigatória MAC0426, por se tratar do primeiro contato real que tive com um Banco de Dados.
O nosso sistema utiliza em todos os momentos, os conceitos de redes. Estas matérias foram úteis na hora de configurar os servidores que precisávamos (servidor de aplicação, Tomcat, etc) e também na hora de pensarmos na interface com o usuário, pois precisávamos conhecer bem os protocolos http e https. Ela também nos dá uma noção essencial dos riscos que corremos quando optamos por fazer a comunicação de dados através de uma rede e como evitar possíveis problemas. Além disso, são as matérias de que mais gostei e para as quais fiz questão de dedicar grande parte do meu tempo de estudo.
Existem ainda algumas matérias que gostaria de ter cursado, por achar de grande importância, mas não tive oportunidade até o momento, devido à falta de tempo ou outros fatores. São elas:
Pretendo me aprimorar na área de desenvolvimento de sistemas empresariais. Para isto, vou tentar continuar estudando assuntos na área de Orientação a Objetos, Objetos Distribuídos, Banco de Dados e Engenharia de Software. Talvez me aprofunde nesta área no mestrado. Acho importante sempre estar em contato com as tecnologias de ponta. E, no meu modo de pensar, não existe lugar melhor para isso do que dentro da própria faculdade. Pretendo, portanto, continuar em constante contato com o IME.