Hoje sou um professor feliz, Python no ensino de programação

Terminei meu semestre aqui na FATEC São José dos Campos. A turma de introdução à programação acaba de bater mais um recorde: 92% de aprovação. Quando esta disciplina era dada com C ou Java, o índice era de apenas 30%. Eu recebi como homenagem na última prova, uma singela salva de palmas :-) Ainda me lembro, quando a disciplina foi dada com Java, de ver os alunos, todos, aparecerem na última prova com uma camiseta “Eu odeio Java”. Observo que o docente que deu a disciplina era muito didático e com experiência de mercado. Acredito que a primeira qualidade de um bom docente é querer o bem do aluno. E sou feliz quando 92% são aprovados.

Muitos me perguntam como eu uso Python para ter estes índices. Vou fazer um breve histórico. D. Knuth, numa entrevista na ACM disse: “the most common fault in CS classes: emphasize the rules of specific programming languages, instead of to emphasize the algorithms”. Em primeiro lugar, reparei que quando usávamos C ou Java, os alunos perdiam muito tempo com a sintaxe da linguagem, em vez de aprender o algoritmo. Eu descobri então que existe um estudo científico, publicado também na ACM, mostrando que a sintaxe da linguagem, sim, influencia no ensino de programação. “ Results show that many aspects of traditional C-style syntax, while it has influenced ageneration of programmers, exhibits problems in terms of usability for novices” é a principal conclusão de Stefik e Siebert. Python além de ter uma sintaxe simples, é muito popular, no ensino de programação, nas melhores universidades americanas. Parecia que a mudança indicava Python aqui na FATEC. Me falaram de Portugol e VisualAlg. O que escolher?

Decidi conhecer quem são as pessoas que programam em Python, aqui no Brasil. Procurei no Google e vi um encontro em São Paulo. Perguntei se eu podia aparecer, claro, responderam. E fui. Estavam o Luciano Ramalho, Bruno Gola, Pedro Valente e vários outros da comunidade. Eu não sabia nada de Python. No entanto tiraram inúmeras dúvidas minhas. Percebi depois que vários tinham ido para contribuir num projeto de Dados Abertos, do Pedro Valente, e haviam deixado de lado o projeto inicial de programar, para tirar dúvidas e conversar com o ilustre desconhecido que aqui vos fala. Descobri depois que o Luciano era uma referência na linguagem e lá estava como um a mais. Pensei com meus botões, que meus alunos poderiam ter ajuda desta comunidade, nas suas dúvidas, pois seriam iniciantes como eu. Depois confirmei esse fato observando as postagens na lista de discussão, que hoje ainda existe.

E o Portugol e VisualAlg? Por uma coincidência enorme, naquela semana entraram em contato comigo, de uma fábrica de software na minha cidade, pedindo 20 alunos para trabalhar com Python! Eu não conhecia quase nada de Python, pesquisei e descobri que haviam muitas empresas grandes como Disney e Google usando Python. E jogos como EveOnline ou Call of Duty. Eu acredito que os alunos se motivam mais com linguagens reais, usadas no mercado. Aqui na minha cidade, a principal linguagem para engenharia aeronáutica, na EMBRAER, é Python.

Detalhamento: e como são as aulas? Tenho o conteúdo todo no Python para Zumbis, de tal forma que o aluno vai às aulas mais para fazer projetos e exercícios, também no PPZ eu deixo toda a resolução das listas, e se alguém for reprovado, pode fazer o curso nas férias e só fazer as avaliações. É um princípio similar aos das aulas invertidas. Eu tenho quinze listas de exercícios, os alunos basicamente estudam fazendo as listas. Passo três pequenos projetos, sendo o último sempre de raspagem de dados. As listas podem ser feitas em grupo, projetos não. Como vê dou muito trabalho prático para meus alunos, parafraseando Einstein: “Programar é como andar de bicicleta. para ter equilíbrio, você tem que se manter em movimento”.

Os alunos adoram três coisas que adoto: Coding Dojos, Listas com testes embutidos e o Big Brother
 1) Eu escolho aleatoriamente dois alunos, piloto e co-piloto para codificarem um desafio, que já tem vários testes, atacando os testes aos poucos. Código projetado para os outros aprenderem. Alguns viciam.
 2) A partir da sexta lista sempre incluo a bateria de testes que valida a resolução de cada exercício proposto. Desta forma o aluno já sabe se sua solução é correta, sem ter que enviar ao professor e esperar a correção. 
 3) E uma sugestão do Rodrigo Senra, numa Python Brasil, o Big Brother. Após a primeira prova, duas classes de alunos costumam se desmotivar. O aluno que foi muito mal, óbvio, e também os alunos que tiraram notas altas, pois a disciplina está sendo pouco desafiadora. Então o bom aluno pode “adotar” um com dificuldade. Na segunda prova, o aluno que ajudou, além da nota dele, ganha um acréscimo de 1/4 do aumento obtido com o ajudado. Adicionalmente, algumas vezes, costumo deixar brindes (adesivos, camisetas, etc) que são ganhos pelos que obtiverem as maiores diferenças. É engraçado, quando divulgo o resultado da primeira nota, ver alunos, que foram muito mal, sendo “assediados” pelos melhores: posso ser seu Big Brother?

