nunojob:~ dscape/08$ echo The Black Sheep

Qual deve ser a linguagem de programação que serve de introdução ao seu curso superior de informática? Para mim a resposta não podia ser mais evidente: Haskell.

Pelo que sei no ISEP a primeira coisa que se aprende é Java, o que acho chocante. Afinal o paradigma de programação orientada aos objectos é vastíssimo e ensinar alguém a programar em Java sem estes conhecimentos por trás parece-me de uma irresponsabilidade incrível. Isto após uma reestruturação que ocorreu o ano passado! Pode-se alegar que o ISEP tenta formar profissionais que sejam absorvidos o mais rapidamente possível pelas empresas, que não se pretende formar investigadores. Mas, na minha opinião pessoal, existem coisas que são base para um licenciado em informática. Têm que conhecer os paradigmas de programação que existem pelas valias que eles oferecem e não pelo facto da sua sintaxe ser mais ou menos acessível. Como me parece evidente que qualquer informático deve saber estruturas de dados e algoritmia. São as ferramentas base com que trabalhamos diariamente e por muito que as empresas queiram monos lá a trabalhar a “chapar” código têm que existir algo que diferencie esse mono de um pedreiro. Senão para que o canudo?

Mas e porque Haskell?

  1. É uma linguagem funcional. Os problemas são entendidos como problemas matemáticos, o que permite aos alunos quebrar com a pre-formatada ideia que programar é deve ser seguindo o paradigma imperativo.
  2. A maneira de pensar nesta linguagem é diferente. Dijkstra disse que “It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.”. Aposto que ele diria o oposto sobre Haskell. É difícil ensinar mal alunos que começam por aprender/gostar de Haskell.
  3. Ao aprender os vários paradigmas o aluno torna-se mais versátil. Começando por Haskell certamente que não vai ver todos os problemas de uma forma imperativa. Esta forma diferente de pensar vai-lhe permitir, no futuro, a mais valia de saber escolher o método mais apropriado para resolver um problema que se depare no futuro. Pode na altura não usar Haskell mas vai-se lembrar dos mecanismos que aprendeu e da forma, correcta, que aprendeu para resolver problemas.
  4. As outras vantagens do Haskell: Esquema de recursividade extremamente simples, Strongly Typed, Lazy Evaluation, Elegância do código.

Atrevo-me até a dizer que podem dizer mal do Haskell em tudo que quiserem menos que é mau como ferramenta de ensino. Para isso, é simplesmente divinal.

Se quiserem ver uma melhor resposta a esta pergunta Why Haskell podem ler este artigo no Good Math, Bad Math. E caso queiram espreitar um pouco de código podem visitar (e rir-se um bocado com) este The Evolution of a Haskell Programmer.

Comments on: "Primeiro contacto com programação por parte dos alunos do ensino superior" (9)

  1. No inicio não via as valias do haskell e também não percebia para que é que estavamos a aprender “aquilo” uma vez que ninguem o usa de forma comercial. Ao fim de uns meses já vejo a sua beleza e simplicidade em algumas aplicações :D

  2. Acho estranho dizeres que é chocante o ISEP usar Java para a introdução à programação. Porque repara, com o Haskell estás também a acrescentar a componente “funcional”, que no meu entender é um conceito mais dificil de absorver que OOP.
    A minha primeira linguagem de programação foi o Pascal, acho que deve ser das linguagens mais próximas do pseudo-código, mas acho que já não é do teu tempo ;-)

  3. Não subestimes o poder dos maus programadores… O Haskell também pode ficar muito feio se abusarem do pattern-matching. :)
    (se a memória não me falha)

    Eu comecei no 10º ano a escrever pseudo-código. Depois segui pela imperativa e quando cheguei à funcional fiquei surpreso. Podia-se fazer coisas doutra forma, bem mais eficiente, por sinal. Agora, qual o melhor approach… isso já não sei. Será que depois os alunos não ficam com dificuldades em relação à imperativa? Listas infinitas e coisas do género podem gerar vícios ou hábitos perigosos quando passados para o mundo imperativo. :P

    No entanto, gosto imenso dessa quote (em relação ao Basic). haha

  4. És capaz de ter razão. Mas conceito como “monads” são quase tão estranhos como os apontadores de C. :D

  5. Obrigado pelos comentários.

    Aproveito para vos indicar a este outro artigo sobre o mesmo tema do Alcides Fonseca:

    http://alcidesfonseca.com/blog/301

    e deixo o convite para argumentarem no vosso próprio blog

  6. Eu discordo que Haskell seja melhor linguagem para ensinar conceitos de programação orientada a objectos. É bom para ensinar conceitos de linguagem funcional. Para OO, não usando java ou uma outra linguagem OO convencional, preferia até usar Smalltalk no lugar de Haskell.

    Eu não usei Haskell na faculdade – na altura, usava-se por lá ML. Usei no entanto Haskell depois de acabar o curso quase por desporto e fiquei a gostar bastante da linguagem. É uma linguagem funcional altamente performante e paralelizável! No entanto, não tem coisas que acho que são muito importantes para quem começa a programar com OO:

    – Static Typing (não sei dizer isto em pt): Embora ambas sejam strongly typed, o static typing ajuda muito quando se começa.

    – Herança: a noção é esbatida no Haskell, bastante explícita em java.

    – Polimorfismo: mais simples em java mas menos poderoso

    Penso que se deve aprender Haskell (ou outra linguagem) depois. Se o aluno perceber a linguagem, vai abrir os horizontes por completo mas consegue reter algumas regras oo básicas; caso contrário, se lhes mostrares o Nirvana funcional antes de Java ou C# ou o que quer que eles vão usar para programar na profissão deles, vais acabar com alunos e profissionais deprimidos :P

  7. Lendo melhor o teu post penso que me equivoquei na comparação. Não sei porquê pensei que estávamos a falar de linguagem para ensinar OO e não de primeira linguagem de programação. Mas a comparação para OO continua a valer a meu ver.

    Dito isto, a única que prova que tenho é o feedback que tenho do pessoal da FCUL que aprende Haskell logo em Principios de Programação; e muita gente tem dificuldades porque acha a linguagem estranha. Eu fiz a cadeira introdutória em Pascal e devo confessar que, embora já tivesse experiência com a linguagem, tornava as coisas bastante simples. Não vejo porque não continuar a usar Pascal ou algo parecido, algo puramente procedimental/iterativo e que seja suficientemente alto nível, sem entrar na área funcional. Depois leccionaria-se OO e depois disso linguagens lógicas e funcionais. Seria o meu roadmap.

  8. […] como Alcides Fonseca se questiona em Linguagem para Caloiros (em comentário ao post de Nuno Job) sobre quais as melhores linguagens para o ensino da programação, também eu me questionei logo […]

  9. Depois de ler o teu post e o post do Alcides Fonseca decidi expôr no meu blog a minha ideia sobre a programação e o primeiro impacto com os alunos do ensino superior.

    Na minha ideia o processo de aprendizagem que é imposto pelos professores focam-se demasiado nas capacidades (e por consequencia limitações) da linguagem que acompanha a cadeira não dando aos alunos a noção de que programação não se cinge apenas a uma unica linguagem, mas sim a um conjunto de conceitos que nem sempre estão idealizados na linguagem que se usa.

    Se alguém quiser ler o artigo: http://blog.kernel.ws/index.php/cer-ou-nao-cer.pi

    Cumprimentos.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: