Descobertas

Diretamente do cotidiano de um programador

Programming Paradigms for Dummies

leave a comment »

Eu havia prometido pra mim mesmo que nunca leria alguma coisa que tivesse “for dummies” no título. Felizmente quebrei a promessa e li Programming Paradigms for Dummies, que introduz vários paradigmas de programação e explica quando e porque cada um é mais apropriado. Resolvi escrever algumas impressões que ficaram depois da leitura e registrá-las por aqui :)

A primeira coisa que me chamou atenção foi a persistência do autor em dizer que uma linguagem adequada para sistemas grandes deve ser multi-paradigma. A razão disto é que em sistemas muito grandes, vários tipos de problemas diferentes devem ser resolvidos. Como cada paradigma de programação é mais adequado pra um determinado tipo de problema, nada mais natural do que ter uma linguagem que consiga lidar com o maior número de problemas possível. Uma boa escolha de linguagem teria dois paradigmas: um para “programming in the small” e outro para “programming in the large”.

Isso me fez pensar em duas coisas: 1) é mais fácil cair na tentação de que “minha linguagem resolve tudo” do escolher/aprender uma linguagem adequada ao domínio o qual se deseja trabalhar; 2) até onde aprender uma linguagem pura (funcional ou orientada a objetos, por exemplo) é válido para aplicá-la em um problema real.

Outra parte que merece destaque no paper são as definições de conceitos de linguagens de programação importantes como records, closures, concorrência e estado. A surpresa aqui foi a grande importância dada ao estado (o termo usado no paper é named state) para a modularidade dos sistemas. De acordo com o autor, estado é imprescindível quando se deseja ter modularidade, pois somente com ele um componente pode se adaptar ao ambiente em que ele está. Fiquei surpreso pois ultimamente andei lendo umas críticas bem pesadas com relação a manter estado no contexto de computação paralela. E, é claro, fiquei com a dúvida: como se consegue modularização em linguagens puramente funcionais?

Há um tópico apenas sobre concorrência. Nele podemos encontrar uma descrição mais formal sobre a diferença entre paralelismo e concorrência. Paralelismo é um conceito relacionado a hardware e à capacidade de executar duas partes simultaneamente em multiplos processadores. Concorrência é relacionada à linguagem de programação e à capacidade de dividir o tempo do processador entre duas atividades. Os modelos de concorrência adotados por várias linguagens são descritos detalhadamente, assim como suas vantagens de desvantagens.

Linguagens que abordam concorrência de uma forma diferente da maioria das linguagens mainstream (Java, C++, Ruby) foram citadas. Destaque para Oz, Alice, FrTime e Yampa onde condições de corrida são impossíveis de ocorrer. O modelo de concorrência declarativa (Oz) foi destacado por sua propriedade de confluência, em que não importa a ordem em que as funções são avaliadas, pois o resultado é sempre o mesmo. Isso é fortemente desejado, pois elimina toda necessidade de compartilhamento de memória e sincronização entre processos, evitando grande parte dos problemas de concorrência.

Concluindo, o paper ainda fala sobre conceitos e paradigmas que eu nem mencionei aqui. Tudo é muito bem explicado o que torna o texto uma leitura recomendada pra quem tem vontade de aprender mais sobre paradigmas e linguagens.

Written by Dalto

maio 26, 2010 às 10:42 am

Publicado em programming languages

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: