SlideShare a Scribd company logo
1 of 26
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

More Related Content

What's hot

Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionJosé Antonio Sandoval Acosta
 
Control de concurrencias investigación
Control de concurrencias investigaciónControl de concurrencias investigación
Control de concurrencias investigaciónJhoel Dgez Garcia
 
Preguntas y respuestas Técnicas de SAP HANA
Preguntas y respuestas Técnicas  de SAP HANAPreguntas y respuestas Técnicas  de SAP HANA
Preguntas y respuestas Técnicas de SAP HANASergio Cannelli
 
Estados de un proceso
Estados de un procesoEstados de un proceso
Estados de un procesoi92almaa
 
Instalacion de cassandra
Instalacion de cassandraInstalacion de cassandra
Instalacion de cassandraLuis Alvarado
 
Arquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos OracleArquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos Oraclevinivaldivieso
 
Monitores-sistemas operativos
Monitores-sistemas operativosMonitores-sistemas operativos
Monitores-sistemas operativosDaniel Vargas
 
Modelo de desarrollo concurrente
Modelo de desarrollo concurrenteModelo de desarrollo concurrente
Modelo de desarrollo concurrentesamuel ospino
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Juan Anaya
 
Arquitectura y caracteristicas de los sistemas operativos windows
Arquitectura y caracteristicas de los sistemas operativos windowsArquitectura y caracteristicas de los sistemas operativos windows
Arquitectura y caracteristicas de los sistemas operativos windowsslipkdany21
 
Entidad relacion
Entidad relacionEntidad relacion
Entidad relacionadfc8
 

What's hot (20)

Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccion
 
Dominio de base de datos
Dominio de base de datosDominio de base de datos
Dominio de base de datos
 
Control de concurrencias investigación
Control de concurrencias investigaciónControl de concurrencias investigación
Control de concurrencias investigación
 
Preguntas y respuestas Técnicas de SAP HANA
Preguntas y respuestas Técnicas  de SAP HANAPreguntas y respuestas Técnicas  de SAP HANA
Preguntas y respuestas Técnicas de SAP HANA
 
Metodo espiral
Metodo espiralMetodo espiral
Metodo espiral
 
Estados de un proceso
Estados de un procesoEstados de un proceso
Estados de un proceso
 
Prueba de Caja Blanca
Prueba de Caja BlancaPrueba de Caja Blanca
Prueba de Caja Blanca
 
Instalacion de cassandra
Instalacion de cassandraInstalacion de cassandra
Instalacion de cassandra
 
Arquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos OracleArquitectura de Bases de Datos Oracle
Arquitectura de Bases de Datos Oracle
 
Noción de archivo real y virtual
Noción de archivo real y virtual Noción de archivo real y virtual
Noción de archivo real y virtual
 
Monitores-sistemas operativos
Monitores-sistemas operativosMonitores-sistemas operativos
Monitores-sistemas operativos
 
Modelo de desarrollo concurrente
Modelo de desarrollo concurrenteModelo de desarrollo concurrente
Modelo de desarrollo concurrente
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.
 
Arquitectura y caracteristicas de los sistemas operativos windows
Arquitectura y caracteristicas de los sistemas operativos windowsArquitectura y caracteristicas de los sistemas operativos windows
Arquitectura y caracteristicas de los sistemas operativos windows
 
Ejemplo rup
Ejemplo rupEjemplo rup
Ejemplo rup
 
Modelos concurrentes
Modelos concurrentesModelos concurrentes
Modelos concurrentes
 
Modelo Entidad Relacion
Modelo Entidad RelacionModelo Entidad Relacion
Modelo Entidad Relacion
 
Modos de Direccionamiento
Modos de DireccionamientoModos de Direccionamiento
Modos de Direccionamiento
 
TABLA DE SÍMBOLOS
TABLA DE SÍMBOLOSTABLA DE SÍMBOLOS
TABLA DE SÍMBOLOS
 
Entidad relacion
Entidad relacionEntidad relacion
Entidad relacion
 

Viewers also liked

Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacionElder Giron
 
MANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACIONMANUAL DE LENGUAJE DE PROGRAMACION
MANUAL DE LENGUAJE DE PROGRAMACIONmorriz1
 
Programación Orientada a Objeto
Programación Orientada a ObjetoProgramación Orientada a Objeto
Programación Orientada a Objetoismaelrubino
 
Procesamiento paralelo
Procesamiento paraleloProcesamiento paralelo
Procesamiento paralelowarrionet
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objetoboncastell
 
Recursividad
RecursividadRecursividad
Recursividadbetzy
 
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
 
PARADIGMA IMPERATIVO
PARADIGMA IMPERATIVOPARADIGMA IMPERATIVO
PARADIGMA IMPERATIVOFredy Olaya
 
Normalizacion de bases de datos
Normalizacion de bases de datosNormalizacion de bases de datos
Normalizacion de bases de datosCaro_Noirgean
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de DatosMayra Romero
 
Normalizacion de base de datos
Normalizacion de base de datosNormalizacion de base de datos
Normalizacion de base de datosSergio 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
 

Viewers also liked (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 to Vista aérea de los lenguajes de programación

Similar to 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?
 

More from 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'sEduard 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 KEDAEduard 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 KedaEduard 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 nuncaEduard 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 KEDAEduard 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 ServerlessEduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard 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 mundoEduard 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 aksEduard 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 quisieramosEduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbEduard 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 menosEduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?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 deviceEduard 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
 

More from 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)
 

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