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!

domingo, 25 de outubro de 2009

Enumeração de Caminhos - Algoritmo Grafos

Olá pessoal!
Na postagem de hoje irei mudar um pouco o foco atual do blog que, desde seu início, tem sido focado mais em tecnologias (spring, hibernate, jsf entre outras).

Hoje vou comentar um pouco sobre grafos que sempre foi um assunto de meu interesse na época de faculdade. Mais especificamente, através de uma apresentação de slides, vou mostrar dois algoritmos (baseados em rotulação de nós e arcos) para encontrar o número de caminhos entre dois nós de um grafo acíclico.

Os algoritmos são bem interessantes e tranquilos, visto que podemos usar e abusar da orientação a objetos para implementa-los (os que tornam mais interessante ainda).

Para melhor entendimento da apresentação, aconselho que o leitor tenha já um certo conhecimento de conceitos básicos de grafos. Dentre eles pode-se citar: matriz de adjacência, nós sucessores, antecessores etc.



Os fontes da implementação mostrada na apresentação estão disponíveis o link abaixo:
Fontes dos algoritmos

Quem desejar somente o executável está disponível em:
JAR da implementação

O implementação foi feita em Java... Só para lembrar!!

Abraço!!

quinta-feira, 27 de agosto de 2009

Desvendando o ZK Framework

Olá!
Aproveitando o embalo do post anterior, neste vou apresentar conceitos do ZK Framework e um exemplo de implementação (ressaltando os conceitos) através de alguns slides. Esta apresentação trata-se de apenas uma referencia inicial para as pessoas que desejam se aprofundar na tecnologia.
A apresentação está bem interessante! Vale a pena dar uma olhada!




Para maiores informações: http://www.zkoss.org/

Até!

quarta-feira, 22 de julho de 2009

Mundo Java - número 36

O post de hoje será somente para falar um pouco sobre a edição 36 da revista
Mundo Java. Na verdade, o motivo disso é a minha presença na edição com o artigo ZK Framework - Utilizando Ajax sem Javascript.












No artigo procurei ressaltar conceitos referentes os ZK e ainda construir exemplos mostrando seu uso. Segue uma prévia de alguns trechos do artigo publicado..

" Cada vez mais se faz necessário que as aplicações web sejam intuitivas e fáceis de se usar. Esta necessidade está diretamente ligada à camada de visão de tais aplicações. Porém, a criação de aplicações com interfaces ricas exige esforços cada vez maiores. Essa exigência muitas vezes acaba desviando o foco do desenvolvimento que deveria ser, na maior parte do tempo, nas regras de negócio. Com efeito, surgem diversas ferramentas tentando facilitar essa tarefa, sendo uma delas o ZK Framework. "

" ... as tecnologias utilizadas em aplicações web apresentaram uma notável evolução. Inicialmente tinham-se aplicações cujas camadas de visão eram compostas somente por páginas HTML estáticas que, com o decorrer do tempo, foram gradativamente evoluindo para páginas HTML dinâmicas (DHTML), páginas utilizando Flash, Applets e, por fim, para páginas que incorporavam o uso de Ajax ... "

" Com a maturação da tecnologia Ajax, surgiram vários frameworks baseados nela, sendo o ZK um deles. A idéia principal do ZK Framework é facilitar a incorporação de Ajax nas aplicações web desenvolvidas em Java, de maneira a dispensar qualquer conhecimento de Javascript. Essa facilidade é oriunda dos mecanismos internos do ZK que geram código Javascript de forma transparente para o desenvolvedor. "



E por aí vai correndo o assunto..
Além desse artigo, a edição apresenta vários outros assuntos interessantes dos quais cita-se: JRuby, Demoiselle Framework, hábitos eficazes para tratamento de exceções etc.

Para quem desejar saber mais sobre o ZK Framework segue uma dica quente:
http://www.zkoss.org/

Mais adiante vou postar alguns exemplos mostrando o uso do ZK.

até!