Sempre perguntaram-me qual a melhor linguagem de programacao. Esta e uma pergunta dificil de responder.Recentemente, participei de uma discussao com colegas sobre quais linguagens deveriam ser ensinadas ao alunos e em qual ordem. Nao tenho muita experiencia com ensino de programacao. Assim, nao tive muito como contribuir sobre o aspecto pedagogico desta discussao. Mas dei a minha colaboracao com a minha experiencia e por considerar a linguagem um instrumento de interacao humano-computador.Tenho apenas experiencia com o auto-aprendizado de varias linguagens, em diferentes paradigmas. Comecei com Basic, do Bill Gates, e Assembly 6502, em casa. Minha motivacao: aprender o que e computador. Fui para a universidade e aprendi Fortran, Pascal, Assembly 8086 e Cobol, durante graduacao. Estudei C, sozinho, para meu trabalho de IC. Tambem auto-aprendi Prolog e LISP, para o mestrado; C++ e Java para o doutorado; e Perl, Javascript, PHP, HTML e CSS para desenvolvimento Web.Nao fiz nenhum planejamento pedagogico para o meu aprendizado, mas acho que consegui dar conta de todas. Nao sou fluente na maioria, mas programador nao e o que sou de profissao. 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 dominio de aplicacao?Linguagens naturais e artificiais, sao instrumentos de cognicao (acao de conhecer) e comunicacao (acao de por em comum). E estas sao atividades humanas!As linguagens de programacao tem varios propositos. Vou destacar 2 deles relacionados a cognicao e comunicacao:- ser um instrumento para codificar conhecimento de pessoas na forma de instrucoes para um computador executar (para outras pessoas);- ser um instrumento para comunicacao e documentacao do conhecimento em um time de engenharia de software.Ou seja, sao atividades de cognicao e comunicacao humanas que precisam ser eficazes e eficientes para que o programa tenha qualidades.A interpretacao destas linguagens pelos computadores e a parte mais facil. O computador aprende facilmente a interpretar qualquer linguagem. Desde que alguem codifique um programa para tal, claro.Afirmar qual a melhor linguagem para o processo ensino-aprendizado requer uma investigacao cientifica com metodos adequados para avaliar cognicao e comunicacao 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 e feito! Linguagens de programacao sao instrumentos de interacao humano-computador. Metodos de avaliacao da disciplina IHC podem e devem ser aplicados para este fim.Ensinar programacao e ensinar um instrumento que seja mais adequado a estes propositos. Ensinar apenas a utilizar o instrumento nao e suficiente.Nao sou favoravel a um profissional que apenas sabe falar "Javanes". Chamo Javanes ao estilo de programacao utilizando sentencas linguisticas em Java que sao exclusivas daquela linguagem (expressoes idiomaticas) praticadas por programadores extremamente competentes e especializados. Alem soar pedante, como nos textos dos intelectuais letrados ou das sentencas dos magistrados que muitas vezes sao propositadamente escritos para mostrar que eles estao acima dos mortais comuns, nao incentiva o entendimento do codigo pelos seus pares. Isso nao cabe