domingo, 26 de setembro de 2010

Gestão do conhecimento no ensino de computação.

Um dia desses, eu estava sentado no sofá e fiquei imaginando como o ensino de computação nas organizações ou instituições de ensino poderiam ocorrer de forma mais eficiente.

O fato é que nosso modelo de ensino de computação atual, nas faculdades por exemplo, assume um processo de aprendizagem medieval e muito formal. Geralmente os alunos são avaliados através de provas que por sua vez é uma avaliação individual. A colaboração e o trabalho em equipe não são levados em consideração nesse contexto, distanciando assim os alunos do cotidiano profissional que está por vir. Em minha opinião, este é um processo que deve ser completamente repensado (geralmente o trabalho colaborativo nas instituições de ensino é chamado de “cola”).

A evolução da tecnologia e a demanda crescente de conhecimento evolui muito rápido. Os métodos atuais de difusão do conhecimento não acompanham a velocidade dessa evolução. Minha sugestão para esse problema é a adoção da “dinâmica das comunidades open source” para o ensino de computação. O mundo open source é composto por comunidades que são auto-organizadas e incentivam a disseminação do conhecimento de maneira informal. Sem dúvidas, elas são um excelente exemplo de como distribuir conhecimento de forma sustentável para produzir um código de qualidade.

Além da questão da aprendizagem, um outro fator importante é o trabalho de colaboração existente no mundo open source. Trabalhar em grupo significa compartilhar conhecimento. Geralmente, um grupo tem mais capacidade de gerar criativamente alternativas, levantar as vantagens e desvantagens de cada uma, selecionar as viáveis e tomar melhores decisões do que os indivíduos separadamente. Trabalhar em grupo também traz motivação para o membro, pois seu trabalho vai estar sendo observado, comentado e avaliado por pessoas de uma comunidade da qual ele faz parte. Quando um indivíduo expressa ideias para poder se comunicar com outros, ele trabalha ativamente seus conceitos, refletindo sobre os mesmos e refinando-os, trazendo uma melhoria à qualidade do trabalho e do aprendizado.

A pergunta que sempre fica em minha mente é: o que falta para isso acontecer no ensino de computação?
Sinceramente, eu mesmo não sei a resposta. Mas, com certeza, já deveria está acontecendo na velocidade da luz (Me dê sua força, Pégasus).

terça-feira, 16 de março de 2010

Instalando o Maven

O post de hoje é um guia prático para instalação do maven.
Vejam o vídeo que eu preparei!

Bem simples e fácil fazer sua configuração inicial.
Mais abaixo tem um resumo da instalação



Resumo:

  1. Baixar o maven: http://maven.apache.org/download.html
  2. Descompactar o arquivo.
  3. Adicionar as variáveis de ambiente M2_HOME , M2;
    • M2_HOME = D:\caminho_pasta_maven\apache-maven-x.y.z
    • M2 = %M2_HOME%\bin
  4. Alterar a variável PATH:
    • PATH = acrescentar %M2%
  5. Verificar a existência da variável JAVA_HOME e a referência %JAVA_HOME%\bin no PATH.
  6. Rodar o comando "mvn -version" no cmd.
É só isso. Até

domingo, 28 de fevereiro de 2010

Gerência de projeto de software nos tempos modernos

O post de hoje é uma crítica à gerência de projeto de software.
Tenho visto ultimamente que muito se fala de processo, metodologia, cronograma e pouco se é falado de construção de software de qualidade.


Um breve comentário para reflexão...
Desenvolvedor faz cronograma? Estimativa? Ou desenvolve?

Abraço!

terça-feira, 26 de janeiro de 2010

Obtendo maior reuso de código com o padrão “Application Service”

Durante a concepção de um novo software quase sempre nos deparamos com a mesma estrutura clássica de separação de camadas: dao, service, facade e controller.
Em aplicações corporativas, muitas vezes é interessante reutilizar códigos já usados em outras aplicações. Isso porque, nessas aplicações, geralmente as classes que compõem o modelo de dados são as mesma para a corporação.

O reuso de código é sempre mais eficaz quando temos uma camada de serviço fina, ou seja, com pouca lógica da aplicação em si. Porém, nos casos em que temos uma camada de serviço com muita lógica de negócio específica da aplicação, o reuso destes serviços para outras aplicações torna-se mais difícil.

Para melhor entender, veja considere a seguinte situação de exemplo:

Tem-se duas aplicações: uma de cadastro de funcionários e outra premiação de funcionários (aplicações típicas de empresas). Baseado nisso vamos considerar:

  • As aplicações são distintas sendo que, cada uma delas tem a suas lógicas de negócio específicas (serviços);
  • As aplicações pertencem à mesma corporação portanto,vamos considerar que o modelo de dados (model) e a camada de persistência (dao) são iguais para ambas;
  • Cada aplicação tem sua fachada (facade) que expõe uma interface que controla o acesso dos diferentes clientes aos serviços.

Para maior compreensão veja a figura 1 com projeto das duas aplicações.


Figura 1

No exemplo mostrado pela figura 1, vimos que em algumas situações as aplicações podem requerer alguma lógica extra para que executem corretamente suas tarefas (métodos específicos da figura 1). Preferencialmente, os facades não devem conter lógicas de negócios e os services, idealmente, não devem conter lógicas específicas de um caso de uso ou aplicação. Desta maneira há mais reuso e o acoplamento entre os serviços diminui. Assim, pode-se introduzir uma camada que concentra a lógica específica e coordena ações dos services para que essa lógica específica seja corretamente executada. Esses serviços são chamados de application services.

Voltando ao exemplo, a organização dos serviços ficariam da seguinte forma (figura 2):


Figura 2

Ou seja, os métodos comuns mostrados na figura 1 ficariam dentro de FuncionarioService e os não comuns ficariam dentro FuncionarioAppService de cada aplicação.
Desta forma o facade de cada aplicação fica encarregado de fazer as devidas chamadas para a camada de negócio (figura 3).


Figura 3

Em síntese, isto é o que chama-se de componentização. No momento em que agrupamos coisas comuns e que podem ser reutilizadas em aplicações distintas, pode-se criar um JAR (componente) com esses fontes e usá-lo nas aplicações sem necessidade de replicação de código.

Até breve!