SlideShare una empresa de Scribd logo
Historia de los lenguajes
de programación
Eduard Tomàs i Avellana
@eiximenis
Inicios...
Charles Babbage
(1791 – 1871)
Ada Lovelace
(1815 – 1852)
Grace Murray Hopper
1906 - 1992
Inventó el primer
compilador (A0) para el
UNIVAC 1 en 1951
Popularizó la idea de
lenguajes independientes
de la máquina
El primer bug
Se encontró una
arna atrapada en
una válvula del
Mark 2
Primeros ordenadores
• 1943 Colossus Mark 1,2,3
• 1946 ENIAC
• Primer Turing completo
• 1960 Circuito integrado
• 1971 Microprocesador
• 1981 IBM PC
Turing completo
Un ordenador es “turing completo” si tiene un poder computacional
equivalente a la máquina universal de Turing
• Si tuviese memória infinita
• Si tuviese almacenamiento infinito
Tesis Church-Turing: Todo algoritmo puede ser descrito mediante una
máquina universal de Turing.
Es el inicio de los ordenadores programables (arquitectura de Von
Neumann)
Lenguajes “padre”
1. Fortran (1957)  Algol, BASIC
2. ALGOL(1958)  Pascal, Modula 2, Simula
3. LISP (1958)  Clojure, Scheme
4. COBOL (1959)
5. Simula (1962, 67) Smalltalk, C++
6. CPL (1963)  C, C++, Java, C#, ObjectiveC
70’s segunda generación
• Pascal (1970)
• C (1972)
• Prolog (1972)
• ML (1973)
• Scheme (1975)
• SQL (1978)
80’s – Imperativos al poder
Se mejoran y combinan los paradigmas
inventados en las décadas 60-70.
• C++ (1980)
• MATLAB (1984)
• Eiffel (1985)
• Erlang (1986)
• Perl (1987)
90’s – Auge funcional
• Haskell (1990)
• Python (1991)
• Ruby (1993)
• CLOS (1994)
• Java (1995)
• JavaScript (1995)
• C# (2000)
Actualidad...
Mezca de paradigmas, metaprogramación,
programación distribuída...
• F# (2002)
• Groovy, Scala (2003)
• Clojure (2007)
• Dart (2011)
• Swift (2014)
Vista aérea de lenguajes
de desarrollo
Eduard Tomàs i Avellana
@eiximenis
Una clasificación de lenguajes...
Con / Sin tipos
Estáticos / Dinámicos
Fuerte / Débil
Nominal / Duck
Typing / Structural
Typing
Tipado
Imperativo
Secuencial
Estructurado
Procedural
OOP
Declarativo
Lógico
Funcional
Paradigma
Según paradigma
Imperativos secuenciales
El código se ejecuta en el orden en que está
escrito
Control de flujo muy reducido (salta x líneas, salta
a la línea x)
No hay encapsulación de ningún tipo (todas las
variables globales)
Ejemplo: Ensamblador
Imperativos estructurados
Basados en los secuenciales añaden secuencias
básicas de estructura:
Secuencias
Bucles (for, while, loop)
Condicionales (if/switch)
No hay encapsulación de ningún tipo
Ejemplo: Basic
Imperativos procedurales
Código es básicamente un conjunto de procedimientos
(funciones).
Un procedimiento concreto es el “inicial”
El programa consiste en una secuencia de llamadas a
procedimientos
Encapsulación de estado de procedimiento (variables
locales)
Ejemplo: C, Pascal
Imperativos orientados a objetos
Código consiste en un conjunto de objetos que colaboran entre ellos.
Objeto consiste en identidad, estado y funcionalidad
Encapsulación a nivel de objeto (estado)
Basados en clases (Smalltalk, Java, C#, C++, Ruby)
Usan clases para definir la funcionalidad y posibles valores de los estados de los
objetos
Basados en objetos (JavaScript)
Se definen objetos y se especifica su funcionalidad y estado ad-hoc para cada
objeto
Todos ellos soportan las características “básicas” de la OOP (herencia,
polimorfismo, ...)
Declarativos lógicos
Lenguajes basados en la lógica formal
Programa es un conjunto de sentencias en
lógica formal indicando hechos y reglas
sobre un determinado problema
Ejemplo: Prolog
Declarativos funcionales
Código basado en funciones entendiendo por
función el concepto matemático de ella: sin
cambios de estado, inmutabilidad, sin efectos
colaterales (función “pura”)
Muy basados en recursión y en tratamiento de
listas (influencia matemática)
Ejemplos: Scala, F#, LISP, Scheme, Haskell
Según tipado
Tipado estático vs dinámico
En tipado estático...
1. El tipo de una variable es fijo e inmutable
2. El tipo de una variable es conocido en algun momento antes de
usarse
En tipado dinámico...
1. El tipo de una variable es mutable
2. El tipo de una variable no tiene por que ser declarado ni conocido
de antemano
Tipado fuerte vs tipado débil
No hay definición clara sobre lo que es tipado fuerte y tipado débil.
En general decimos que un lenguaje tiene tipado débil si las reglas sobre lo
que se puede hacer con los tipos no son estrictas. Variables de distintos tipos
pueden ser mezcladas en distintas operaciones. En caso contrario decimos
que el lenguaje tiene un tipado fuerte.
Pero muchos lenguajes ofrecen comportamientos mixtos.
No debe confundirse nunca con lenguajes dinámicos o estáticos
Primera clasificación...
Tipado estático Tipado dinámico
Tipado fuerte Scala, Haskell, Java, C++, Java, C# Ruby
Tipado débil Objective-C, Visual Basic (variant) JavaScipt
Algunos lenguajes con tipado estático fuerte ofrecen características de
tipado estático débil (C# con conversiones de tipo, C/C++ con punteros
void, ...)
Algunos lenguajes con tipado estático ofrecen características de tipado
dinámico (C# con dynamic, Objective-C con id, Swift con Any, ...).
Duck typing
Paradigma típico de algunos lenguajes en el que la presencia de
determinados métodos y propiedades en un objeto determina su
validez semántica, en lugar de la relación de herencia que pueda tener
con otros objetos.
Se resume en la frase: “Si camina como un pato y grazna como un
pato, entonces es un pato”.
Muy común en lenguajes dinámicos
Structural typing
Sistema de tipos estático en el que la presencia de determinados
métodos y propiedades en una clase determina su validez semántica.
Dos tipos se consideran “iguales” si tienen las mismas propiedades y
métodos con independencia de donde se declaran.
Viene a ser el “equivalente” al Duck Typing para lenguajes con tipado
estático.
Ejemplo: C++ a través de templates, Ocaml, Scala

Más contenido relacionado

La actualidad más candente

Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
Brayhan Acosta
 
Unidad 2 expresiones regulares
Unidad 2 expresiones regularesUnidad 2 expresiones regulares
Unidad 2 expresiones regulares
ROSA IMELDA GARCIA CHI
 
Autómata de Pila
Autómata de Pila Autómata de Pila
Autómata de Pila
Edgar Jimenez
 
Circuitos Digitales - Contador ascendente y descendente con reset
Circuitos Digitales - Contador ascendente y descendente con resetCircuitos Digitales - Contador ascendente y descendente con reset
Circuitos Digitales - Contador ascendente y descendente con reset
Fernando Marcos Marcos
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
Angel Miguel Coria Lopez
 
Complemento a la base disminuida
Complemento a la base disminuidaComplemento a la base disminuida
Complemento a la base disminuidaRoberto Chen
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOWilmer Quintero
 
Modulo automatas-y-lenguajes-formales
Modulo automatas-y-lenguajes-formalesModulo automatas-y-lenguajes-formales
Modulo automatas-y-lenguajes-formales
EDNA ROCIO CORTES HERNANDEZ
 
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado Finito
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado FinitoMaquina de Estado Finito, Circuito Secuenciales y Automatas de Estado Finito
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado FinitoRosangela Perez
 
Los lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turingLos lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turing
Jonathan Bastidas
 
Unidad Arítmetica Lógica (ALU)
Unidad Arítmetica Lógica (ALU)Unidad Arítmetica Lógica (ALU)
Unidad Arítmetica Lógica (ALU)
David Ruiz
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de PilaPablo Guerra
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
Jacqui Venegas
 
Unidad ii analisisnumericosiv
Unidad ii analisisnumericosivUnidad ii analisisnumericosiv
Unidad ii analisisnumericosivCristian Escalona
 
APLICACION DE ALGEBRA BOOLEANA
APLICACION DE ALGEBRA BOOLEANAAPLICACION DE ALGEBRA BOOLEANA
APLICACION DE ALGEBRA BOOLEANA
Dariangel Contreras
 
Arquitectura de la memoria flash
Arquitectura de la memoria flashArquitectura de la memoria flash
Arquitectura de la memoria flash
YESENIA CETINA
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
Anel Sosa
 
Automatas de pila
Automatas de pilaAutomatas de pila
Automatas de pila
Rawel Luciano
 

La actualidad más candente (20)

Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Unidad 2 expresiones regulares
Unidad 2 expresiones regularesUnidad 2 expresiones regulares
Unidad 2 expresiones regulares
 
Autómata de Pila
Autómata de Pila Autómata de Pila
Autómata de Pila
 
Circuitos Digitales - Contador ascendente y descendente con reset
Circuitos Digitales - Contador ascendente y descendente con resetCircuitos Digitales - Contador ascendente y descendente con reset
Circuitos Digitales - Contador ascendente y descendente con reset
 
Codigo Hamming
Codigo HammingCodigo Hamming
Codigo Hamming
 
Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
Complemento a la base disminuida
Complemento a la base disminuidaComplemento a la base disminuida
Complemento a la base disminuida
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIO
 
Modulo automatas-y-lenguajes-formales
Modulo automatas-y-lenguajes-formalesModulo automatas-y-lenguajes-formales
Modulo automatas-y-lenguajes-formales
 
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado Finito
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado FinitoMaquina de Estado Finito, Circuito Secuenciales y Automatas de Estado Finito
Maquina de Estado Finito, Circuito Secuenciales y Automatas de Estado Finito
 
Los lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turingLos lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turing
 
Unidad Arítmetica Lógica (ALU)
Unidad Arítmetica Lógica (ALU)Unidad Arítmetica Lógica (ALU)
Unidad Arítmetica Lógica (ALU)
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de Pila
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
Unidad ii analisisnumericosiv
Unidad ii analisisnumericosivUnidad ii analisisnumericosiv
Unidad ii analisisnumericosiv
 
APLICACION DE ALGEBRA BOOLEANA
APLICACION DE ALGEBRA BOOLEANAAPLICACION DE ALGEBRA BOOLEANA
APLICACION DE ALGEBRA BOOLEANA
 
Codificación digital digital
Codificación digital digitalCodificación digital digital
Codificación digital digital
 
Arquitectura de la memoria flash
Arquitectura de la memoria flashArquitectura de la memoria flash
Arquitectura de la memoria flash
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Automatas de pila
Automatas de pilaAutomatas de pila
Automatas de pila
 

Destacado

Tema 4: Procesamiento paralelo.
Tema 4: Procesamiento paralelo.Tema 4: Procesamiento paralelo.
Tema 4: Procesamiento paralelo.
Manuel Fernandez Barcell
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
Elder Giron
 
MANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACIONMANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACION
morriz1
 
2.1 recursividad
2.1 recursividad2.1 recursividad
2.1 recursividad
erwin_alexander
 
Programación Orientada a Objeto
Programación Orientada a ObjetoProgramación Orientada a Objeto
Programación Orientada a Objetoismaelrubino
 
Azure functions
Azure functionsAzure functions
Azure functions
Eduard Tomàs
 
Procesamiento paralelo
Procesamiento paraleloProcesamiento paralelo
Procesamiento paralelo
warrionet
 
Recursividad
RecursividadRecursividad
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objeto
boncastell
 
Recursividad
RecursividadRecursividad
Recursividad
betzy
 
Cronologia de los Lenguajes de Programación
Cronologia de los Lenguajes de ProgramaciónCronologia de los Lenguajes de Programación
Cronologia de los Lenguajes de ProgramaciónIris Coronado
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
Franco Guamán
 
PARADIGMA IMPERATIVO
PARADIGMA IMPERATIVOPARADIGMA IMPERATIVO
PARADIGMA IMPERATIVO
Fredy Olaya
 
Normalizacion de bases de datos
Normalizacion de bases de datosNormalizacion de bases de datos
Normalizacion de bases de datos
Caro_Noirgean
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
Mayra Romero
 
Normalizacion de base de datos
Normalizacion de base de datosNormalizacion de base de datos
Normalizacion de base de datos
Sergio Sanchez
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)
michell_quitian
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
Cesar David Fernandez Grueso
 

Destacado (20)

Programación pararelo
Programación parareloProgramación pararelo
Programación pararelo
 
Procesamiento en paralelo
Procesamiento en paraleloProcesamiento en paralelo
Procesamiento en paralelo
 
Tema 4: Procesamiento paralelo.
Tema 4: Procesamiento paralelo.Tema 4: Procesamiento paralelo.
Tema 4: Procesamiento paralelo.
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
MANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACIONMANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACION
 
2.1 recursividad
2.1 recursividad2.1 recursividad
2.1 recursividad
 
Programación Orientada a Objeto
Programación Orientada a ObjetoProgramación Orientada a Objeto
Programación Orientada a Objeto
 
Azure functions
Azure functionsAzure functions
Azure functions
 
Procesamiento paralelo
Procesamiento paraleloProcesamiento paralelo
Procesamiento paralelo
 
Recursividad
RecursividadRecursividad
Recursividad
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objeto
 
Recursividad
RecursividadRecursividad
Recursividad
 
Cronologia de los Lenguajes de Programación
Cronologia de los Lenguajes de ProgramaciónCronologia de los Lenguajes de Programación
Cronologia de los Lenguajes de Programación
 
Programacion Modular
Programacion ModularProgramacion Modular
Programacion Modular
 
PARADIGMA IMPERATIVO
PARADIGMA IMPERATIVOPARADIGMA IMPERATIVO
PARADIGMA IMPERATIVO
 
Normalizacion de bases de datos
Normalizacion de bases de datosNormalizacion de bases de datos
Normalizacion de bases de datos
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
 
Normalizacion de base de datos
Normalizacion de base de datosNormalizacion de base de datos
Normalizacion de base de datos
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 

Similar a Vista aérea de los lenguajes de programación

Javaqert
JavaqertJavaqert
Programacion java
Programacion javaProgramacion java
Programacion java
AraceliFernndezSanto
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
Jose Gallardo
 
r124736.PPT
r124736.PPTr124736.PPT
r124736.PPT
DigitalesCreativos
 
2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación
oviedospablo
 
iNTRODUCCION AL LENGUAJE JAVA
iNTRODUCCION AL LENGUAJE  JAVAiNTRODUCCION AL LENGUAJE  JAVA
iNTRODUCCION AL LENGUAJE JAVA
Jesus Alex Haro
 
Introduccion java
Introduccion javaIntroduccion java
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
Pedro Contreras Flores
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
Edgardo Martinez
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programa
Ray-kun Olivera
 
Curso Java Inicial 2 - Introducción y Sintaxis
Curso Java Inicial  2 - Introducción y SintaxisCurso Java Inicial  2 - Introducción y Sintaxis
Curso Java Inicial 2 - Introducción y Sintaxis
Emilio Aviles Avila
 
Diapositivas de JAVA
Diapositivas de JAVADiapositivas de JAVA
Diapositivas de JAVA
Kelion Tadeo Santos
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
omar_guerrero
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?Antonio Ognio
 

Similar a Vista aérea de los lenguajes de programación (20)

Grupo1
Grupo1Grupo1
Grupo1
 
Javaqert
JavaqertJavaqert
Javaqert
 
Javaqert
JavaqertJavaqert
Javaqert
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 
Programacion java
Programacion javaProgramacion java
Programacion java
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
r124736.PPT
r124736.PPTr124736.PPT
r124736.PPT
 
2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación
 
iNTRODUCCION AL LENGUAJE JAVA
iNTRODUCCION AL LENGUAJE  JAVAiNTRODUCCION AL LENGUAJE  JAVA
iNTRODUCCION AL LENGUAJE JAVA
 
Java world
Java worldJava world
Java world
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion java
 
Baño
BañoBaño
Baño
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programa
 
Curso Java Inicial 2 - Introducción y Sintaxis
Curso Java Inicial  2 - Introducción y SintaxisCurso Java Inicial  2 - Introducción y Sintaxis
Curso Java Inicial 2 - Introducción y Sintaxis
 
Diapositivas de JAVA
Diapositivas de JAVADiapositivas de JAVA
Diapositivas de JAVA
 
Presentación1
Presentación1Presentación1
Presentación1
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
 

Más de Eduard Tomàs

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
Eduard Tomàs
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
Eduard Tomàs
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
Eduard Tomàs
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
Eduard Tomàs
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
Eduard Tomàs
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
Eduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
Eduard Tomàs
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
Eduard Tomàs
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
Eduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
Eduard Tomàs
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Eduard Tomàs
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
Eduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
Eduard Tomàs
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
Eduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
Eduard Tomàs
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
Eduard Tomàs
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
Eduard Tomàs
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)
Eduard Tomàs
 

