Quase que dava um brinde da Páscoa!

March 4, 2008

Mais um episódio caricato de quem anda no ensino. Esta aconteceu numa discussão final dos trabalhos práticos de uma disciplina.

Para melhor enquadrar o tema há que esclarecer o processo de avaliação nas disciplinas da secção de programação do DEETC do ISEL. De modo resumido a avaliação final tem 2 componentes: uma teórica e outra prática. O aluno terá que ter nota mínima de 9,5 nas 2 componentes para ser aprovado.

A nota da componente teórica é obtida num teste com duas datas possíveis. A prática inclui um ou vários projectos/exercícios e a sua nota é apurada após uma discussão final, que costuma ter uma duração entre 1 ou 3 horas, isto dependendo da disciplina e do professor. Esta discussão só se realiza para os alunos que tenham aproveitamento no teste.

Numa das disciplinas que leccionei neste semestre estabeleci que a componente prática seria constituída por 3 séries de exercícios e um projecto final. Este projecto teria maior peso que as 3 séries no cálculo da nota da componente prática.

Dos 20 grupos que passaram no teste, 4 não realizaram o projecto final o que condicionou fortemente a nota final. Por isso dei a opção a estes grupos de concluírem o projecto final no prazo de 1 semana, dando claro o devido desconto pelo atraso registado, mas não afectando tanto a nota final como seria, caso não tivessem entregue o projecto.

3 grupos aceitaram e 1 optou por não fazer esse projecto. É sobre este último que passo a relatar o episódio da discussão. Neste caso a discussão realizou-se com o único elemento que passou no teste com nota de 14,9.

Iniciada a discussão começo por confrontar o aluno que não tendo ele entregue o projecto, a sua nota na componente prática estaria muito comprometida, a não ser que a discussão superasse as expectativas. Até porque mesmo as 3 séries estavam bastante fracas e incompletas. A isto o aluno responde-me que até nem vinha muito bem preparado, porque não tinha tido tempo de rever a matéria/séries de exercícios. O meu espanto :o, mas já vou estando habituado a certas reacções dos alunos.

A minha resposta foi: “Bem isso quer dizer, que se calhar ainda vamos a ver se consegues passar nesta discussão.” Digo isto mais por contra resposta, do que propriamente estivesse eu a pensar que um aluno com 15 no teste fosse reprovar numa discussão.

Começo então a folhear a 1ª série e a comentar o facto de todas as respostas estarem muito incompletas. O aluno diz-me que da 3ª série responderam a tudo e então eu salto para lá.

À 1ª pergunta sobre o padrão Dispose estava escrito na 3ª série, passo a transcrever: “Uma vez que o objectivo é nós termos a possibilidade de decidir quando os recursos são libertados faz sentido um tipo implementar o padrão Dispose e redefinir (desactivar) o método finalize; pois o finalize é accionado num momento desconhecido, o que pode comprometer o sistema por acumular recursos inactivos em memória.”
Começa a discussão (e isto agora é só para quem conhece esta área):
Eu: “Então o que é quer dizer com ‘redefinir (desactivar) o método finalize’”?
Aluno: “Então…. hmmm… coloco o “booleano” a falso”
Eu: “Que booleano?”
Aluno: “Então …. há um booleano que passa a falso.”
Eu: “Mas qual booleano? Uma variável? Um campo? Detalhe lá isso…”
Aluno: “Sim isso.”
Eu: “Isso o quê?”
Aluno: não diz nada…
Eu: depois de muito insistir acabo eu por lhe dizer o que ele havia de responder.

Continuando no mesmo tema a ver se o aluno sabia alguma coisa disto.
Eu: “Mas sabe que tem uma outra forma de impedir a execução do Finalize?”
Aluno: Encolhe os ombros e “não estou a ver”.
Eu: “GC.SuppressFinalize(Object obj). Lembra-se de falarmos nisto?”
Aluno: “Tenho uma ideia…”
Eu: “E lembra-se de qual o efeito da execução deste método?”
Aluno: “Não estou bem a ver…”
Eu: “Então vamos por outro caminho. Como é que o ambiente virtual (AVE) trata as instâncias de tipos que redefinem o método Finalize?”
Aluno: “Executa o Finalize para limpá-los da memória.”
Eu: “Isso não é bem assim, mas também não era isso que estava a perguntar-lhe. O que eu queria dizer era: quando o ambiente virtual (AVE) cria uma instância de um tipo que tem o método Finalize redefinido, o que é que ele faz com essa instância?”
Aluno: “Cria um objecto.”
Eu: “Objecto ou instancia é o mesmo. O que é que o AVE faz com esse objecto se o seu tipo tiver o Finalize redefinido?”
Aluno: “Chama o Finalize para limpá-lo.”
Eu: “Eu estou a falar do momento em que é criada a instância, quando é feito new. Acha que faz sentido limpá-la nesse momento?”
Aluno: “Pois… não.”
Eu: “Então o que é que acontece para uma instância de um tipo que tem o Finalize redefinido?”
Aluno: “Não estou a ver.”
Eu: “A finalization list e a FReachable list, não lhe dizem nada?”
Aluno: Acena-me que não com a cabeça.

