Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Esos Raros Lenguajes Nuevos

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

  • Be the first to comment

  • Be the first to like this

Esos Raros Lenguajes Nuevos

  1. 1. Esos Raros Lenguajes Nuevos 9 Desafíos en 9 Lenguajes de Programación Primer Avance
  2. 2. 9D9L https://github.com/lnds/9d9l http://www.lnds.net/blog/lnds/2016/1/9/esos-raros- lenguajes-nuevos
  3. 3. ¿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
  4. 4. “Temo al hombre de un sólo lenguaje de programación” Santo Tomás de Aquino 1252 DC
  5. 5. El programador políglota Todos somos programadores políglotas Java Script SQL HTML XML JAVA
  6. 6. Alan Perlis When Someone says, “I want a programming language in which I need only say what I want done”, give him a lollipop.
  7. 7. Perlis Languages A language that doesn’t affect the way you think about programming is not worth knowing. — Alan Perlis
  8. 8. Cómo aprender un lenguaje de programación
  9. 9. 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
  10. 10. Todo programa arranca con bugs http://www.worldofspectrum.org/ ZX81BasicProgramming/
  11. 11. ZX81-FORTH BY DAVID HUSBAND COPYRIGHT (c) 1983 : CTOF 9 * 5 / 32 + . ; OK : FTOC 32 - 5 * 9 / . ; OK 77 FTOC 25 OK
  12. 12. 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
  13. 13. 1985 Raftor Programación Estructurada Basado en FORTRAN Nadie más en el mundo usa esto
  14. 14. PLP/PLOM Pascal Modula-2 Scheme C Prolog Assembler IBM 360!
  15. 15. Ejemplo 1
  16. 16. 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
  17. 17. ¿Cómo aprender a programar? PROGRAMANDO
  18. 18. 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
  19. 19. 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?
  20. 20. Mi Desafío Personal
  21. 21. 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.»
  22. 22. 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.»
  23. 23. Los 9 (+1) Lenguajes CLOJURE ERLANG (ELIXIR) F# GO HASKELL KOTLIN RUST SCALA SWIFT
  24. 24. 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)
  25. 25. Taxonomía
  26. 26. Lenguajes Tipo D Estructurados Imperativos (Cómo) Mutabilidad de estados Programación de Sistemas Cercanos a la máquina
  27. 27. Lenguajes Tipo D Go Kotlin Rust Swift
  28. 28. Ejemplo 2 Go: un lenguaje tipo D
  29. 29. Lenguajes Tipo M Funcionales Declarativos (Qué) Inmutabilidad de estado Composición Orientados al dato
  30. 30. Lenguajes Tipo M Clojure Haskell Erlang Elixir
  31. 31. Ejemplo 3 Clojure: un lenguaje tipo M
  32. 32. Lenguajes tipo O Múltiples Paradigmas Orientación a Objetos Funcionales Imperativos Funciones <-> Objetos
  33. 33. Lenguajes tipo O Scala F# Swift Rust Kotlin
  34. 34. Ejemplo 4 Scala: un lenguaje tipo O
  35. 35. 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”.»
  36. 36. ¿y cómo vamos?
  37. 37. 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
  38. 38. 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
  39. 39. Esos Raros Lenguajes Nuevos…
  40. 40. Clojure Rich Hickey 2007 10 años Versión Estable: 1.8 JVM, JS, CLR, Dinámico, Strong Typing Licencia Eclipse
  41. 41. Clojure (def edc {:nombre “Eduardo”, 
 :apellido “Diaz”, 
 :nick @LNDS}) (println “Hola” (:nombre persona) “ alias ” (persona :nick))
  42. 42. 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 +))
  43. 43. Erlang Joe Armstrong 1986 37 años Versión Estable: 19.2 Dinámico, Strong Typing, BEAM Apache License 2.0
  44. 44. 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).
  45. 45. Elixir José Valim 2011 6 años Versión Estable: 1.4.0 Dinámico, Strong Typing, BEAM Apache License 2.0
  46. 46. Elixir 1..999 
 |> Enum.filter (fn(x) -> rem(x,3) == 0 || rem(x,5)==0 end)
 |> Enum.sum
  47. 47. F# Don Syme 2005 12 años Versión Estable: 4.0.1.20 Estático, Strong Typing, Inferencia, CLR Apache License 2.0
  48. 48. F# [1..999] 
 |> List.filter (fun n -> n % 5 == 0 || n % 3 == 0)
 |> List.sum
  49. 49. 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
  50. 50. Go sum := 0 for i := 0; i < 1000; i++ { if i % 3 == 0 || i % 5 == 0 { sum += i } }
  51. 51. Haskell Comité 1990 27 años Versión Estable: Haskell 2010 Estático, Strong Typing, Inferred, Native Code BSD Style
  52. 52. Haskell import Data.List (union) problema_1 = sum (union [3,6..999] [5,10..999])
  53. 53. Kotlin Jetbrains 2011 6 años Versión Estable: Kotlin 1.0.6 Estático, Inferred, JVM Apache 2
  54. 54. Kotlin (1..999).asSequence() .filter(dividesBy(3)) .filter(dividesBy(5)) .sum()
  55. 55. Rust Graydon Hoare 2010 7 años Versión Estable: 1.14 Estático, Strong, Inferred, Nominal, linear Apache 2/ MIT
  56. 56. Rust let mut sum = 0; for i in range(1, 1000) { if i % 3 == 0 || i % 5 == 0 { sum += i; } } sum
  57. 57. Scala Martin Odersky 2004 12 años Versión Estable: 2.12.1 Estático, Strong, Inferred, Structural, JVM BSD
  58. 58. Scala (1 until 1000)
 .filter(n => n % 3 == 0 || n % 5 == 0)
 .sum
  59. 59. Swift Cris Later 2014 2 años Versión Estable: 3.0.2 Estático, Strong, Inferred, Nativo Apache 2
  60. 60. Swift let filtered = (1..<1000).filter { $0 % 3 == 0 || $0 % 5 == 0 } filtered.reduce(0, combine: +)

    Be the first to comment

    Login to see the comments

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

Views

Total views

464

On Slideshare

0

From embeds

0

Number of embeds

5

Actions

Downloads

1

Shares

0

Comments

0

Likes

0

×