quarta-feira, 5 de novembro de 2008



Uma pergunta bastante relevante que surge na cabeça de quase todos os programadores certa hora da vida é: por que existem tantas linguagens de programação? Outra bastante comum é: qual delas é melhor? Alguém poderia responder: existem tantas porque uma vem para corrigir as falhas das outras, e a melhor é a que tem menos falhas. Certo? Errado.
Na Wikipédia, há uma
lista com mais de uma centena de linguagens de programação. Será que todas elas surgiram para sanar problemas umas das outras? Se olharmos o histórico de surgimento de cada linguagem de programação, veremos que a maioria surgiu para sanar uma necessidade diferente numa determinada área. Isso já nos dá uma pista de qual delas é melhor.
Vamos começar analisando um exemplo famoso: Java. Java nasceu para substituir C e C++? Não. Java nasceu por causa da Orientação a Objetos? Não mesmo! Por que, então, Java nasceu? Nasceu pela necessidade de uma linguagem portável (cujos programas rodassem em plataformas diferentes sem necessidade de alterações). Mas já não existiam linguagens assim? Sim, existiam, mas não com esse enfoque. LISP, Smalltalk e Perl, por exemplo, são linguagens portáveis, assim como Java. Mas LISP, por exemplo, tem um paradigma de programação totalmente diferente. Smalltalk e Perl, um escopo diferente. Smalltalk, por exemplo, nasceu com o objetivo de tornar a programação mais intuitiva. Perl nasceu com o objetivo de ser uma linguagem poderosa e prática.
Há linguagens que surgiram de uma necessidade ainda mais específica. Simula, por exemplo, nasceu pela necessidade de realizar simulações de eventos discretos. MUMPS, pela necessidade de desenvolver aplicações baseadas em bancos de dados para um hospital.
Entretanto, nem todas as linguagens resolvem um problema novo. Há, sim, linguagens que vêm para competir com outras. C#, por exemplo, veio para competir com Java, uma competição que influenciou bastante esta última. Há, também, linguagens que surgem para simples diversão de geeks, como nós. Whitespace, por exemplo, não tem nada de inovador, apenas a forma de programar: o código-fonte é escrito usando-se tabs e espaços.
Dado que cada linguagem tem seus pontos fortes e fracos, não podemos dizer que uma certa linguagem é a melhor. Podemos sim, dizer, que uma linguagem é a melhor para determinado problema numa determinada situação. E, para dizer isso, precisamos avaliar o problema, o que a linguagem oferece para resolvê-lo e o que o programador sabe sobre ela. Fatores importantes na linguagem são o suporte nativo às ferramentas e paradigmas que serão utilizados e bibliotecas e extensões disponíveis.
Às vezes não vale a pena para o programador aprender uma linguagem na qual ele resolveria um problema mais facilmente; o tempo que ele levaria para aprender a nova linguagem (ou ferramenta) é maior do que o tempo que ele vai levar para resolver o problema na linguagem com a qual ele é mais familiar. Note que esse não deve ser um fator tão importante na escolha. Às vezes é melhor que o problema demore mais para ser resolvido para que depois alterações na solução possam ser incorporadas mais facilmente.
Não podemos dizer que existe a melhor e a pior linguagem, mas podemos dizer que existem linguagens boas e ruins. A linguagem ruim é aquela que não ajuda o programador a utilizar seus recursos corretamente, por exemplo: ser uma linguagem poderosa para orientação a objetos mas, ao mesmo tempo, não oferecer suporte fácil para pacotes.
É sempre bom tomar contato com diversas linguagens para saber qual usar em cada situação. Para começar, sugiro que se escolham linguagens sem uma relação forte (uma inspirada na outra). Uma boa lista de linguagens para estudar, na minha opinião:
Smalltalk
Prolog
Scheme
C
Self
Erlang
Assembly (para os mais corajosos)
Propositalmente, são linguagens não muito recentes, especialmente Assembly, C, Prolog e Scheme. As linguagens mais recentes, baseadas nessas, têm muitos recursos avançados. É bom começar pelo básico e, depois de capturar a forma de pensar em cada linguagem, partir para recursos mais avançados.
Especialmente para estudar Assembly (ou, pelo menos, os conceitos dela), sugiro usar uma máquina virtual como o
Hipo.

0 comentários: