Evolução e Futuro das Linguagens de Programação

Slides:



Advertisements
Apresentações semelhantes
HASHING Katia Guimarães julho/2002
Advertisements

1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Gerência de Projetos Introdução A Crise do Software
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Introdução à Ciência da Computação Linguagens de Programação.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Linguagem de Montagem Visão geral.
Informática Aplicada Prof.: Bruno Rafael de Oliveira Rodrigues.
Engenharia de Software
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Projeto de Sistemas de Software
Qualiti Courses :: Documento de Requisitos. {icc2, jmmn, mmc2, CIn-UFPE Equipe Ivan Cordeiro Cardim Julio Maravitch Maurício.
INTRODUÇÃO À PROGRAMAÇÃO
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Universidade Federal do Espírito Santo
Introdução à NP-completude
SIMULAÇÃO EM COMPUTADOR: O PENSAMENTO COMO PROCESSAMENTO DE INFORMÇÕES
Programação Orientada a Objetos
Linguagens de Programação
Aula 2 Aspectos Preliminares
Prof. Msc. Raul Paradeda Aula 2 Introdução
Backtracking Katia Guimarães.
TÉCNICAS DE PROGRAMAÇÃO II
Paradigmas de programação
Projeto de Sistemas de Software
Conceitos.
Desenvolvimento de Sistemas Orientados a Aspectos
Linguagem de Programação IV
Sistemas Distribuídos
Linguagem de programação I A
Tópicos avançados em internet A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Caracterização e Objetivos das LP
Arquitetura de computadores
Avaliação da Linguagem de Programação
Futuro das Linguagens de Programação
Paradigmas de Linguagens de Programação
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Introdução à NP-completude Katia S. Guimarães
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Ferramentas de Planejamento
CASE: O POSTGRESQL EM BI Milhares de operações diárias consolidadas "near-real-time" PGDay Campinas Wagner Correa Ramos Anderson.
Professor: Márcio Amador
Geração de Código aula-12-geração-de-código.pdf.
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Paradigmas de Linguagens de Programação Aula 2
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Processadores de Linguagens
Arquiteturas RISC x CISC
Aula 1 – Profª Danielle Costa
Back-End Compilação aula-11-back-end.pdf.
Integração de Ferramentas CASE
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
CloudSim Um framework para modelagem e simulação de infraestrutura e serviços de Computação em Nuvem.
Linguagens de Programação
Assembly Equipe: David Lopes Embiruçú (dle) Emanuel Felipe Príncipe Carvalho (efpc) Luis Otávio Cavalcante Borba (locb) Rosana Silva Matos (rsm2)
Algoritmos e Programação I
SISTEMAS DE INFORMAÇÃO
Módulo II Capítulo 1: Orientação a Objetos
Análise e Projeto de Sistemas Análise e Projeto de Sistemas Aula 2 Professor: Italo Rodrigues Castro.
Influencias sobre o Projeto da Linguagem
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
YOUR LOGO Tópicos Avançados em Internet Prof. Lincoln Ferreira Dantas Sistemas de Informação UNIESP – Presidente Epitácio.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Introdução ao Java Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico FATEC-PB  Centro de Informática, UFPE.
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Transcrição da apresentação:

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

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

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

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, gfn}@cin.ufpe.br

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

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, gfn}@cin.ufpe.br

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

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

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, gfn}@cin.ufpe.br

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, gfn}@cin.ufpe.br

Década de 70 (1/2) C Ada 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

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, gfn}@cin.ufpe.br

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

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, gfn}@cin.ufpe.br

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

Década 2000 Java XML Microsoft .NET 2004 – Java 1.5 (tipos parametrizados, enumeradores) XML 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

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

Árvore Evolucionária das Linguagens de Programação (2/2) {avfl, gfn}@cin.ufpe.br

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

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

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

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

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

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

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

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

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

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

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

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

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

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/sheard04languages.html Programming Languages: History and Future, Jean E. Sammet, http://rockfish-cs.cs.unc.edu/COMP144/sammet.pdf {avfl, gfn}@cin.ufpe.br

Referências Evolução das Linguagens de Programação, http://reflectivesurface.com/weblog-br/2003/05/14/mais-sobre-a-evolucao-de-linguagens-de-programacao Future Programming Languages, Bent Thomsen, http://www.nouhauz.dk/dokumenter/120505-BentThomsen.ppt {avfl, gfn}@cin.ufpe.br

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