CalicoUFSC / ufsc-cco-reformulado

Creative Commons Zero v1.0 Universal
31 stars 5 forks source link

Remover matérias de Programação Orientada a Objetos #2

Open ranisalt opened 9 years ago

ranisalt commented 9 years ago

Abstraindo, à nivel de curso e ciência, aprender orientação a objetos separadamente não faz sentido. Veja esta imagem extraída da Wikipédia: Lista de paradigmas Existe uma infinidade de paradigmas, cada um solucionando um problema específico. Por que é dedicado um ano aprendendo apenas um deles e nem mesmo a (grande) maioria dos outros é mencionado durante o curso? Afinal, cientistas da computação são solucionadores de problemas e devem aprender múltiplos paradigmas, e não apenas um escolhido arbitrariamente.

Havendo quorum suficiente (comente +1), aplicarei este merge request na linha principal. Sugestões são sempre bem vindas.

ranisalt commented 9 years ago

Nota: o conteúdo desta matéria não necessariamente será excluído do curso, mas sim será transformado em optativo.

Ionneto commented 9 years ago

+1 Creio que a remoção dessa matéria da nossa "linha principal" abre o espaço necessário e ideal para termos as tão necessárias matérias de algoritmos nas fases iniciais. Mais razão ainda para exclui-la, ou torna-la opcional se for o caso.

lucasPereira commented 9 years ago

Uma coisa é querer adicionar uma matéria de algoritmos (considerando que os alunos realmente tem uma base fraca nessa área). Outra coisa é remover uma das matérias mais importantes dentre aquelas que já existem nas primeiras fases. Ai você remove programação orientada a objetos e vai pegar um cara na quinta fase que sabe fazer muito bem um algoritmo mas que vai fazer um código espaguete igual faziam a 30 anos atrás. Ai pega e coloca esse mesmo cara pra trabalhar em um projeto em equipe pra ver o que acontece.

Foi falado ali das disciplinas de engenharia de software e nisso eu concordo. Agora, programação orientada a objetos é uma coisa totalmente diferente. Programação é com o que boa parte que se forma no curso vai trabalhar.

Sempre lembro de quando fiz SO 2 com o professor Guto. Essa é uma das matérias onde boa parte das coisas precisam ser programadas em baixo nível. Lembro de varias aulas onde o professor criticava a falta de organização e de legibilidade dos códigos. Criticava ainda a falta de utilização da orientação a objetos. Mais do que isso, ele mostrava dois códigos diferentes que geravam exatamente o mesmo assembly. A diferença era que um código podia ser facilmente compreendido e o outro, ao menos que o cara seja o Knuth, era uma merda pra ler.

Ninguém vai aprender a fazer um código descente com uma matéria de algorítimos. Da mesma forma, ninguém vai aprender a fazer um algorítimo com uma boa performance na matéria de programação orientada a objetos. Uma coisa não exclui a outra. Achar que essas matérias são mutualmente exclusivas no inicio curso é querer pender muito ou para ou lado ou para outro.

ranisalt commented 9 years ago

@lucasPereira desculpe se dei a entender ou realmente escrevi que o conteúdo seria removido, não é a ideia. A ideia é apenas retirar ela como matéria específica, visto que orientação a objetos é apenas um dos paradigmas que deveríamos aprender, mas deveria ser relocado para outro momento no curso.

Aliás, acho que sua visão de orientação a objetos é um pouco fora do real. Orientação a objetos não é o que aprendemos na ementa: classes e objetos com métodos não são exclusividade de OO, podemos aprender essa parte facilmente, por exemplo, implementando estruturas de dados; polimorfismo também não, visto que linguagens funcionais usam muito isso; muitas vezes aprendemos a fazer código na base da gambiarra nessas matérias (extraoficialmente, hehe).

Acredito que pra saber realmente o que é usar objetos (e outros paradigmas!!!), primeiro precisamos de uma base sólida de como programar de verdade. Construindo essa base sólida, e tendo alunos que sabem quando usar ponteiro e quando usar referência, ou como saber se o seu algoritmo realmente faz o esperado, aí sim podemos partir pra técnicas mais avançadas de organização de código.

Claro que esta é minha visão, um pouco afetada por eu já ter feito um curso técnico antes e ter estudado bastante programação; entrei com a base necessária para entender corretamente OO e vi colegas de turma terem muita dificuldade por não ter essa base.

Obrigado pelos comentários e faça suas sugestões no repositório também :)

Ionneto commented 9 years ago

Sexta feira passada tivemos uma reunião ente o Calico, o PET e mais alguns convidados para debatermos esse assunto da mudança. A ideia que surgiu sobre POO nela foi de retirar isso do começo, onde o aluno não tem como entende-la completamente, ou pelo menos não tão facilmente quanto depois, e coloca-la mais a frente.

Não sei se concordam, mas além disso, creio que uma só matéria de POO, com seis créditos e uma ementa totalmente nova, seria o ideal

lucasPereira commented 9 years ago

Acho interesante a ideia do @Ionneto sobre a reformulação da ementa da matéria de POO. Vejo que a matéria de POO, como é dada hoje, funciona meramente como uma introdução a programação e pouco tem a ver com o paradigma.

@ranisalt valeu pelo feedback. Entendi o seu ponto, embora ainda discorde em alguns aspectos :-) Só pra esclarecer a minha preocupação, o que temo é pela redução do número de matérias de programação (e pelo que entendi do seu último comentário acho que esse não é o objetivo) e não pela redução do número de matérias de POO em si. Acho que a ideia de criar uma nova e única matéria de POO (como o @Ionneto falou) é interessante desde que o lugar vago por POO II seja substituido por alguma outra matéria de programação.

E sim, tão logo que tenha mais tempo farei comentários no repositório também. Abraço;

ranisalt commented 9 years ago

Claro, a ideia é sim ter mais programação, mas programação de mais alta qualidade também. Não só aprender a escrever código, mas também otimizar esse código, saber se ele realmente está correto, saber sua complexidade e muitas outras coisas importantes que quase não são citadas.