Evolução e Futuro das Linguagens de Programação - ppt carregar
Evolução e Futuro das Linguagens de Programação
PublicouKevin Cordeiro Alterado mais de 3 anos atrás
Apresentação em tema: "Evolução e Futuro das Linguagens de Programação"— Transcrição da apresentação:
1 Evolução e Futuro das Linguagens de Programação
Alessandro Vasconcelos Gladstone Ferreira Seminário de Engenharia de Software e Linguagens de Programação
2 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,
3 Roteiro A questão da Produtividade A historia no passar das décadas
A árvore evolucionaria da linguagens As linguagens do futuro {avfl,
4 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,
5 Como Aumentar a Produtividade
Através de um Processo (ES) Bons processos podem aumentar a produtividade em 20%* Através de Ferramentas 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,
6 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,
7 Os Paradigmas Imperativo Funcional Orientado a Objetos
Ênfase na estrutura de dados e na atribuição dos valores. Dependência explícita da arquitetura de Von Neumann Funcional Ê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,
8 Um Pouco de História!
9 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,
10 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,
11 Meio da Década de 50 Surge FORTRAN Outras linguagens da época:
É 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,
12 Década de 60 Fortalecimento da Programação Estruturada Pascal Simula
Sem go to! Fortemente tipada Procedimentos alinhados Simula Primeira linguagem com objetos, classes e subclasses {avfl,
13 Década de 70 (1/2) C Ada Sucessora de B, que veio de BCPL
14 Década de 70 (2/2) SmallTalk Prolog Rica graficamente
GUI Fontes Orientada a Objetos Objetos se comunicam via troca de mensagens Prolog Baseada em regras, fatos, e buscas {avfl,
15 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,
16 Década de 90 O estouro da Internet! HTML Linguagens Script
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,
17 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,
18 Década 2000 Java XML Microsoft .NET
19 O que o futuro nos reserva?
20 Á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,
21 Árvore Evolucionária das Linguagens de Programação (2/2)
22 Mas… Nós ainda escreveremos programas daqui a cem anos?
23 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,
24 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,
25 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,
26 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,
27 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,
28 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,
29 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,
30 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,
31 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,
32 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,
33 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,
34 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,
35 Referências The Hundred Year Language, Paul Graham, Languages Of The Future, Tim Sheard, Programming Languages: History and Future, Jean E. Sammet, {avfl,
36 Referências Evolução das Linguagens de Programação, Future Programming Languages, Bent Thomsen, {avfl,