Por exemplo, o que diz essa função?
void saveAgendaAsCSV(List
String csv = new StringBuilder(MAX_CSV_SIZE);
for (user in agenda) {
csv.append(user.name);
csv.append(",");
csv.append(user.phone);
csv.append(",");
csv.append(user.email);
csv.append("\n");
}
return csv;
}
O novato diz que ela itera sobre os membros de uma lista de usuários e retorna um string com todos os dados dos usuários, um por linha. O programador experiente diz que ela converte uma lista de usuários ao formato CSV, para ser exportada. O grande programador sabe que essa função implementa a liberdade de dados que a aplicação permite. O novato sabe como a função trabalha. O experiente sabe o que a função faz. O grande sabe por que ela existe.
Todo código conta uma estória. O programador precisa saber ler além das simples linhas de código e entender a estória. Que estória esse trecho de código conta?
if (userId != 0) {
associarUsuarioAoGrupo(userId, groupId);
} else {
throw new RuntimeException("User id should not be zero.");
}
Desiste? A estória é a seguinte: um dia, houve um bug que levou horas para encontrar. O culpado era um id de usuário no banco de dados que valia zero, quando isso deveria ser impossível. Ao invés de descobrir como o problema aconteceu e corrigir o erro real, garantindo que isso nunca mais aconteça, o programador preferiu acreditar que o erro acontecerá de novo e está se defendendo para a próxima vez.
O que queremos estudar é a compreensão de textos, algo muito mais complexo do que sintaxe. Na escola estudamos o livro O Velho e o Mar, que pode ser apenas um conto de pescador, mas aprendemos que é uma alegoria que permite inúmeras interpretações sobre a condição humana. Assim precisa ser com a leitura de código - precisamos ensinar ao aluno a enxergar no código não só a estrutura de comandos, mas o projeto e arquitetura do sistema, assim como seus requisitos.
Só que implementar isso é bem mais difícil do que parece. Não acho que é suficiente uns alunos lerem o código dos outros. Como disse a Guta, eles precisam ler bons códigos. Mas de onde vamos tirar esses bons códigos?
Talvez eles venham da comunidade de código aberto, mas a verdade é que ainda não temos a resposta para essa pergunta. A comunidade acadêmica precisa coletar uma amostra significativa de bons sistemas para serem estudados - o equivalente a uma biblioteca de clássicos da literatura. Esses sistemas podem ser estudados por várias gerações de alunos e servirem como bons exemplos.
Vai dar um trabalhão, mas quanto mais esperarmos pra começar, mais vai demorar. Mãos à obra, então!
Sobre a função saveAgendaAsCSV, o compilador acusa erro de compilação :)
ResponderExcluirHa! Essa foi boa. Além de "o novato" e "o experiente" eu devia também ter perguntado "o que o compilador diz a respeito dessa função?" :-)
ResponderExcluirTem um erro realmente, tirando é claro as variáveis e classes não declaradas que presume-se estão declaradas externamente. Veja se você consegue achar...
A função é declarada retornando void e você retorna uma String em seu final. Era deste erro que estava me referindo :-)
ResponderExcluirÉ isso aí, falha nossa! E me desculpe, por "você" eu estava me referindo a "você, leitor" e não a "você, Alan" - afinal de contas foi você quem descobriu que tinha erro em primeiro lugar.
ResponderExcluirAhh, odeio if-elses.. pq nao:
ResponderExcluirPreconditions.checkArgument(userId > 0);
Preconditions.checkArgument(groupId > 0);
associarUsuario(userId, groupId);
Essa linha também dá erro de compilação:
ResponderExcluirString csv = new StringBuilder(MAX_CSV_SIZE);