Más de Eduard Tomàs (20)

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
 
JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)JavaScript in 2016 (Codemotion Rome)
JavaScript in 2016 (Codemotion Rome)
 

Último

Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
AlanL15
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
juanorejuela499
 
MODULOS INTEGRADOS.docx.....................................
MODULOS INTEGRADOS.docx.....................................MODULOS INTEGRADOS.docx.....................................
MODULOS INTEGRADOS.docx.....................................
Yisel56
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
KatiuskaDominguez2
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
SamuelGampley
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
Ecaresoft Inc.
 

Último (7)

Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
MODULOS INTEGRADOS.docx.....................................
MODULOS INTEGRADOS.docx.....................................MODULOS INTEGRADOS.docx.....................................
MODULOS INTEGRADOS.docx.....................................
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 

Vista aérea de los lenguajes de programación

  • 1. Historia de los lenguajes de programación Eduard Tomàs i Avellana @eiximenis
  • 2. Inicios... Charles Babbage (1791 – 1871) Ada Lovelace (1815 – 1852)
  • 3. Grace Murray Hopper 1906 - 1992 Inventó el primer compilador (A0) para el UNIVAC 1 en 1951 Popularizó la idea de lenguajes independientes de la máquina
  • 4. El primer bug Se encontró una arna atrapada en una válvula del Mark 2
  • 5. Primeros ordenadores • 1943 Colossus Mark 1,2,3 • 1946 ENIAC • Primer Turing completo • 1960 Circuito integrado • 1971 Microprocesador • 1981 IBM PC
  • 6. Turing completo Un ordenador es “turing completo” si tiene un poder computacional equivalente a la máquina universal de Turing • Si tuviese memória infinita • Si tuviese almacenamiento infinito Tesis Church-Turing: Todo algoritmo puede ser descrito mediante una máquina universal de Turing. Es el inicio de los ordenadores programables (arquitectura de Von Neumann)
  • 7. Lenguajes “padre” 1. Fortran (1957)  Algol, BASIC 2. ALGOL(1958)  Pascal, Modula 2, Simula 3. LISP (1958)  Clojure, Scheme 4. COBOL (1959) 5. Simula (1962, 67) Smalltalk, C++ 6. CPL (1963)  C, C++, Java, C#, ObjectiveC
  • 8. 70’s segunda generación • Pascal (1970) • C (1972) • Prolog (1972) • ML (1973) • Scheme (1975) • SQL (1978)
  • 9. 80’s – Imperativos al poder Se mejoran y combinan los paradigmas inventados en las décadas 60-70. • C++ (1980) • MATLAB (1984) • Eiffel (1985) • Erlang (1986) • Perl (1987)
  • 10. 90’s – Auge funcional • Haskell (1990) • Python (1991) • Ruby (1993) • CLOS (1994) • Java (1995) • JavaScript (1995) • C# (2000)
  • 11. Actualidad... Mezca de paradigmas, metaprogramación, programación distribuída... • F# (2002) • Groovy, Scala (2003) • Clojure (2007) • Dart (2011) • Swift (2014)
  • 12. Vista aérea de lenguajes de desarrollo Eduard Tomàs i Avellana @eiximenis
  • 13. Una clasificación de lenguajes... Con / Sin tipos Estáticos / Dinámicos Fuerte / Débil Nominal / Duck Typing / Structural Typing Tipado Imperativo Secuencial Estructurado Procedural OOP Declarativo Lógico Funcional Paradigma
  • 15. Imperativos secuenciales El código se ejecuta en el orden en que está escrito Control de flujo muy reducido (salta x líneas, salta a la línea x) No hay encapsulación de ningún tipo (todas las variables globales) Ejemplo: Ensamblador
  • 16. Imperativos estructurados Basados en los secuenciales añaden secuencias básicas de estructura: Secuencias Bucles (for, while, loop) Condicionales (if/switch) No hay encapsulación de ningún tipo Ejemplo: Basic
  • 17. Imperativos procedurales Código es básicamente un conjunto de procedimientos (funciones). Un procedimiento concreto es el “inicial” El programa consiste en una secuencia de llamadas a procedimientos Encapsulación de estado de procedimiento (variables locales) Ejemplo: C, Pascal
  • 18. Imperativos orientados a objetos Código consiste en un conjunto de objetos que colaboran entre ellos. Objeto consiste en identidad, estado y funcionalidad Encapsulación a nivel de objeto (estado) Basados en clases (Smalltalk, Java, C#, C++, Ruby) Usan clases para definir la funcionalidad y posibles valores de los estados de los objetos Basados en objetos (JavaScript) Se definen objetos y se especifica su funcionalidad y estado ad-hoc para cada objeto Todos ellos soportan las características “básicas” de la OOP (herencia, polimorfismo, ...)
  • 19. Declarativos lógicos Lenguajes basados en la lógica formal Programa es un conjunto de sentencias en lógica formal indicando hechos y reglas sobre un determinado problema Ejemplo: Prolog
  • 20. Declarativos funcionales Código basado en funciones entendiendo por función el concepto matemático de ella: sin cambios de estado, inmutabilidad, sin efectos colaterales (función “pura”) Muy basados en recursión y en tratamiento de listas (influencia matemática) Ejemplos: Scala, F#, LISP, Scheme, Haskell
  • 22. Tipado estático vs dinámico En tipado estático... 1. El tipo de una variable es fijo e inmutable 2. El tipo de una variable es conocido en algun momento antes de usarse En tipado dinámico... 1. El tipo de una variable es mutable 2. El tipo de una variable no tiene por que ser declarado ni conocido de antemano
  • 23. Tipado fuerte vs tipado débil No hay definición clara sobre lo que es tipado fuerte y tipado débil. En general decimos que un lenguaje tiene tipado débil si las reglas sobre lo que se puede hacer con los tipos no son estrictas. Variables de distintos tipos pueden ser mezcladas en distintas operaciones. En caso contrario decimos que el lenguaje tiene un tipado fuerte. Pero muchos lenguajes ofrecen comportamientos mixtos. No debe confundirse nunca con lenguajes dinámicos o estáticos
  • 24. Primera clasificación... Tipado estático Tipado dinámico Tipado fuerte Scala, Haskell, Java, C++, Java, C# Ruby Tipado débil Objective-C, Visual Basic (variant) JavaScipt Algunos lenguajes con tipado estático fuerte ofrecen características de tipado estático débil (C# con conversiones de tipo, C/C++ con punteros void, ...) Algunos lenguajes con tipado estático ofrecen características de tipado dinámico (C# con dynamic, Objective-C con id, Swift con Any, ...).
  • 25. Duck typing Paradigma típico de algunos lenguajes en el que la presencia de determinados métodos y propiedades en un objeto determina su validez semántica, en lugar de la relación de herencia que pueda tener con otros objetos. Se resume en la frase: “Si camina como un pato y grazna como un pato, entonces es un pato”. Muy común en lenguajes dinámicos
  • 26. Structural typing Sistema de tipos estático en el que la presencia de determinados métodos y propiedades en una clase determina su validez semántica. Dos tipos se consideran “iguales” si tienen las mismas propiedades y métodos con independencia de donde se declaran. Viene a ser el “equivalente” al Duck Typing para lenguajes con tipado estático. Ejemplo: C++ a través de templates, Ocaml, Scala