Evolução e Futuro das
Linguagens de Programação
Alessandro Vasconcelos
Gladstone Ferreira
Seminário de Engenharia de Software e Linguagens de Programação
Motivação!



Num mundo com computadores cada
vez mais velozes, o que ainda afeta a
produtividade?
Porque existem tantas linguagens de
programação?
Daqui a 10, 20, ou 100 anos, em que
linguagem você estará programando?
{avfl, [email protected]
2
Roteiro




A questão da Produtividade
A historia no passar das décadas
A árvore evolucionaria da linguagens
As linguagens do futuro
{avfl, [email protected]
3
A questão da Produtividade


O hardware já é suficientemente
poderoso por si só!
A produtividade se centra no
Programador:



Escrever programas corretamente
Escrever programas rapidamente
Escrever programas facilmente
{avfl, [email protected]
4
Como Aumentar a
Produtividade

Através de um Processo (ES)


Através de Ferramentas



Bons processos podem aumentar a
produtividade em 20%*
Verificações, Análises, Geração de Código
Boas ferramentas podem aumentar a produtividade em 10%*
Através da Linguagem de Programação


Abstrações, mecanismos, serviços, garantias
Esse é o aspecto que mais influi chegando a aumentar a
produtividade em mais de 100% *
* Segundo o Software Productivity Research
{avfl, [email protected]
5
Por que tantas Linguagens
de Programação?


Por que algumas pessoas falam inglês
e outras português?
Linguagens de programação são
desenvolvidas com diferentes
objetivos, para diferentes tipos de
programas, por diferentes pessoas
{avfl, [email protected]
6
Os Paradigmas

Imperativo


Funcional


Ênfase na estrutura de dados e na
atribuição dos valores. Dependência
explícita da arquitetura de Von Neumann
Ênfase nos valores manipulados, e não
na forma de armazenamento.
Orientado a Objetos

Ênfase sobre os objetos e a troca de
mensagens entre esses.
{avfl, [email protected]
7
Um Pouco de História!
Década de 40



Os primeiros computadores
eletrônicos eram monstruosos
A programação era em código binário
A manutenção era difícil:

As válvulas queimavam regularmente
{avfl, [email protected]
9
Início da década de 50

Linguagens Assembly




Permitia programas maiores, reusáveis, e
re-alocáveis.
O código de máquina era produzido por
um Assembler
Correspondência um-pra-um entre o
código assembly e o código da máquina
Posteriormente surgiram os macros
{avfl, [email protected]
10
Meio da Década de 50

Surge FORTRAN




É considerada a primeira linguagem de
alto-nível.
Desenvolvimento independente da
plataforma
Aplicada na solução de problemas na
ciência e na engenharia
Outras linguagens da época:

Algol58, Cobol, Lisp, Basic
{avfl, [email protected]
11
Década de 60


Fortalecimento da Programação
Estruturada
Pascal




Sem go to!
Fortemente tipada
Procedimentos alinhados
Simula

Primeira linguagem com objetos, classes
e subclasses
{avfl, [email protected]
12
Década de 70 (1/2)

C



Sucessora de B, que veio de BCPL
Construções de alto-nível
Ada


Incentivada pelo Departamento de Defesa
Usada em programação de sistemas
embarcados
{avfl, [email protected]
13
Década de 70 (2/2)

SmallTalk

Rica graficamente



Orientada a Objetos


GUI
Fontes
Objetos se comunicam via troca de
mensagens
Prolog

Baseada em regras, fatos, e buscas
{avfl, [email protected]
14
Década de 80

C++



Primeira linguagem Orientada a objetos
amplamente adotada.
Implementada como um pré-processador
para o compilador C
Haskel



Avaliação Preguiçosa
Polimorfismo Paramétrico
Inferência de Tipos
{avfl, [email protected]
15
Década de 90


O estouro da Internet!
HTML



A linguagem da World Wide Web
É uma linguagem de marcação, e não de
programação
Linguagens Script


São as chamadas linguagens
interpretadas
Perl, JavaScript, VBScript
{avfl, [email protected]
16
Década de 90

Java





Orientada a objetos, compilada e
interpretada (bytecodes)
1996 – Java 1.0
1997 – Java 1.1 e 1.2 (Swing, Collection)
1998 – Java 1.2 final
2000 – Java 1.3 final
{avfl, [email protected]
17
Década 2000

Java


XML


2004 – Java 1.5 (tipos parametrizados,
enumeradores)
Padrão de integração
Microsoft .NET

Múltiplas linguagens


C++, C#, Visual Basic, Cobol, Fortran
Uma máquina virtual comum
{avfl, [email protected]
18
O que o futuro nos reserva?
Árvore Evolucionária das
Linguagens de Programação (1/2)

Como as espécies vivas, as linguagens possuem uma
história facilmente categorizada em forma de árvores
evolucionárias, com “galhos” que não podem mais se
ramificar.

A evolução das linguagens difere da evolução das
espécies porque alguns ramos podem convergir.

Objetivo dessa abordagem: aproximarmos dos ramos
principais da arvore evolucionária das linguagens,
para encontrar as linguagens com chances de futuro.
{avfl, [email protected]
20
Árvore Evolucionária das
Linguagens de Programação (2/2)
{avfl, [email protected]
21
Mas…
Nós ainda escreveremos
programas daqui a cem anos?
Não apenas diremos aos
computadores o que nós
estamos queremos fazer?
{avfl, [email protected]
22
As linguagens do futuro
provavelmente…
… valorizarão mais a produtividade que o poder bruto.
… serão mais concisas, construindo sobre bases mais simples
… agregarão diferentes paradigmas.
… farão uso de bons ambientes de desenvolvimento pra
melhorar a produtividade.
… encontrarão modos de equilibrar concisão e legibilidade.
… Integrarão mecanismos de extensão nos níveis semânticos e
sintáticos mais básicos, permitindo que programadores
evoluam de maneira mais simples quando necessário.
{avfl, [email protected]
23
Valorização da produtividade em
detrimento do poder bruto (1/2)

A melhoria na eficiencia do programas está na raiz do
processo (as linguagens)

Desperdiçar o tempo do programador é a verdadeira
ineficiência, e não desperdiçar o tempo de máquina.

Mesmo que algumas aplicações podem ser
crescentemente mais ineficientes e, assim,
demandarem toda a velocidade que o hardware puder
fornecer, computadores mais rápidos serão sinônimo
de linguagens capazes de cobrir uma escala cada vez
mais larga de eficiência.
{avfl, [email protected]
24
Valorização da produtividade em
detrimento do poder bruto (2/2)
“Há um desperdício bom, e um desperdício mau.
Eu estou interessado no desperdício bom - o tipo
onde, gastando mais, nós podemos começar uns
projetos mais simples.”
(tradução livre, The Hundrer-Year Language, por Paul Graham)
{avfl, [email protected]
25
Linguagens concisas e mais
simples (1/2)

Se nós pensarmos no núcleo de uma linguagem como um
conjunto de axiomas, certamente é indesejável ter os
axiomas adicionais que não adicionam nenhum poder
expressivo, simplesmente por causa da eficiência.

A maneira correta de se resolver o problema da adição de
axiomas desnecessários é separar o significado de um
programa dos detalhes de sua execução.

Linguagem do futuro:núcleo limpo, conciso, contendo
todos os axiomas essenciais, a partir dos quais as outras
características da linguagem poderão ser derivadas
{avfl, [email protected]
26
Linguagens concisas e mais
simples (2/2)
“No mínimo, um exercício que pode ser útil é analisar
cuidadosamente o núcleo de uma linguagem para verificar se há
axiomas que podem ser eliminados. Em minha longa carreira
como um chato, eu descobri que lixo sempre gera mais lixo…
Ocorre-me que os galhos principais da árvore evolutiva (das
linguagens de programação) passam por linguagens que tem
núcleos menores e mais limpos…”
(tradução livre, The Hundrer-Year Language, por Paul Graham)
{avfl, [email protected]
27
Agregar diferentes paradigmas

Um linguagem de sucesso no futuro terá a
característica de juntar conceitos de diferentes
paradigmas, extendendo assim seu poder de
atuação.

Orientação a objetos: programas são
desenvolvidos como uma série de remendos.

Uma boa maneira de extender uma linguagem é
misturar diferente paradigmas na mesma,
buscando juntar diferentes conceitos para
agregar poder à essa linguagem.
{avfl, [email protected]
28
Bons ambientes de desenvolvimento:
melhor produtividade

Mesmo daqui a cem anos, as pessoas ainda dirão a
computadores o que querem fazer, usando
programas, da mesma maneira que conhecemos hoje.

O diferencial está em ambientes de desenvolvimentos
mais poderosos que os atuais ”editores de texto
glorificados”.

Testes automáticos e refatoração são alguns
exemplos de como bons ambientes de programação
podem ajudar uma linguagem de programação.
{avfl, [email protected]
29
Equilibrio entre concisão e
legibilidade (1/2)

Uma linguagem concisa e simples deve ser aberta
em termos de extensibilidade para permitir que,
características extras relacionadas com o dominio do
problema sejam adicionadas à linguagem,estas
derivadas dos axiomas essenciais.

Tal linguagem extensível deve ter uma
responsabilidade com a legibilidade, pois pode gerar
código ilegível por produzir trechos muito
idiomáticos.
{avfl, [email protected]
30
Equilibrio entre concisão e
legibilidade (2/2)

Os programadores do futuro serão criaturas tão
preguiçosas quanto nós, em seu desejo em
expressar programas com o mínimo de esforço.

A linguagem do futuro, se existisse, poderia
assim ser muito fácil de se programar.
“Programas devem ser escritos para pessoas lerem, e
somente incidentalmente, para serem executados por
máquinas.”
(Hackers and Painters, por Paul Graham)
{avfl, [email protected]
31
Mecanismos de Extensão nos níveis
semântico e sintático mais básicos (1/2)

A extensibilidade num mundo interconectado
com protocolos que mudam rapidamente.

Um programador sempre pode usar programação
do mais baixo nível para implementar qualquer
coisa, mas é muito melhor se os mecanismos
para integração existissem na própria linguagem.
{avfl, [email protected]
32
Mecanismos de Extensão nos níveis
semântico e sintático mais básicos (2/2)

Muitas tarefas em programação podem ser
enormemente simplificadas por extensões da
linguagem.

Prover meios para que programadores posssam
esconder estruturas complexas e algoritmos atrás de
uma fachada sintática é uma poderosa forma de
extensibilidade.

A mesma extensibilidade em termos semânticos é
mais complexa, mas não impossível. Como foi dito
antes, tal poder vem a um preço, mas este deve ser
pago se a linguagem precisa evoluir.
{avfl, [email protected]
33
Conclusões

Falamos aqui em linguagens a serem criadas em um
futuro próximo. É perfeitamente possível que um gênio
ainda desconhecido descubra um novo paradigma de
programação que mude o modo como a programação
existe hoje. Obviamente, tal desenvolvimento não pode
ser previsto.

Muito embora isso possa vir a acontecer, o exercício de
olhar para o futuro nos permite ter a consciência da
solidez das bases que no passado ajudaram a construir
o cenário de linguagens de programação como
conhcemos hoje, e, dessa forma, nos permite tentar
trilhar um caminho de sucesso para o futuro de nossas
aplicações.
{avfl, [email protected]
34
Referências



The Hundred Year Language, Paul Graham,
http://www.paulgraham.com/hundred.html
Languages Of The Future, Tim Sheard,
http://citeseer.ist.psu.edu/sheard04language
s.html
Programming Languages: History and
Future, Jean E. Sammet, http://rockfishcs.cs.unc.edu/COMP144/sammet.pdf
{avfl, [email protected]
35
Referências


Evolução das Linguagens de Programação,
http://reflectivesurface.com/weblogbr/2003/05/14/mais-sobre-a-evolucao-delinguagens-de-programacao
Future Programming Languages, Bent
Thomsen,
http://www.nouhauz.dk/dokumenter/120505BentThomsen.ppt
{avfl, [email protected]
36
Perguntas?????
Evolução e Futuro das
Linguagens de Programação
Alessandro Vasconcelos
Gladstone Ferreira
Seminário de Engenharia de Software e Linguagens de Programação
Download

Evolucao e Futuro das Linguagens de Programacao