SlideShare une entreprise Scribd logo
1  sur  71
Télécharger pour lire hors ligne
Esos Raros Lenguajes
Nuevos
9 Desafíos en 9 Lenguajes de Programación
Primer Avance
9D9L
https://github.com/lnds/9d9l
http://www.lnds.net/blog/lnds/2016/1/9/esos-raros-
lenguajes-nuevos
¿Por qué?
“Y si trabajas al pedo

y estás haciendo algo nuevo,
adelante!”
“For many developers, the one-
language notion is a sign of lack of
professionalism […] The point here
is that programming languages do
affect the way you think about
programming, and learning new
languages can do a lot to help you
think about solving problems in
different ways” — Martin Fowler
“Temo al hombre
de un sólo
lenguaje de
programación”
Santo Tomás de Aquino
1252 DC
El programador políglota
Todos somos programadores
políglotas
Java Script
SQL
HTML
XML
JAVA
Alan Perlis
When Someone says,
“I want a programming
language in which I
need only say what I
want done”, give him a
lollipop.
Perlis
Languages
A language that doesn’t affect the way
you think about programming is not
worth knowing. — Alan Perlis
Cómo aprender un
lenguaje de
programación
ZX-81 Basic 1981
10 PRINT “INGRESE TEMPERATURA EN CELSIUS:”
20 INPUT C
30 LET F = (C * 9.0/5.0) + 32
40 PRINT “LA TEMPERATURA EN FARENHEIT ES:"+F
KRUN
Todo programa
arranca con
bugs
http://www.worldofspectrum.org/
ZX81BasicProgramming/
ZX81-FORTH BY DAVID HUSBAND
COPYRIGHT (c) 1983
: CTOF 9 * 5 / 32 + . ;
OK
: FTOC 32 - 5 * 9 / . ;
OK
77 FTOC
25 OK
FORTH
Reflection
Extensibility and Modularity
Concatenative Programming (Monoid)
Symetry (Invariance):
Everything is a Word
Word Executes
Word receives parameters exactly the same way another word
1985 Raftor
Programación Estructurada
Basado en FORTRAN
Nadie más en el mundo usa esto
PLP/PLOM
Pascal
Modula-2
Scheme
C
Prolog
Assembler IBM 360!
Ejemplo 1
How to solve it
“In order to translate a sentence from
English into French two things are
necessary. First, we must understand
thoroughly the English sentence. Second,
we must be familiar with the forms of
expression peculiar to the French language.
The situation is very similar when we
attempt to express in mathematical
symbols a condition proposed in words.
First, we must understand thoroughly the
condition. Second, we must be familiar with
the forms of mathematical expression.”


— G. Polya
¿Cómo aprender a
programar?
PROGRAMANDO
Project Euler
Matemáticas y Programación
"Project Euler exists to
encourage, challenge, and
develop the skills and
enjoyment of anyone with an
interest in the fascinating world
of mathematics."
https://projecteuler.net
Problemas Project Euler
Multiplos de 3 y 5: Encontrar la suma de todos los
múltiplos de 3 y 5 menores a 1.000
Encuentre la suma de los números de Fibonacci pares
que no excedan los 4.000.000
¿Cuál es el número primo 10.001?
Mi Desafío Personal
Mi Desafío Personal
«Estos son los mejores tiempos para ser desarrollador,
pero también son los peores tiempos para ser
desarrollador. Como dice Jano González, parece que
tenemos un nuevo paradigma: "Hacker News Driven
Development".
Todas las semanas, o quizás todos los días aparecen
nuevos Frameworks, Lenguajes de Programación,
Tecnologías en Hacker News y las nuevas generaciones
de desarrolladores, afectadas por el síndrome de déficit
atencional corren a re implementar su último proyecto
con la herramienta que tenga más likes.»
Mi Desafío Personal
«Pero, como dice Charly:
ya no quiero criticar,

