Rocksmith: Como Aprender A Tocar Guitarra Jogando Videogame

O que a sua namorada diria se você deixar de sair com ela para ficar jogando videogame em uma noite de sexta-feira? Agora, o que ela falaria se você tocasse na guitarra um cover daquela música que ela adora? O novo jogo da Ubisoft, o Rocksmith, tenta conciliar os dois mundos. Basicamente, ele é um jogo de videogame feito para te ensinar a tocar músicas com uma guitarra de verdade.

O jogo é bem no estilo de Guitar Hero, mas usando uma guitarra como controle e baseado em uma temática diferente! O jogo não tem um modo de história e nem um personagem bonitinho. A principal interação do jogo é você aprender a tocar novas músicas para poder fazer shows em palcos cada vez mais maneiros! Além disso, existem mini games e exercícios específicos para você aperfeiçoar técnicas para tocar guitarra. Vejam o vídeo do gameplay para sentirem melhor o que ele é:





O mais interessante do jogo é que ele traz o conceito de gamificação para o ensino de guitarra. Mas não se limita a só dar achievements para o jogador. O jogo se destaca em dois pontos que estão diretamente associados à questão do feedback, essencial para o aprendizado.

O primeiro ponto é que o feedback é em tempo real! Não sou muito fã do Guitar Hero e um dos motivos é porque não parece que você está tocando a música. Quando você erra, a guitarra simplesmente para de tocar e você não consegue saber o que você fez. No Rocksmith, você ouve quando está fazendo merda algo errado. Ou seja, o jogo não esconde o seu erro e o mostra para você, fazendo com que você sinta o impacto que ele causa.

O outro ponto é que o jogo é inteligente e respeita o tempo de aprendizado do jogador. Não existem opções de pré-configuradas de dificuldade, o clássico trio easy, medium e hard. Então, no Rocksmith, não é você que deve se adequar à dificuldade, mas sim o contrário – a complexidade do jogo se encaixa na sua experiência com o instrumento. Ao longo do tempo, a dificuldade das músicas vão aumentando respeitando a sua curva de aprendizado.

Por esses dois pontos, acho que essa abordagem vai além da visão comum de gamificação. Nâo enxergo essa prática como simplesmente dar bônus para o jogador: assim você o trata como um bebê. Colocar a gamificação no ensino não é uma questão de recompensas, mas sim de acompanhamento – enxergar os passos do aluno e criar um ambiente em que ele possa avançar sem que ele encare isso como uma tarefa.

Se você puder viver essa experiência, vale muito à pena. Ah, cabe dizer também que é muito divertido jogar o multiplayer com 2 guitarras! Compre o jogo, faça o seu show e dê a sua opinião sobre o assunto aqui nos comentários!

PS.: Para saber mais sobre gamificação vale a pena dar uma olhada nesses slides.

Profile de List Comprehensions Em Python

Em desenvolvimento de software sempre é comum ouvirmos aquela pergunta “E esse código é performático?”. Apesar de nem sempre ser o mais importante a se saber, essa pergunta é bem frequente e eu mesmo me peguei com essa indagação com as list comprehensions do Python. Então, resolvi fazer um profile para tirar as minhas dúvidas.

As dúvidas surgiram durante o curso Python Para Quem Sabe Python do Luciano Ramalho. O curso é excelente e estou vendo vários conceitos mais internos do Python em que eu nunca tive a oportunidade de me aprofundar. Durante a primeira aula, foi mostrado a list comprehension e a comparação com um laço for normal focando na legibilidade do código. Depois disso, perguntei sobre a performance e o pessoal deu a ideia implementarmos um profile para medirmos essa questão e experimentarmos nós mesmos esse processo.

O João Dubas, que também está no curso, começou com uma abordagem em que me baseei e fiz um fork. Na minha medição, quis comparar alguns cenários, sendo eles:

  1. Somente o filter de uma lista;
  2. Somente o map para uma lista;
  3. Filter e map para uma lista;

Para cada um desses cenários existiam 3 implementações – uma com o laço for normal, uma com list comprehension e outra utilizando as funções map e filter do Python. A ideia desse post é compartilhar, sem nenhuma pretensão científica, os resultados que obtive. Então, segue o output:

