Robôs, sensores, Kinect e o ensino de programação

Novamente, tenho encontrado projetos muito interessantes sobre ensino de programação.

Mais recentemente encontrei três que permitem ao estudante novato interagir com o mundo real de forma muito direta, uma placa de sensores chamada PicoBoard, um robô programável chamado Finch e o Kinect, sensor da microsoft.

Kinect

Já tinha visto algumas iniciativas mas não sabia que estava tão forte. O sensor Kinect utilizado no XBox da Microsofot pode ser plugado a um computador via USB e interagir com qualquer aplicação.

PicoBoard

É uma placa que contém diversos sensores e alguns botões. Foi desenvolvida inicialmente para projetos com a ferramenta Scratch.

Robô Finch

Este é um robô que pode ser programado em Java, Python e diversas outras linguagens e que contém uma grande variedade de recursos como sensores de temperatura, obstáculos e vários outros.

E tudo materializado no Greenfoot

Para ver como isto não está longe, o projeto Greenfoot é uma IDE educacional para o ensino de Java OO que já fez a conexão de projetos Orientados a Objetos com estes três outros projetos acima, além de vários outros recursos.

Enfim, temos boas perspectivas para o mundo da computação, sempre com a mesma origin, a vontade de aproximar realidade da computação. Ainda não sei porque nenhum dos meus professores tenha sequer iniciado algum movimento destes, talvez seja mesmo uma tarefa da próxima geração.

Viera K. Proulx – Pesquisadora de Ensino de Orientação a Objetos

Comecei aprendendo Orientação a Objetos girando coordenadas de um quadrado.

Não desmereço isso, de forma alguma. Porém, quanto mais estudo esta área mais descubro projetos com uma capacidade incrível de visão e confirmo minha crença de que a melhor forma de aprender é modelando e executando softwares que trabalhem as principais áreas de interesse humano.

Até agora tenho trabalhado em cima da idéia de jogos e espero que meus alunos estejam gostando.

Viera K. Proulx

Mas hoje me deparei com alguns projetos de Viera K. Proulx, pesquisadora da Northeastern University em Boston, EUA.

O seu trabalho que mais me impressionou o sobre o ensino de conceitos de OO utilizando música. Isso mesmo, você cria objetos da classe “Note” (Nota musical) e pode executá-los em sequência ao som de diversos instrumentos.

Além deste trabalho, possui artigos sobre o ensino de programação através do projeto das classes de um programa, desenvolvimento baseado em testes, simplicidade com Java I/O e muitos outros.

Vale a pena conhecê-la e fica aqui registrado o nome desta referência para novatos na profissão de professor.

Exemplo da API

Para quem desejar ter uma idéia de como ela funciona,  criei um projeto no GitHub com um exemplo básico. Para quem quer ir direto ao fonte, a classe teste é esta aqui: https://github.com/kaleucaminha/testes-soundworldlib/blob/master/src/VeryBasicExample.java

Projeto Astral – Visualização de Estrutura de Dados

Uma das maiores dificuldades que percebo nas minhas aulas de Orientação a Objetos é visualizar como as linhas de código produzem valores na memória do computador (principalmente referência, mas essa fica para outro post com a ajuda do JEliot).

Lembro que quando consegui encaixar as linhas de código que criava com a memória do computador, foi como se o programa tivesse ganho consistência, digamos que meu código se tornou mais real, mais “sólido”, minha capacidade de abstração melhorou.

O projeto Astral

O projeto Astral é uma das ferramentas que podem ser utilizadas para auxiliar o ensino de estruturas de dados.

Ele consiste em uma série de pequenos aplicativos executáveis que permitem inserções, remoções  e buscas em árvores, listas, arrays, além de outros recursos como visualização de grafos e interpretação de gramáticas.

Visão Pessoal

Gosto muito da perspectiva de tornar visual os conceitos abstratos. Acho que conseguimos aproximar mais pessoas da computação quando ferramentas como estas são construídas, e acredito também que com a ajuda de algumas visualizações,  poderemos liberar os estudantes para criarem apps, websites, etc ao invés de passar horas tentando compreender como que se faz uma busca binária.

Colisão Pixel Perfect com Java

Para quem quiser estudar melhor a colisão PixelPerfect em Java, criei um exemplo que pode ser trabalhado e baixado aqui https://github.com/kaleucaminha/Colis-o-Pixel-Perfect-Java-e-javaPlay

O exemplo utiliza como base o framework javaPlay. O javaPlay é enxuto, nacional e acompanha este livro.

As classes de colisão PixelPerfect e o pacote javaExtras foram construídos por mim para o curso técnico em programação do SENAI São José em Santa Catarina.

Mais informações, entre em contato.
Para mais exemplos do javaPlay e outros, veja meu github.

A importância dos Líderes

Os líderes são os guardiões da nossa sociedade. Quando os líderes falham, uma sociedade inteira pode sofrer.

Emocionado, Patrick Awuah mostra sua paixão em formar líderes em Gana na universidade Ashesi, da qual é co-fundador.

