Instituto de Matemática e Estatística
Universidade de São Paulo
MAC499 – Trabalho de Formatura
Projeto Panda Reloaded
Experiência pessoal
Paulo Eduardo Azevedo Silveira 2369541 peas@linux.ime.usp.br
Orientador Carlos Hitoshi Morimoto
Para começar com os desafios:
· Fazer um código legível não é tarefa fácil;
· Criar independência de benco de dados foi algo que levamos muito tempo para chegar a uma solução;
· O mesmo acontece para isolar o SQL do java e do HTML, a partir daí optamos pelo MVC,
· No meio tempo aprendemos java e servlets;
· Alguns problemas que achamos terem simples soluções viraram grandes problemas. Um exemplo foi a entrega em grupo, que gerou um certo problema funcional na hora de corrigir apenas um trabalho e cada aluno pudesse ter diferentes notas.
Entre as frustrações, creio que eu em particular não tive muitas. Meu principal objetivo, que era de aprender bastante com o projeto, foi cumprido. Talvez a falta de uma metodologia de engenharia de software possa ser considerada uma frustração, já que fizemos o projeto apenas trocando mensagens e nos reunindo às vezes na casa do Gilmar para separar o que cada um faria a partir daquele momento. Mesmo assim a metodologia não foi caótica, como ocorreun no panda anterior.
Vou dar uma atenção especial a este tópico, já que esta parte da monografia é para relacionarmos o curso com o projeto.
· MAC-122: Princípios de Desenvolvimento de Algoritmos
Esta foi a primeira matéria em que aprendi a usar funções e métodos em programação e em que tive contato com algortimos.
· MAC-323: Estrutura de Dados
Apesar do contato aqui com Java, a enfase foi em alguns algoritmos sobre estruturas, sem orientação a objetos. Esta matéria me fez ter um pouco de ódio do java.
· MAC-211: Laboratório de Programação I
Tive essa matéria com C, com forte aplicação de estruturas. Apesar de novamente ter escapado a orientação a objetos, aprendi muito a componentizar e encapsular.
· MAC-242: Laboratório de Programação II
Tive muito Perl nesta matéria, junto com uma ampla gama de ferramentas.
· MAC-426: Sistemas de Bancos de Dados
A modelagem de um banco de dados foi essencial para o Panda, assim como para a minha experiência profissional.
· MAC-438: Programação concorrente
Sem dúvida nenhuma é a matéria que une melhor teoria e prática. Problemas reais enfrentados com uma teoria que vira uma ótima leitura. Como o panda é em servlets enfretamos muitos problemas de sincronismo e concorrência. Mas não é apenas isso, creio que esta foi a matéria que mais me despertou interesse depois das básicas como 122 e 323.
Não faz parte das matérias, mas creio que eu não posso deixar de citar minha experiência profissional no exterior. Lá eu aprendi muito. Foi onde tive meu real contato com java e orientação a objetos, através de amigos brasileiros e também alemães.
Acho que Programação XP teria muito a me acrescentar, mas não tive a oportunidade de cursa-la. Outras matérias que eu gostaria muito de ter cursado são: Programação Orientada a Objetos e Tópcios avançados de Orientação a Objetos. Porém a 1ª eu não gostava da matéria na época, e a 2ª bateu horário. Este projeto mostrou o que muita gente tem falado, que POO deveria ser obrigatória e é muito mais importante que Engenharia de Software (além de servir como base para esta).
Apesar de Autômatos não ter sido diretamente utilizado neste projeto, a matéria é espetacular e fundamental! O mesmo acontece com Análise de Algoritmos e Grafos.
Cálculo 4, Álgebra 2 (apesar de eu reconhecer que algo se encaixa em álgebra booleana e autômatos), Estocásticos e Programação Linear são as campeãs de não-uso, mas programação linear realmente precisa ser dada. Porém existe uma matéria que é um punhado de algoritmos jogados para o aluno: MAC 300. Com certeza se encaixaria como matéria optativa como tantas outras que são algoritmos: reconhecimento de imagens, otimização combinatória, etc...
O primeiro panda foi com a mesma equipe, mas a desorganização foi total. Neste trabalho aproveitamos ao máximo a sinergia. Creio que o grande aliado foi a utilização do CVS (ferramente a qual deveriamos aprender em Lab Prog juntamente com Makefile).
Sobre a convivência com os outros integrantes, ela foi melhor que no projeto anterior: todos estiveram dispostos a enfrentar o projeto em uma época diferente, fazendo com que cada integrante puxasse o outro para trabalhar.
O problema é que, como toda essa liberadade e amizade, fica difícil dar uma “ordem”, ou definir uma meta para cada integrante, já que ninguém tem coragem de cobrar do outro com pulso firme.
A divisão do trabalho foi mais que adequada: não dividmos um tipo de trabalho para cada um, e sim um subsistema para cada um. Isto graças a arquitetura MVC, que permitiu cada um de nós trabalhar indepentemente apesar de mexer nas mesmas camadas.
A grande mudança foi a organização. Os trabalhos para o BCC não são feitos pensando na interface com o usuário, nem muito na legibilidade do código. O panda foi muito ao contrário, além de que programamos em camadas, sem aquele código macarrônico que encontramos nos trabalhos do IME.
O primeiro panda pode ser comparado diretamente como sendo um EP gigante do IME, pois a programação era caótica, o código é horrível e não havia modularização alguma.
Porém, quando trabalhei, a experiência foi muito diferente, devido a existência de uma hierarquia de funcionários e de prazos mais rígidos.
Um dos itens pedidos na monografia é para discutir sobre como seria se o aluno continuasse na área do projeto. Eu realmente vou continuar nessa área: aplicações web dão espaço para muitas tecnologias, e mexe muito com programação concorrente, que me agrada muito. Outra área que estou me dirigindo é a de minsitrar cursos. Sei que o BCC não tem isso como objetivo, mas este tipo de emprego tem crescido assustadoramente, e chega a fazer grade curricular de algumas escolas secundaristas mais essêntricas.
O trabalho atingiu todos os meus objetivos de aprendizado e prática, especialmente os subprojetos.