***** FILTER PROFILING *****
                              fn min        mean       max      
        filter_with_normal_for() 0.35435510 0.35819454 0.36282516
filter_with_list_comprehension() 0.30340981 0.31135285 0.32254100
       filter_with_filter_func() 0.21948600 0.22835863 0.26977205

***** MAP PROFILING *****
                           fn min        mean       max      
        map_with_normal_for() 0.36617208 0.37257178 0.39629292
map_with_list_comprehension() 0.29344010 0.29665232 0.30447888
          map_with_map_func() 0.28689599 0.29024918 0.30203104

***** MAP + FILTER PROFILING *****
                                 fn min        mean       max      
        mapfilter_with_normal_for() 0.46366715 0.47172487 0.48409891
mapfilter_with_list_comprehension() 0.42643499 0.42990112 0.43452096
    mapfilter_with_mapfilter_func() 0.36422396 0.36758418 0.38192511

Se os cenários que eu escrevi estiverem corretos e não ter comido nenhuma mosca com algum detalhe, em todos os cenários as list comprehension se mostraram a segunda melhor solução, perdendo para a utilização das funções bultins do Python. No segundo cenário, ela ficou bem próxima da implementação utilizando o map. Isso dá para supor que a diferença de performance ficou a cargo do filter e não no map. Em todos os casos a solução normal utilizando o laço for é a menos performática.

Como disse, essa medição não teve nenhum pretexto científico e foi apenas uma maneira divertida de fomentar uma discussão muito interessante na lista da turma do PPQSP sobre o valor da performance do código em detrimento da sua legibilidade. Eu também sou da escola do Luciano Ramalho ao gostar das list comprehensions por elas deixarem claras quais as intenções do código. Mas também compreendo que podem existir casos em que esse tipo de preocupação com performance existem, apesar de não achá-los comuns. Portanto, primeiro escrevo o código bonito para depois otimizá-lo se necessário!

O código que eu fiz para fazer essa medição está nesse repositório do Github e você pode executar o script na sua máquina para ver quais os seus resultados executando os comandos abaixo:

$ wget https://raw.github.com/berinhard/ppqsp/master/class_0/for_profiler.py
$ python for_profiler.py

Espero que vocês se divirtam fazendo as medições e sintam-se a vontade para compartilhar os resultados aqui nos comentários!

Agradecimentos do Projeto Final

Como alguns sabem no início de dezembro vou fazer a defesa do meu projeto final. O nome é Coding Dojo: Novas Possibilidades para o Ensino de Programação e já falei dele aqui quando pedi para o pessoal colaborar com a pesquisa que fiz. Estou terminando de revisá-lo e formatá-lo agora para entregá-lo aos professores. Assim que terminar, vou compartilhar ele com todos aqui neste espaço, mas tem uma parte que eu gostaria de compartilhar desde já.

Para mim aquele papel com palavras impressas ganha valor quando penso nas pessoas e nas histórias que tive com elas e que moldaram quem sou para escrever o que escrevi. Então, sem fazer média, considero a parte dos agradecimentos como a parte mais importante e é exatamente ela que quero compartilhar aqui:

Agradecimentos

Gostaria de agradecer:

A minha avó, Dona Adélia, por me ajudar durante esses 5

morando sozinho me alimentando com os seus deliciosos quitutes congelados;

 

Ao meu pai, Henrique, por ser um exemplo e, acima de tudo, um ídolo para mim;

 

A minha mãe, Marcia, por sempre se preocupar, me aconselhar e

me dar tudo o que precisei para me tornar o profissional que sou hoje;

 

Aos meus irmãos, Eduardo e Thiago, pelos anos juntos,

históras dividas no apartamento e exemplo de união;

 

A minha namorada, Paula, que ainda que tão longe

se manteve perto sempre me ajudando a olhar para frente;

 

A toda a minha família sempre presente na minha vida;

 

Aos amigos da faculdade, especialmente o João Luis e o Gabriel,

irmãos para mim, por esses anos em que, juntos, dividimos sucessos e fracassos;

 

