Eiffel?

Passamos no concurso para professor de algoritmos e estruturas de dados na Universidade Federal de Lavras, eu e o Montserrat. Tínhamos nos conhecido durante o concurso, conversado um pouco, e depois nos reencontramos para tomar posse no cargo. O Montserrat era formado em Química, com doutorado em Computação, e também havia sido aprovado. Nós dois ficaríamos responsáveis pelas disciplinas de algoritmos e estruturas de dados nos três primeiros semestres do curso.

Quando chegamos, já existia uma versão inicial da grade curricular. Eles já tinham realizado o primeiro vestibular e a turma inaugural havia concluído o primeiro semestre. Os professores de computação que já estavam na UFLA ministravam uma disciplina de programação e computação em geral, comum a todos os cursos. A documentação existente era bem inicial e ainda não havia uma definição detalhada do conteúdo de cada disciplina. Nossa primeira tarefa foi justamente trabalhar nessas definições e construir as ementas das disciplinas da nossa área.

Eu trouxe uma visão um pouco menos convencional para essa discussão. Na UFMG, eu tinha tido aula com o professor Bigonha, tanto em linguagens de programação quanto em orientação a objetos. Em especial nessa última disciplina, ele mencionava com frequência um pesquisador e professor chamado Bertrand Meyer, criador do paradigma de programação por contrato. O entusiasmo do Bigonha com o tema acabou me contaminando e, quando comecei a pensar no currículo de Lavras, lembrei dessas aulas. Fui conversar com ele na UFMG, e ele me indicou algumas referências para aprofundar no assunto. Entre elas, a linguagem Eiffel, definida pelo próprio Bertrand Meyer, que implementava orientação a objetos de forma pura e já trazia primitivas para programação por contrato.

O Bertrand Meyer também havia publicado livros sobre o ensino de programação, defendendo que a orientação a objetos fosse ensinada desde o início, sem passar primeiro por uma linguagem imperativa para depois “reprogramar” a forma de pensar do aluno. Achei essa ideia extremamente interessante e bastante moderna. Não era uma proposta guiada pelo mercado de trabalho, mas sabíamos que o mercado já caminhava claramente nessa direção. Linguagens importantes, como Java, seguiam esse paradigma. Defendi então, junto aos colegas de Lavras, que um curso novo e ainda pouco conhecido deveria apostar numa metodologia moderna e alinhada com o futuro. Isso significava ensinar orientação a objetos desde o primeiro semestre.

Quanto à escolha da linguagem, Java era a principal candidata. Ainda era relativamente nova, mas já havia se tornado mainstream. Na minha visão, porém, Java tinha dois problemas. O primeiro era a sintaxe, derivada do C, cheia de símbolos como chaves e parênteses, o que tornava a leitura difícil para iniciantes. O segundo era a necessidade de explicar logo na primeira aula o que significava algo como public static void main(String[] args). Eu achava que isso seria um pesadelo, com alunos começando a disciplina sem entender praticamente nada. Outras alternativas, como C++, tinham problemas semelhantes.

A linguagem Eiffel, por outro lado, tinha uma sintaxe inspirada no Pascal, muito mais legível para iniciantes. Além disso, era totalmente orientada a objetos, o que impedia o aluno de “escapar” do paradigma e escrever código imperativo disfarçado. Isso funcionaria como uma espécie de guardrail pedagógico. Somado a isso, a programação por contrato vinha embutida na linguagem, tornando natural a prática de programação defensiva. Na minha visão, isso era uma enorme vantagem para formar bons programadores. Com esse conjunto de argumentos, consegui convencer tanto o Montserrat quanto os outros colegas da UFLA, e definimos que o curso seria baseado em Eiffel e nos livros do Bertrand Meyer.

Com a linguagem e a metodologia definidas, acertamos também a divisão de responsabilidades. O Montserrat ficaria responsável pelo primeiro semestre, e eu pelo segundo. Para mim foi ótimo: eu nunca tive muita paciência com iniciantes, e o Montserrat se mostrou um excelente professor para introdução à computação. Em termos de conteúdo, propus uma estrutura bem próxima à que eu tinha vivido na UFMG: no segundo semestre, estruturas de dados básicas (filas, pilhas, árvores e afins) e, no terceiro semestre, tópicos um pouco mais avançados e alguns algoritmos mais interessantes.

Após os primeiros semestres, percebemos resultados interessantes. O primeiro foi um aluno que já tinha experiência com Delphi (uma linguagem também baseada em Pascal muito pupilar na época) e que veio nos dizer que, depois de estudar orientação a objetos e Eiffel, ele passou a entender alguns aspectos de Delphi que ele antes usava sem saber bem como funcionava. Um segundo aspecto era deixar claro aos alunos que o importante é saber bem os conceitos: linguagens são passageiras e quem sabe os conceitos consegue passar mais facilmente de uma pra outra quando necessário.

Enquanto isso, novos professores iam sendo contratados para o curso em diversas áreas, mas algumas disciplinas importantes do currículo ainda não tinham um responsável definido. Mas isso fica para o próximo capítulo.