esos raros lenguajes nuevos

Post on 03-Mar-2017

154 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

“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

bugshttp://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 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

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…

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

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

ElixirJosé 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

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

Go

sum := 0

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

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

}

HaskellComité

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

KotlinJetbrains

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

RustGraydon 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

ScalaMartin 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

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

top related