Aos amigos de Friburgo, especialmente o Wanderson, o Fernando e

o Luis Felipe, por todas histórias que tivemos

e por, mesmo depois de sair da cidade, continuarmos juntos;

 

Aos amigos Flávio, Thiago, Henrique e Luciano, companheiros

na Dekode e que deram a motivação final para esse projeto;

 

Aos novos amigos Gerardo, Elias, João Felipe e Luisão, que acolheram

o Coding Dojo da UFF e hoje seguem com ele;

 

A todas as pessoas que já participaram do Coding Dojo da UFF,

este que por várias vezes enxerguei como um filho;

 

A todos os que já estiveram no Pós-Dojo da UFF pelas

excelentes conversas e noites divertidas;

 

As comunidades do Rio de Janeiro e, principalmente,

à DojoRio porque se não fossem vocês nada do que escrevi existiria;

 

Por último, ao Álvaro, ao Henrique e ao Vinícius. Obrigado pelas pílulas vermelhas.

 

Novamente, muito obrigado à todos!

Apresentando o django-testtools

Na PythonBrasil[7] apresentei a palestra Testando Aplicações Django: Quando, Como e Onde?. Após a palestra, me comprometi a compartilhar mais as minhas visões sobre testes e os códigos que venho utilizado para me auxilar. Então, para dar início, quero compartilhar com vocês o django-testtools.

O django-testtols é uma pequena biblioteca Python que criamos na Dekode com o intuito de extender a própria infraestrutura de testes do Django respeitando o seu design original.

Nas listas que participo, este assunto ainda não é levantado com muita frequência. A intenção de divulgar este projeto é promover a discussão e troca de experiências sobre testes de aplicações Django na comunidade. Assim poderemos documentar estratégias e reaproveitar os códigos com o que formos aprendendo.

O fato do django-testtools respeitar a estrutura e a maneira de se escrever testes no Django e ser apenas uma extensão também são fatores importantes para poder guiar a discussão. Gostaria de discutir mais os significados, organização, intenção e valor dos testes do que frameworks e DSLs que não respeitam a verdade material da linguagem. Acredito que o unittest e o Django já fornecem ferramentas úteis para escrevermos testes e desenvolvermos respeitando o TDD. Então, o principal a ser discutido é como fazê-lo de uma maneira sustentável.

Vou continuar a abordar o tema nesse espaço e gostaria de ouvir o que você pensa sobre o assunto. Para ficar por dentro das nossas próximas publicações, mantenha contato pelo Github, Twitter ou Facebook.

Até a próxima!

Participe da PythonBrasil[7] – O 7º Encontro Brasileiro da Comunidade Python

Daqui a exatas duas semanas acontecerá a PythonBrasil[7]! Esse ano o evento será em São Paulo e promete ser muito bom. Com mais de 80 palestras, treinamentos, sprints de desenvolvimento projetos Python, Open Spaces e Lightning Talks, o evento vai estar recheado de muita informação sobre desenvolvimento, sobre a comunidade e sobre o mundo do Python.

Este ano, o evento contará com algumas presenças internacionais de peso no mundo Python como Jim Fulton, Steve Holden, Alan Runyan e muitos outros. Além desses também teremos importantes nomes do cenário nacional participando do evento com palestras e treinamentos.

Participei da PythonBrasil[6] no ano passado, em Curitiba, e posso dizer que foi uma excelente experiência. Estar em contato com pessoas que vivem Python seja no trabalho ou seja pelo prazer de programar na linguagem que ama resulta em uma grande troca de conhecimento e você pode sair aprendendo muito. Seja você um ninja na linguagem ou apenas um iniciante.

Para finalizar, este ano, além de participar como ouvinte, tive a honra de ter uma submissão palestra aceita. Na palestra “Testando Aplicações Django: Quando, Como e Onde”, pretendo abordar alguns padrões de escrita de código de teste que aprendi durante meu início no mundo Django na Myfreecomm e torna-se mais sólido agora trabalhando na Dekode. Além disso, também pretendo falar de algumas ferramentas e processos que podem ajudar na escrita dos seus testes.

Então não perca tempo e inscreva-se logo no evento! Nos vemos lá!

←Older