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, gfn}@cin.ufpe.br
2
Roteiro
A questão da Produtividade
A historia no passar das décadas
A árvore evolucionaria da linguagens
As linguagens do futuro
{avfl, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
20
Árvore Evolucionária das
Linguagens de Programação (2/2)
{avfl, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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, gfn}@cin.ufpe.br
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