segunda-feira, janeiro 25, 2010

Paradigmas de desenvolvimento

Mensagem da lista Python-Brasil sobre os paradigmas de desenvolvimento:

============
Pergunta do Jackson
Oi pessoal, recentemente li um artigo (http://werther.desenvolvatec.com/filosofia/prog-futuro/) que me fez relembrar de uma dúvida antiga sobre o futuro da programação. Hoje o paradigma corrente é a orientação a objetos, (o qual aprendi os conceitos usando o Python!) minha curiosidade é se já existe algo mais a frente disso, um novo paradigma de programação.
No semestre passado participei de um mini-curso de Java onde coloquei esta questão, mas nem o instrutor e nem o artigo acima responderam a minha curiosidade...
============




Resposta do Luciano:
============
Se você quer aprender um outro paradigma, estude programação
funcional, não só porque é o futuro mas também porque é passado. É
simplesmente atemporal, como o cálculo. É o futuro porque muito da
ciência moderna se baseia nele. Da mesma forma, muito da ciência da
computação se baseia nas funções recursivas e no cálculo lambda.

Mas ao conversar sobre pardigmas, eu preciso citar o Shriram
Krishnamurthi, autor do melhor livro de teoria de linguagens de
programação que eu já estudei (e o livro é gratuito, basta baixar):

"""Programming language ‘‘paradigms’’ are a moribund and tedious
legacy of a bygone age. Modern language designers pay them no respect,
so why do our courses slavishly adhere to them? This paper argues that
we should abandon this method of teaching languages, offers an
alternative, reconciles an important split in programming language
education, and describes a textbook that explores these matters."
http://www.cs.brown.edu/~sk/Publications/Papers/Published/sk-teach-pl-post-linnaean/

Resumindo e reinterpretando o artigo: "paradigmas" são simplificações
didáticas, e como tais, necessariamente vagos e incompletos. Não é
possível dizer que a linguagem X "é mais orientada a objetos" que a
linguagem Y. É possível dizer que a linguagem X implementa
determinadas características e a linguagem Y implementa outras.

Por exemplo, Smalltalk e Python implementam tipagem dinâmica, Java
não. Python e C++ implementam herança múltipla, Java não. Python e
Scheme implementam funções como objetos de primeira classe, Java não.
JavaScript e Python implementam closures, Java não.

O que isso significa? Que aprender Java, e apenas Java, não basta para
conhecer os conceitos fundamentais de linguagens de programação.
Aprender apenas Python também não é suficiente (mas a relação custo x
benefício, em termos de contato com diferentes "paradigmas", é bem
melhor para quem estuda Python, que alguns definem como
"multi-paradigma").

O Krishnamurthi diz que não se pode aprender teoria de linguagens de
programação apenas estudando paradigmas e tendo uma visão panorâmica
de linguagens, no estilo do livro do Sebesta (provavelmente mais usado
em teoria de PL no Brasil e no mundo).

Certas abstrações a gente só consegue incorporar tendo um contato
muito mais íntimo. Por exemplo, eu já havia lido um monte sobre
closures, e tinha uma idéia razoavel do que eram, mas só foi realmente
entender bem o conceito quando implementamos closures num pequeno
interpretador em Scheme, durante o curso de Princíptios de PL que eu
fiz estudando o livro do Krishnamurthi. Continuations era um conceito
ainda mais vago para mim, até porque não tem como entender isso sem
ter muito claro closures, e finalmente depois de fazer exerícios e
superaquecer o cérebro eu agora sei o que são.

Falando nisso, closures é algo intimamente relacionado ao "paradigma"
funcional.
============

Nenhum comentário: