esos raros lenguajes nuevos

71
Esos Raros Lenguajes Nuevos 9 Desafíos en 9 Lenguajes de Programación Primer Avance

Upload: eduardo-diaz

Post on 03-Mar-2017

148 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Esos Raros Lenguajes Nuevos

Esos Raros Lenguajes Nuevos

9 Desafíos en 9 Lenguajes de Programación Primer Avance

Page 2: Esos Raros Lenguajes Nuevos

9D9L

https://github.com/lnds/9d9l

http://www.lnds.net/blog/lnds/2016/1/9/esos-raros-lenguajes-nuevos

Page 3: Esos Raros Lenguajes Nuevos

¿Por qué?

“Y si trabajas al pedoy 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

Page 4: Esos Raros Lenguajes Nuevos
Page 5: Esos Raros Lenguajes Nuevos

“Temo al hombre de un sólo

lenguaje de programación”

Santo Tomás de Aquino

1252 DC

Page 6: Esos Raros Lenguajes Nuevos

El programador políglota

Todos somos programadores políglotas

Java Script

SQL

HTML

XML

JAVA

Page 7: Esos Raros Lenguajes Nuevos
Page 8: Esos Raros Lenguajes Nuevos
Page 9: Esos Raros Lenguajes Nuevos

Alan Perlis

When Someone says, “I want a programming language in which I need only say what I want done”, give him a lollipop.

Page 10: Esos Raros Lenguajes Nuevos
Page 11: Esos Raros Lenguajes Nuevos
Page 12: Esos Raros Lenguajes Nuevos

Perlis Languages

A language that doesn’t affect the way you think about programming is not

worth knowing. — Alan Perlis

Page 13: Esos Raros Lenguajes Nuevos

Cómo aprender un lenguaje de

programación

Page 14: Esos Raros Lenguajes Nuevos
Page 15: Esos Raros Lenguajes Nuevos

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

Page 16: Esos Raros Lenguajes Nuevos

Todo programa arranca con

bugshttp://www.worldofspectrum.org/

ZX81BasicProgramming/

Page 17: Esos Raros Lenguajes Nuevos
Page 18: Esos Raros Lenguajes Nuevos
Page 19: Esos Raros Lenguajes Nuevos

ZX81-FORTH BY DAVID HUSBAND COPYRIGHT (c) 1983

: CTOF 9 * 5 / 32 + . ; OK

: FTOC 32 - 5 * 9 / . ; OK

77 FTOC

25 OK

Page 20: Esos Raros Lenguajes Nuevos

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

Page 21: Esos Raros Lenguajes Nuevos
Page 22: Esos Raros Lenguajes Nuevos

1985 Raftor

Programación Estructurada

Basado en FORTRAN

Nadie más en el mundo usa esto

Page 23: Esos Raros Lenguajes Nuevos

PLP/PLOM

Pascal

Modula-2

Scheme

C

Prolog

Assembler IBM 360!

Page 24: Esos Raros Lenguajes Nuevos
Page 25: Esos Raros Lenguajes Nuevos

Ejemplo 1

Page 26: Esos Raros Lenguajes Nuevos

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

Page 27: Esos Raros Lenguajes Nuevos

¿Cómo aprender a programar?

PROGRAMANDO

Page 28: Esos Raros Lenguajes Nuevos

Project EulerMatemá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

Page 29: Esos Raros Lenguajes Nuevos

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?

Page 30: Esos Raros Lenguajes Nuevos

Mi Desafío Personal

Page 31: Esos Raros Lenguajes Nuevos

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.»

Page 32: Esos Raros Lenguajes Nuevos

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.»

Page 33: Esos Raros Lenguajes Nuevos

Los 9 (+1) Lenguajes

CLOJURE

ERLANG

(ELIXIR)

F#

GO

HASKELL

KOTLIN

RUST

SCALA

SWIFT

Page 34: Esos Raros Lenguajes Nuevos

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)

Page 35: Esos Raros Lenguajes Nuevos

Taxonomía

Page 36: Esos Raros Lenguajes Nuevos
Page 37: Esos Raros Lenguajes Nuevos

Lenguajes Tipo D

Estructurados

Imperativos (Cómo)

Mutabilidad de estados

Programación de Sistemas

Cercanos a la máquina

Page 38: Esos Raros Lenguajes Nuevos

Lenguajes Tipo D

Go

Kotlin

Rust

Swift

Page 39: Esos Raros Lenguajes Nuevos

Ejemplo 2

Go: un lenguaje tipo D

Page 40: Esos Raros Lenguajes Nuevos

Lenguajes Tipo M

Funcionales

Declarativos (Qué)

Inmutabilidad de estado

Composición

Orientados al dato

Page 41: Esos Raros Lenguajes Nuevos