sólo quiero ser un enfermero
Así que me propongo aliviar un poco esa angustia de
algunos desarrolladores que nos saben si vale la pena
aprender alguno de esos nuevos lenguajes que están
apareciendo o re apareciendo por todos lados.
Voy a asumir el siguiente desafío, voy a resolver 9 desafíos
de programación en 9 lenguajes de programación.»
Los 9 (+1) Lenguajes
CLOJURE
ERLANG
(ELIXIR)
F#
GO
HASKELL
KOTLIN
RUST
SCALA
SWIFT
Motivaciones
Programación de Sistemas: Go y Rust
La JVM: Scala, Clojure y Kotlin
Programación funcional: F# y Haskell
Apple Fanboy: Swift
Actores y Whatsapp: Erlang (y Elixir)
Taxonomía
Lenguajes Tipo D
Estructurados
Imperativos (Cómo)
Mutabilidad de estados
Programación de
Sistemas
Cercanos a la máquina
Lenguajes Tipo D
Go
Kotlin
Rust
Swift
Ejemplo 2
Go: un lenguaje tipo D
Lenguajes Tipo M
Funcionales
Declarativos (Qué)
Inmutabilidad de estado
Composición
Orientados al dato
Lenguajes Tipo M
Clojure
Haskell
Erlang
Elixir
Ejemplo 3
Clojure: un lenguaje tipo M
Lenguajes tipo O
Múltiples Paradigmas
Orientación a Objetos
Funcionales
Imperativos
Funciones <-> Objetos
Lenguajes tipo O
Scala
F#
Swift
Rust
Kotlin
Ejemplo 4
Scala: un lenguaje tipo O
Mi Desafío Personal
«La idea es crear desafíos que
permitan destacar las bondades
de algunos lenguajes y que sean
prácticos, que muestren
situaciones similares a
problemas que uno enfrenta en el
"mundo real”.»
¿y cómo vamos?
3 Desafíos completados
Repositorio GitHub: https://github.com/lnds/9d9l
2.600 lineas de código aproximadamente
108 Horas en 12 meses
Desafío 1: 24 horas
Desafío 2: 32 horas
Desafío 3: 52 horas
3 Desafíos completados
Desafío 1: Toque y Fama
Un juego interactivo usando la consola
Desafío 2: Weather Report
Reporte de tiempo usando paralelismo simple, invocando API Web
XML
Desafío 3: Vectores
Procesar un archivo de 1 millón de vectores numeréicos
ordenando y clasificando en el menor tiempo posible
Esos Raros
Lenguajes
Nuevos…
Clojure
Rich Hickey
2007
10 años
Versión Estable: 1.8
JVM, JS, CLR, Dinámico, Strong Typing
Licencia Eclipse
Clojure
(def edc {:nombre “Eduardo”, 

:apellido “Diaz”, 

:nick @LNDS})
(println “Hola” (:nombre persona) “ alias ” (persona :nick))
Clojure
(defn div-by? [n m] (zero? (mod n m))
(defn div-by-3-or-5? [n] 

(or (div-by? n 3) (div-by? n 5)))
(—> (range 1000) (filter div-by-3-or-5?) (reduce +))
Erlang
Joe Armstrong
1986
37 años
Versión Estable: 19.2
Dinámico, Strong Typing, BEAM
Apache License 2.0
Erlang
solve() ->
solve(1, 0).
solve(Number, Sum) when Number == 1000 ->
Sum;
solve(Number, Sum) when ((Number rem 3) == 0) or ((Number rem 5) == 0) ->
solve(Number + 1, Sum + Number);
solve(Number, Sum) ->
solve(Number + 1, Sum).
Elixir
José Valim
2011
6 años
Versión Estable: 1.4.0
Dinámico, Strong Typing, BEAM
Apache License 2.0
Elixir
1..999 

|> Enum.filter (fn(x) -> rem(x,3) == 0 || rem(x,5)==0 end)

|> Enum.sum
F#
Don Syme
2005
12 años
Versión Estable: 4.0.1.20
Estático, Strong Typing, Inferencia, CLR
Apache License 2.0
F#
[1..999] 

|> List.filter (fun n -> n % 5 == 0 || n % 3 == 0)

|> List.sum
Go
Robert Griesemer, Rob Pike, Ken Thompson
2009
12 años
Versión Estable: 1.7.4
Estático, Strong Typing, Inferred, Structural, Native Code
BSD Style
Go
sum := 0
	 for i := 0; i < 1000; i++ {
	 	 if i % 3 == 0 || i % 5 == 0 { sum += i }
	 }
Haskell
Comité
1990
27 años
Versión Estable: Haskell 2010
Estático, Strong Typing, Inferred, Native Code
BSD Style
Haskell
import Data.List (union)
problema_1 = sum (union [3,6..999] [5,10..999])
Kotlin
Jetbrains
2011
6 años
Versión Estable: Kotlin 1.0.6
Estático, Inferred, JVM
Apache 2
Kotlin
(1..999).asSequence()
.filter(dividesBy(3))
.filter(dividesBy(5))
.sum()
Rust
Graydon Hoare
2010
7 años
Versión Estable: 1.14
Estático, Strong, Inferred, Nominal, linear
Apache 2/ MIT
Rust
let mut sum = 0;
for i in range(1, 1000) {
if i % 3 == 0 || i % 5 == 0 {
sum += i;
}
}
sum
Scala
Martin Odersky
2004
12 años
Versión Estable: 2.12.1
Estático, Strong, Inferred, Structural, JVM
BSD
Scala
(1 until 1000)

.filter(n => n % 3 == 0 || n % 5 == 0)

.sum
Swift
Cris Later
2014
2 años
Versión Estable: 3.0.2
Estático, Strong, Inferred, Nativo
Apache 2
Swift
let filtered = (1..<1000).filter {
$0 % 3 == 0 || $0 % 5 == 0
}
filtered.reduce(0, combine: +)

Contenu connexe

En vedette

En vedette (11)

Challenge: Science, Technology, and Innovation and the Triple Bottom Line
Challenge: Science, Technology, and Innovation and the Triple Bottom LineChallenge: Science, Technology, and Innovation and the Triple Bottom Line
Challenge: Science, Technology, and Innovation and the Triple Bottom Line
 
Portafolio Modelado 3D
Portafolio Modelado 3DPortafolio Modelado 3D
Portafolio Modelado 3D
 
NESA DC 2017 Action Plan
NESA DC 2017 Action PlanNESA DC 2017 Action Plan
NESA DC 2017 Action Plan
 
Understand: The Global Goals
Understand: The Global GoalsUnderstand: The Global Goals
Understand: The Global Goals
 
Ramping Up Information and Communications Technology for Development
Ramping Up Information and Communications Technology for DevelopmentRamping Up Information and Communications Technology for Development
Ramping Up Information and Communications Technology for Development
 
Las fuerzas de equilibrio en la economía
Las fuerzas de equilibrio en la economíaLas fuerzas de equilibrio en la economía
Las fuerzas de equilibrio en la economía
 
Presupuesto de uso, costo, compra y mano de obra
Presupuesto de uso, costo, compra y mano de obraPresupuesto de uso, costo, compra y mano de obra
Presupuesto de uso, costo, compra y mano de obra
 
Smart Data 2017 #AI & #FutureofWork
Smart Data 2017 #AI & #FutureofWorkSmart Data 2017 #AI & #FutureofWork
Smart Data 2017 #AI & #FutureofWork
 
Musings - We are entering the age of the Über Super Computer
Musings - We are entering the age of the Über Super ComputerMusings - We are entering the age of the Über Super Computer
Musings - We are entering the age of the Über Super Computer
 
Mobile Security: Preparing for the 2017 Threat Landscape
Mobile Security: Preparing for the 2017 Threat LandscapeMobile Security: Preparing for the 2017 Threat Landscape
Mobile Security: Preparing for the 2017 Threat Landscape
 
R. VILLANO - FLOWERS (cd rom vol. 3 part 1 IT-2017)
R. VILLANO - FLOWERS (cd rom vol. 3 part 1  IT-2017)R. VILLANO - FLOWERS (cd rom vol. 3 part 1  IT-2017)
R. VILLANO - FLOWERS (cd rom vol. 3 part 1 IT-2017)
 

Similaire à Esos Raros Lenguajes Nuevos

Programación web introducción
Programación web introducciónProgramación web introducción
Programación web introducción
JuanisRramos
 
Programación Web Introducción
Programación Web IntroducciónProgramación Web Introducción
Programación Web Introducción
Lizanirara
 
Conceptos básicos Programacion
Conceptos básicos ProgramacionConceptos básicos Programacion
Conceptos básicos Programacion
Alfonso Mozko H
 

Similaire à Esos Raros Lenguajes Nuevos (20)

Clase02 paradigmas
Clase02 paradigmasClase02 paradigmas
Clase02 paradigmas
 
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
 
10 Tips para desarrollar tu lógica de programación
10 Tips para desarrollar tu lógica de programación10 Tips para desarrollar tu lógica de programación
10 Tips para desarrollar tu lógica de programación
 
Esos Raros Lenguajes Nuevos
Esos Raros Lenguajes NuevosEsos Raros Lenguajes Nuevos
Esos Raros Lenguajes Nuevos
 
Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programación
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programación
 
Generalidades sobre el Desarrollo de Software
Generalidades sobre el Desarrollo de SoftwareGeneralidades sobre el Desarrollo de Software
Generalidades sobre el Desarrollo de Software
 
POO
POOPOO
POO
 
C# for Beginners
C# for BeginnersC# for Beginners
C# for Beginners
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Programación web introducción
Programación web introducciónProgramación web introducción
Programación web introducción
 
Programación Web Introducción
Programación Web IntroducciónProgramación Web Introducción
Programación Web Introducción
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
METODOS DE ELEMENTOS DE PROGRAMACIÒN
METODOS DE ELEMENTOS DE PROGRAMACIÒNMETODOS DE ELEMENTOS DE PROGRAMACIÒN
METODOS DE ELEMENTOS DE PROGRAMACIÒN
 
Programacion
ProgramacionProgramacion
Programacion
 
Conceptos básicos Programacion
Conceptos básicos ProgramacionConceptos básicos Programacion
Conceptos básicos Programacion
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 

Plus de Eduardo Diaz

Plus de Eduardo Diaz (9)

Is Uncle Bob Wrong?
Is Uncle Bob Wrong?Is Uncle Bob Wrong?
Is Uncle Bob Wrong?
 
Devops meetup 21 de Junio 2017
Devops meetup 21 de Junio 2017Devops meetup 21 de Junio 2017
Devops meetup 21 de Junio 2017
 
El Viaje del Agente de Cambio
El Viaje del Agente de CambioEl Viaje del Agente de Cambio
El Viaje del Agente de Cambio
 
De lenguajes, estilo, arquitectura y bagatelas
De lenguajes, estilo, arquitectura y bagatelasDe lenguajes, estilo, arquitectura y bagatelas
De lenguajes, estilo, arquitectura y bagatelas
 
Devops meetup 10 diciembre 2014
Devops meetup 10 diciembre 2014 Devops meetup 10 diciembre 2014
Devops meetup 10 diciembre 2014
 
Creadores de universos dcc u de chile - agosto 2014
Creadores de universos   dcc u de chile - agosto 2014Creadores de universos   dcc u de chile - agosto 2014
Creadores de universos dcc u de chile - agosto 2014
 
La naturaleza del software FLISLO SCL 2014
La naturaleza del software FLISLO SCL 2014La naturaleza del software FLISLO SCL 2014
La naturaleza del software FLISLO SCL 2014
 
Creadores de universos StartechConf 2013
Creadores de universos StartechConf 2013Creadores de universos StartechConf 2013
Creadores de universos StartechConf 2013
 
Creadores de universos
Creadores de universosCreadores de universos
Creadores de universos
 

Dernier

Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 

Dernier (6)

Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 
Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

Esos Raros Lenguajes Nuevos