Onde Python foi um diferencial
1) Nas aulas consigo focar no algoritmo. Em C um aluno imprimiu 1/2 e queria saber o motivo pelo qual dava zero! Toda uma explicação é necessária. Para trabalhar com Java o aluno é obrigado a ter noções de OOP até para dar um Hello World. Além disso meus slides eram extremamente sucintos e claros. O mesmo exercício, que em Java ou C, consumia 3 slides, em Python eu usava somente um. E o principal, o aluno entendia a lógica que estava atrás, o que muitas vezes não acontecia com Java ou C. 
2) Python possui bibliotecas para tudo. Se eu quero fazer um exercício de motivação comparando o PIB do Uruguai, Brasil e Argentina, existe uma API do Banco Mundial em Python. Eu listei os jogos online da Copa do Mundo, com apenas seis linhas. Quando dei uma palestra na UFSCar um assistente me confidenciou que fez o mesmo em C++ com 300 linhas. Se você quer focar em algoritmos e ao mesmo tempo motivar alunos, bibliotecas como BeautifulSoup são muito úteis e ajudam a ensinar os alunos a exercer a cidadania, com o manuseio de Dados Públicos. Com pouca programação o aluno consegue exercer a cidadania e com resultados de impacto social real. 
3) Pelo menos nos grupos que frequento, observo uma comunidade receptiva para iniciantes. Eu acompanhei meus alunos postando perguntas e vi grandes nomes da comunidade Python respondendo, como o Luciano Ramalho e João Bueno. Python também tem uma comunidade onde diversidade é algo essencial. Meus alunos eram expostos a exemplos de Oceanógrafos, Advogados, Jornalistas, formados em Biblioteconomia, etc, não era só desenvolvimento Web. Existem grupos de apoio específico para mulheres como as PyLadies e Django Girls. Algumas das minhas alunas se envolveram com essas iniciativas e depois me disseram que foi essencial para terem seguindo na área.

Finalizando alguns conselhos: 
 1) Participe de eventos de mercado, dê cursos in company. Só o fatorial já não é suficiente para motivar o aluno de hoje. Quando eu digo, que um jornalista da Folha de SP (dei um curso lá), raspou as 380 súmulas do Campeonato Brasileiro, converteu os pdf’s e fez uma análise de dados, o aluno sente que é algo que possui um impacto real. Eu dou um projeto de raspagem e neste semestre dois alunos listaram todos os salários da USP acima do teto. Foi também em eventos que aprendi como fazer o cálculo dos gastos da Copa do Mundo, ou acessar dados do Inep para descobrir quantas escolas existem, em funcionamento, sem água, luz e esgoto, no Brasil. O código é simples, mas o resultado alcançado é mais motivador.
2) Não tenha medo de exigir os alunos. Eles esperam ser exigidos. Eu dou na prova questões como: decidir se duas strings são anagramas, contar quantos zeros há no final de um inteiro positivo ou fazer a derivada de um polinômio. Porém não ferre seus alunos achando que isso é sinal de qualidade. Um número alto de reprovações é indício que há um problema educacional, não motivo de vanglória. Algumas pessoas possuem uma facilidade inata para programar, em qualquer linguagem. Se você é assim pense que o mundo não é igual a você. Programar é difícil para a maioria das pessoas, tenha isso em mente ao preparar as aulas.
 3) Procure seguir a ementa. Não é parte do curso preparar os alunos para a Maratona de Programação (ICPC), por melhor que ela seja. Alguns cursos usam introdução à programação com C, para que tenham uma base melhor para SO ou Arquitetura. Depois que o aluno aprender bem lógica de programação, você pode dar em outro momento C para estas finalidades. Na FATEC, meus alunos aprendem C (e Java) em outras disciplinas. Além de que já há caso onde usam Rust para SO. Programar é difícil por si só, um motivo em focar na ementa.
 4) Tenha empatia para com seus alunos. O aluno sente quando o professor não aposta nele. Tenha paciência, os alunos podem mais coisas e melhores do que imaginamos. Eu tenho um ex-aluno na Google e outro no Facebook. Seja simples, não fique isolado numa torre de marfim. No início do curso, eu marco uma pizzada com meus alunos, para entender melhor o contexto em que vivem. Recentemente estourei meu ombro direito, então peço para alunos me ajudarem a fazer chamada. Ser vulnerável quebra o gelo, aproxima.

Futuro: escreverei com calma as seguintes experiências:
1) Ensino de Estrutura de Dados com Python. Tenho uma taxa de 90% de aprovação nos últimos anos. Já dei palestras sobre isso no Japão, Espanha, Alemanha, Estados Unidos e Itália.
2) Python para Jornalistas. Eu comecei com um curso rápido no Congresso da Abraji, depois fui convidado para o Curso Abril de Jornalismo, recentemente dei um curso na Folha de SP e brevemente darei um minicurso no LabJor da Unicamp.
3) Programação para crianças. Tive a felicidade de ajudar o CEDET (Centro de Desenvolvimento do Talento) por 3 anos. Ultimamente tenho testado o Processing Python Mode.

Meus contatos: https://about.me/fmasanori