Pular para o conteúdo principal

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.

Comentários

Fábio Xavier disse…
Olá Jair,
Gostei do Texto e concordo quanto à necessidade do aprendizado de várias linguagens, para o bem do profissional de informática.

Repassarei aos meus alunos.

Um abraço
Americojr disse…
tb gostei do post,estou cursando analise e desenvolvimento de sistemas e pretendo ser um bom progamador em diversas plataformas...
Anônimo disse…
Excelente aula mas, poderia ter deixado claro logo de início que no seu ponto de vista a pergunta não tinha resposta. Evita que um monte de gente passe um bom tempo lendo o texto em busca de ao menos uma dica de por onde começar ou quais as tendências do mercado, por exemplo.
Anônimo disse…
Poxa em vez de ser claro logo, não, fica arrudiando e no final não respondeu a pergunta.
Anônimo disse…
A melhor resposta é esta:

"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."
Jair C Leite disse…
Não sou programador, como disse no texto, e também não sou professor de programação. As opiniões acima refletem minha experiência como pesquisador e professor de engenharia de software e interação humano-computador.
Brasilstor disse…
Boa noite.
Gostei das idéias expostas, eu não sou programador e nem estou estudando programação, porem tenho um projeto ousado que depender de um conhecimento diversificado, não que seja para criar um programa inacessível, mais para que torne um program leve fácil de usar e de operar.
tenho uma ideia e se tiver algum desenvolvedor que queira participar de um projeto ousado, estou pronto compartilhar ideias.
Unknown disse…
ótimo texto Jair, está de Parabéns, muito bom mesmo! Fico feliz em saber que há profissionais como você no qual eu posso me espelhar profissionalmente.
Carlos disse…
Aposto que durante todo seu aprendizado você não aprendeu que num texto devemos ser conciso, ao invés de prolixo.
Anônimo disse…
A melhor linguagem de programação é a sua linguagem, a linguagem que você domina. Claro que existem linguagens específicas para cada caso.
Cobol para grandes processamentos, C para aplicativos interagir com máquinas, PHP para web, etc.
Anônimo disse…
prazer me chamo Bruno, sou novo em programação e gostaria de ouvir um pouco sobre phyton e php e saber um pouco mais de cada pra ajudar em minhas escolha.

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for