Python na Educação
Postado por Osvaldo Santana
É bastante provável que as pessoas que costumam ler esse blog já conheçam as minhas opiniões sobre o uso de Python no ensino de programação de computadores para alunos do ensino superior, mas como provavelmente eu nunca comentei nada por aqui, resolvi escrever este artigo.
Atualmente estou fazendo faculdade e tudo indica que dessa vez eu consigo terminá-la (diferente das outras 2e+35 tentativas anteriores). É uma faculdade daquelas formam “tecnólogos” em um curto espaço de tempo e essa me garante o direito de fazer uma pós-graduação stricto ou latu senso. Ainda estou no primeiro semestre e em minhas aulas de algorítmos tenho implementado alguns programinhas em “Portugol”.
A minha opinião sobre o uso de “Portugol” no primeiro semestre de um curso voltado para o desenvolvimento de software é -0, ou seja, não acho bom nem ruim, mas se usassem uma linguagem ‘de verdade’ tornaria o aprendizado um pouco mais divertido.
Portugol é legal quando o professor não disponibiliza um interpretador real da linguagem pois faz com que o aluno exercite a leitura de código e o entendimento do mesmo (o velho conhecido Teste de Mesa). O problema é que 6 meses de programação sem observar o efeito real dos programas não me parece ser muito ‘estimulante’.
Mas o foco desse artigo não é muito no primeiro semestre e no portugol. O foco deste artigo é mais adiante no curso onde estudaremos Delphi (como linguagem OO e orientada a eventos), Java (porque o mercado exige) e alguma linguagem estruturada que provavelmente será Pascal ou C (já que vi compiladores das duas linguagens nos laboratórios).
Em um passado não muito distante eu achava que os alunos deveriam aprender apenas Python por ser uma linguagem que aglutina vários paradigmas de programação (estruturado, OO e funcional). Usando apenas Python o professor “perderia” tempo para explicar a sintaxe de uma linguagem apenas uma única vez e, com isso, sobraria mais tempo para ele explicar esses diversos paradigmas.
A minha opinião só mudou (um pouco) após uma conversa com o Gustavo Niemeyer, enquanto voltávamos da I PyCon Brasil, onde ele me disse: “Um programador precisa saber como um computador funciona, como se aloca memória, como os dados são representados pelas máquinas. E esse tipo de coisa ele aprende se tiver que programar em C”. Fui obrigado a concordar com ele e, hoje, no meu trabalho vejo que isso realmente é muito importante. Esse tipo de coisa também pode ser aprendido programando-se em Assembly, mas todos sabemos que os professores não costumam dispor te tempo infinito para ensinar os alunos então C seria um meio-termo mais prático para eles (até por ser uma linguagem multiplataforma e algumas universidades terem acesso à diversas plataformas).
Depois de ter discutido isso com ele eu acho que cheguei à uma opinião menos extremada onde Python seria ensinada nos primeiros semestres (iniciando preferencialmente pelo paradigma OO) e um período de um ou dois semestres no final do curso serviriam para um intensivão de linguagem C.
Eu acho que o paradigma OO deve ser o primeiro a ser ensinado porque ele é mapeado de maneira muito simples ao mundo real que é comum à todos os egressos de um curso de programação. As pessoas sabem o que é um carro, um avião, um barco quando chegam à faculdade mas muito poucos alunos sabem separar dados e informações das ações que agem sobre estes. Mas essa opinião ainda não está escrita em pedra na minha cabeça porque ainda não tive acesso a resultados de estudos que comprovam que é mais fácil ensinar o paradigma OO ao estruturado. Isso é apenas uma intuição que tenho por ter achado muito difícil a minha migração do paradigma estruturado para o paradigma OO. Talvez o caminho inverso seja mais tranquilo.
3 Responses to “Python na Educação”
Deixe um comentário







abril 17th, 2006 at 7:26 pm
Meu curso de computação ideal seria estruturado em duas linhas paralelas: a de algoritmos, usando Scheme desde o começo como no MIT (ou outra linguagem funcional, ou pelo menos alguma linguagem completamente não-Von Neumann); e a linha de máquinas Von Neumann, seguindo uma linha parecida com a da BCC/UFPR (Máquinas Programáveis, Circuitos Lógicos, Projetos Digitais, Arquitetura, Sistemas Operacionas, Compiladores). As duas linhas ficariam assim (o sistema não aceita a tag pre, desculpem a formatação:)
Algoritmos | Von Neumann
——————————————————————–
Conceitos úteis de matemática | Conceitos úteis de eletrônica
Programação básica (Scheme) | Circuitos (gates, somador etc.)
Algoritmos 1 | Projetos (desenhar ALU, processador)
Algoritmos 2 | Arquitetura (MIPS, Intel)
Algoritmos 3 | Sistemas operacionais e linguagem C
(com libc; talvez duas matérias)
Teoria dos grafos/da computação| Compiladores
Um semestre pra cada matéria e depois de três anos o aluno teria uma base forte de algoritmos, independente de computadores, _e_ uma boa noção bottom-up de como computadores funcionam.
Mas não me oponho totalmente a Python como primeira linguagem (sem dúvida é melhor do que C ou Java). Eu mesmo aprendi a programar em Python.
abril 18th, 2006 at 8:52 am
O erro provavelmente está no tipo de programas que os alunos são obrigados a implementar em C/C++.
C é a pior linguagem possível para tratamento de strings e arquivos-texto, e justamente são esses os objetos mais comuns de exercícios. Resultado: ninguém aprende de verdade.
Os exercícios deveriam ser dosados de acordo com o nível da linguagem e o tempo disponível. Digamos:
* em assembler, ensinar a simplesmente mostrar uma mensagem no console ou riscar um gráfico na tela. Já vai dar um bom trabalho e uma série de conceitos importantes, como a granularidade das instruções, a forma de se fazer a chamada de sistema, etc etc.
* Em C, tarefas de baixo nível como trabalhar um arquivo de som mapeado em memória (e.g. aplicar um filtro), implementar estruturas de dados. Isso exercita conceitos como ponteiros, diferenças entre little-endian e big-endian etc.
* Talvez alguma brincadeira com otimização de FFT etc. poderia ser feita em C + ASM inline
* Qualquer outra coisa, é Python. Ensinar a fazer um binding também seria uma boa.
Desta forma, nenhuma das 3 linguagens fica “solta no ar”.
abril 19th, 2006 at 8:07 am
Cara, sou um felizardo por cursar TI no ISTCC-P (http://www.lncc.br/ist/)!
Digo porque temos quatro disciplinas de programação:
A primeira, no primeiro período, tem o objetivo de ensinar algoritmo e programação estruturada. A disciplina é «Programação C».
A segunda, no segundo período, usa C e C++ para ensinar orientação a objetos: «Programação Orientada a Objetos».
As outras duas, também em períodos diretamente sucessivos, são «Programação Java» e «Programação Visual».
Cara, depois de dois períodos de C e C++, nem me importo de ver Java e programação visual. =)
[]’s