Lenguajes Tipo M

Clojure

Haskell

Erlang

Elixir

Page 42: Esos Raros Lenguajes Nuevos

Ejemplo 3

Clojure: un lenguaje tipo M

Page 43: Esos Raros Lenguajes Nuevos

Lenguajes tipo O

Múltiples Paradigmas

Orientación a Objetos

Funcionales

Imperativos

Funciones <-> Objetos

Page 44: Esos Raros Lenguajes Nuevos

Lenguajes tipo O

Scala

F#

Swift

Rust

Kotlin

Page 45: Esos Raros Lenguajes Nuevos

Ejemplo 4

Scala: un lenguaje tipo O

Page 46: Esos Raros Lenguajes Nuevos

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”.»

Page 47: Esos Raros Lenguajes Nuevos

¿y cómo vamos?

Page 48: Esos Raros Lenguajes Nuevos

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

Page 49: Esos Raros Lenguajes Nuevos

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

Page 50: Esos Raros Lenguajes Nuevos

Esos Raros Lenguajes Nuevos…

Page 51: Esos Raros Lenguajes Nuevos

ClojureRich Hickey

2007

10 años

Versión Estable: 1.8

JVM, JS, CLR, Dinámico, Strong Typing Licencia Eclipse

Page 52: Esos Raros Lenguajes Nuevos

Clojure

(def edc {:nombre “Eduardo”, :apellido “Diaz”, :nick @LNDS})

(println “Hola” (:nombre persona) “ alias ” (persona :nick))

Page 53: Esos Raros Lenguajes Nuevos

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 +))

Page 54: Esos Raros Lenguajes Nuevos

ErlangJoe Armstrong

1986

37 años

Versión Estable: 19.2

Dinámico, Strong Typing, BEAM

Apache License 2.0

Page 55: Esos Raros Lenguajes Nuevos

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).

Page 56: Esos Raros Lenguajes Nuevos

ElixirJosé Valim

2011

6 años

Versión Estable: 1.4.0

Dinámico, Strong Typing, BEAM

Apache License 2.0

Page 57: Esos Raros Lenguajes Nuevos

Elixir

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

Page 58: Esos Raros Lenguajes Nuevos

F#Don Syme

2005

12 años

Versión Estable: 4.0.1.20

Estático, Strong Typing, Inferencia, CLR

Apache License 2.0

Page 59: Esos Raros Lenguajes Nuevos

F#

[1..999] |> List.filter (fun n -> n % 5 == 0 || n % 3 == 0) |> List.sum

Page 60: Esos Raros Lenguajes Nuevos

GoRobert 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

Page 61: Esos Raros Lenguajes Nuevos

Go

sum := 0

for i := 0; i < 1000; i++ {

if i % 3 == 0 || i % 5 == 0 { sum += i }

}

Page 62: Esos Raros Lenguajes Nuevos

HaskellComité

1990

27 años

Versión Estable: Haskell 2010

Estático, Strong Typing, Inferred, Native Code

BSD Style

Page 63: Esos Raros Lenguajes Nuevos

Haskell

import Data.List (union)

problema_1 = sum (union [3,6..999] [5,10..999])

Page 64: Esos Raros Lenguajes Nuevos

KotlinJetbrains

2011

6 años

Versión Estable: Kotlin 1.0.6

Estático, Inferred, JVM

Apache 2

Page 65: Esos Raros Lenguajes Nuevos

Kotlin

(1..999).asSequence()

.filter(dividesBy(3))

.filter(dividesBy(5))

.sum()

Page 66: Esos Raros Lenguajes Nuevos

RustGraydon Hoare

2010

7 años

Versión Estable: 1.14

Estático, Strong, Inferred, Nominal, linear

Apache 2/ MIT

Page 67: Esos Raros Lenguajes Nuevos

Rust

let mut sum = 0;

for i in range(1, 1000) {

if i % 3 == 0 || i % 5 == 0 {

sum += i;

}

}

sum

Page 68: Esos Raros Lenguajes Nuevos

ScalaMartin Odersky

2004

12 años

Versión Estable: 2.12.1

Estático, Strong, Inferred, Structural, JVM

BSD

Page 69: Esos Raros Lenguajes Nuevos

Scala

(1 until 1000) .filter(n => n % 3 == 0 || n % 5 == 0) .sum

Page 70: Esos Raros Lenguajes Nuevos

SwiftCris Later

2014

2 años

Versión Estable: 3.0.2

Estático, Strong, Inferred, Nativo

Apache 2

Page 71: Esos Raros Lenguajes Nuevos

Swift

let filtered = (1..<1000).filter {

$0 % 3 == 0 || $0 % 5 == 0

}

filtered.reduce(0, combine: +)