Começo a ficar preocupado. Mas como é que um aluno tira 15 no teste e não me sabe responder a estas questões tão simples. É verdade que não coloquei nenhuma questão deste tema no teste, mas coloquei outras bem mais difíceis. Que coincidência ir logo pegar no tema que o aluno não conhece. Bem, vamos mas é passar a outra série de exercícios.

Pego na 2ª série e numas das questões mais triviais: implementação da interface ICloneable. A questão dizia:
«
Indique o problema do código seguinte. Faça as correcções que julgar mais convenientes.
struct AValueT : ICloneable {
  public AValueT Clone() {
    return (AValueT) MemberwiseClone();
  }
}
»
Na resposta à questão o aluno começava por definir a sua própria classe ICloneable, ao que eu pergunto:
“Porque é que definiram esta interface ICloneable?”
Aluno: “Então para corrigir o erro de compilação.”
Eu: “Mas não existe já uma interface ICloneable na Framework .net?”
Aluno: “Hmmmm … não sei… ele (compilador) não a encontrava.”
Eu: “Talvez porque faltava using System?”
Aluno: “Pois…”

Entretanto reparo que ainda assim a definição da interface ICloneable do aluno tinha um método clone com tipo de retorno void.
Eu: “Além disso. Ainda que não existisse essa interface na framework .net, tu defines um método clone com tipo de retorno void?”
Aluno: encolhe os ombros como sem perceber a questão…
Eu: “Então qual é o comportamento esperado do método clone?”
Aluno: “Criar uma cópia do objecto.”
Eu: “Então e achas normal esse método ter void como tipo de retorno?”
Aluno: encolhe os ombros …
Eu: “Isto não bate certo. Como é que tu tiveste 15 no teste? Eu vou mas é fazer-te novamente aqui o teste presencialmente. Como é que alguém que tem 15 não sabe estas questões. Isto são perguntas básicas.”

Ao mesmo tempo pensava: “Este gajo copiou no teste ou arranjou alguma marosca. É impossível ter tido 15.” Pego no envelope dos testes à procura do teste do aluno. Reparo que o aluno começa então a ficar preocupado.

Quando finalmente encontro o teste, olho para a soma dos parciais e leio 3,5. Três vírgula cinco. 3,5. A nota do aluno no teste tinha sido 3,5, que eu tinha-me enganado a copiar para a pauta Excel tendo escrito 13,5 e que com um factor extra deu 14,9.

Eu: “AAAAAAaaaaaaaaa bom. Isto assim já faz sentido. Afinal reprovaste no teste.”
Aluno: Olha para mim com um ar um tanto ou quanto alucinado como que sem perceber o que se estava a passar.
Eu: “Bem, a única diferença é que em vez de te reprovar aqui na discussão tu já estavas reprovado. Mesmo que eu assuma o erro e te dê o 15 no teste tu não tens positiva nesta discussão, pelo que ficavas na mesma reprovado.”

Enquanto esclarecemos o assunto e vou folheando o teste vejo que somando o total das questões respondidas pelo aluno, dava 10 valores.
Eu: “E tu não achaste estranho tendo só respondido a 10 valores teres 15?”
Aluno: “Como às vezes os professores dão uma compensação…”
Eu: “Bolas… e mesmo assim não estranhaste?”
Aluno: Encolhe os ombros…
Eu: “Lamento, mas realmente tu não sabes mesmo nada disto. Tinhas que estudar mesmo muito para conseguir recuperar tudo o que não sabes. Repara que eu nem se quer cheguei às questões difíceis!”
Aluno: “Pois… Bem, então vou tentar em época especial.”
Eu: “Sim se és trabalhador estudante penso que podes fazer época especial.”
Aluno: “Então até à próxima.”
Eu: “Adeus….”

Ainda bem que existem discussões. Não houvesse uma discussão e este aluno teria levado um brinde da Páscoa.