Para mim, como professor, é extremamente relevante ouvir a fala deste homem e me inspirar a estar a todo instante lembrando que de fato, posso estar colaborando para a formação de futuros líderes. E que as decisões destes homens e mulheres um dia poderão influenciar muitos outros homens e mulheres.

A fala de Patrick Awuah me inspira a ser responsável e reforça minha crença que, quando todos na sociedade aceitarem sua parcela de responsabilidade na formação das novas gerações, poderemos ter uma sociedade perfeita.

Em breve serei pai,
e é incrível como essa perspectiva acorda a responsabilidade que sinto com o futuro.

Alan Kay e o ensino de computação

Há 1 ano tenho o privilégio e o desafio de tentar ensinar programação de computador para adolescentes. Neste pouco tempo pude perceber a quantidade infinita de conexões que a computação pode fazer com as disciplinas de matemática, física e biologia.

As grandes dificuldades em se realizar estas conexões na minha percepção são 1) a alta exigência de competências profissionais destes professores e 2) o ferramental.

Para o primeiro problema, só tempo, alto investimento e pessoas com muita vontade.

Para o segundo, encontrei o belo trabalho de Alan Kay, um dos ídolos da computação.
Dentre outras coisas este apaixonado por Jazz criou os conceitos de Orientação a Objetos baseado em seus estudos de computação e biologia molecular e um dos primeiros protótipos de LapTop.

Neste vídeo das conferências TED ele apresenta uma forma interativa com o software EToys, de aprender os conceitos de variáveis, velocidade, aceleração, etc.

Testei a ferramenta em casa, e, em apenas 20 minutos (sem nenhum tutorial) consegui criar um simulador de um carrinho de controle remoto com volante e velocidade variável.

Não que a ferramenta seja a solução, mas o principal é a motivação que está por trás dela, a verdadeira preocupação deste cientista em proporcionar para as crianças meios de eles mesmos realizarem ciência, uma forma destes jovens poderem (terem poder para) testar os conceitos, aplicá-los e sentirem o que os grandes cientistas sentiram um dia ao realizar as suas descobertas, o prazer em aprender.

Resumo: Diretrizes para o Ensino de Orientação a Objetos com Java

Este documento resume o artigo dos criadores do BlueJ que apresenta 8 diretrizes básicas para o projeto de qualquer curso de Orientação a Objetos com Java (com ou sem BlueJ).

As Diretrizes são:
1 – Comece por Objetos
2 – Não inicie com uma tela em branco
3 – Leia Código
4 – Use programas grandes
5 – Não iniciei com o método main
6 – Não utilize Hello World
7 – Mostre a estrutura do programa
8 – Tenha cuidado com a interface com o usuário

Link do artigo original em inglês: http://kar.kent.ac.uk/13607/1/guidelines_for_teaching_object_kolling.pdf

Auto Completar para classe ORM em PHP

Em muitos frameworks PHP apenas precisamos extender uma classe para adicionarmos funcionalidades completas de ORM. Um exemplo é o Kohana Framework, com poucas linhas (ou quase nenhuma) você tem acesso a listas, inserções, atualizações e exclusões do banco de dados:

class Model_Entities_State extends ORM {}

O problema aparece quando você vai utilizar a classe e precisar decorar o nome das colunas da tabela para poder utilizar os recursos.
A forma que encontrei de resolver esta questão é adicionando comentários PHPDoc para informar quais os atributos “mágicos” que a classe contém.

/**
 * @property mixed $id
 * @property mixed $name
 * @property mixed $slug
 * @property mixed $acronym
 */
class Model_Entities_State extends ORM {}

E aí, resolvido.!

Auto completar adequado com PHP

Quem programa em Java em geral fica muito bem acostumado ao auto-completar, que devido a tipagem forte (bem, desde que você não use genéricos), sempre oferece as opções adequadas de auto-completar.

Porém, em PHP, que oferece tipagem dinâmica, as vezes esse recurso é perdido pois a IDE não tem como saber se o seu array associativo contém inteiros, strings ou instâncias de uma classe qualquer.

Felizmente isso é fácil de resolver, basta adicionar um comentário dizendo para a sua IDE qual o tipo de uma determinada variável.

Dica direto deste link: http://stackoverflow.com/questions/390192/autocomplete-for-php-objects-with-classes-in-pdt-netbeans

 

Design Thinking para educadores

Design Thinking é uma nova área de estudo que nos coloca o desafio de pensar como designers. E para que não haja confusão, a tradução de designer é muito mais projetista do que desenhista. Um designer gráfico por exemplo é um projetista gráfico.

Quem estuda esta área pensa como as pessoas podem organizar suas idéias e ações para projetar uma experiência melhor, seja na área de saúde (atendimento médico de qualidade), na criação de websites (serviços que realmente tornem a vida das pessoas mais rápida) e mais recentemente para educadores (tornando a experiência de ensino realmente efetiva).

A IDEO lançou em 2011 um livro online com um material maravilhoso sobre como educadores podem projetar uma experiência de ensino e aprendizado realmente significativa.

http://www.designthinkingforeducators.com/

Aproveitem.

Obs: Depois do carnaval trarei mais questões para discutirmos.