sábado, 15 de agosto de 2009

Qual a melhor linguagem de programação?

Sempre perguntaram-me qual a melhor linguagem de programação. Esta é uma pergunta difícil de responder.

Recentemente, participei de uma discussão com colegas sobre quais linguagens deveriam ser ensinadas ao alunos e em qual ordem. Não tenho muita experiência com ensino de programação. Assim, não tive muito como contribuir sobre o aspecto pedagógico desta discussão. Mas dei a minha colaboração com a minha experiência e por considerar a linguagem um instrumento de interação humano-computador.

Tenho apenas experiência com o auto-aprendizado de várias linguagens, em diferentes paradigmas. Comecei com Basic, do Bill Gates, e Assembly 6502, em casa. Minha motivação: aprender o que é computador. Fui para a universidade e aprendi Fortran, Pascal, Assembly 8086 e Cobol, durante graduação. Estudei C, sozinho, para meu trabalho de IC. Também auto-aprendi Prolog e LISP, para o mestrado; C++ e Java para o doutorado; e Perl, Javascript, PHP, HTML e CSS para desenvolvimento Web.

Não fiz nenhum planejamento pedagógico para o meu aprendizado, mas acho que consegui dar conta de todas. Não sou fluente na maioria, mas programador não é o que sou de profissão. O melhor para mim foi a diversidade, saber pensar de forma diferente utilizando variadas linguagens e saber ler programas escritos por alunos em seus trabalhos, independente da linguagem.

Poucos trabalhos investigaram cientificamente qual a melhor linguagem? Melhor em que? para ensino? para a pratica profissional? para um certo domínio de aplicação?

Linguagens naturais e artificiais, são instrumentos de cognição (ação de conhecer) e comunicação (ação de por em comum). E estas são atividades humanas!

As linguagens de programação têm vários propósitos. Vou destacar 2 deles relacionados à cognição e comunicação:

- ser um instrumento para codificar conhecimento de pessoas na forma de instruções para um computador executar (para outras pessoas);

- ser um instrumento para comunicação e documentação do conhecimento em um time de engenharia de software.

Ou seja, são atividades de cognição e comunicação humanas que precisam ser eficazes e eficientes para que o programa tenha qualidades.

A interpretação destas linguagens pelos computadores é a parte mais fácil. O computador aprende facilmente a interpretar qualquer linguagem. Desde que alguém codifique um programa para tal, claro.

Afirmar qual a melhor linguagem para o processo ensino-aprendizado requer uma investigação científica com métodos adequados para avaliar cognição e comunicação humanas. Atualmente, o foco em CC tem sido quase sempre em avaliar as qualidades objetivas (desempenho, paradigmas, tipagem, etc.) destas linguagens. E nem sempre isto é feito! Linguagens de programação são instrumentos de interação humano-computador. Métodos de avaliação da disciplina IHC podem e devem ser aplicados para este fim.

Ensinar programação é ensinar um instrumento que seja mais adequado a estes propósitos. Ensinar apenas a utilizar o instrumento não é suficiente.

Não sou favorável a um profissional que apenas sabe falar "Javanês". Chamo Javanês ao estilo de programação utilizando sentenças lingüísticas em Java que são exclusivas daquela linguagem (expressões idiomáticas) praticadas por programadores extremamente competentes e especializados. Além soar pedante, como nos textos dos intelectuais letrados ou das sentenças dos magistrados que muitas vezes são propositadamente escritos para mostrar que eles estão acima dos mortais comuns, não incentiva o entendimento do código pelos seus pares. Isso não cabe numa atividade profissional coletiva, como é a engenharia de software, que visa a colaboração e a evolução da programação.