Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Haskell

Anler
November 17, 2016

Introducción a Haskell

Presentación de introducción a Haskell en Betabeers Madrid

Anler

November 17, 2016
Tweet

More Decks by Anler

Other Decks in Programming

Transcript

  1. Gracias a todos por venir y gracias a los organizadores

    de Betabeers por permitirnos dar esta charla de Haskell. ¡Para nosotros un gran placer!
  2. " Anler # Co-organizador del meetup Haskell Mad (comunidad de

    Haskell de Madrid). Tengo experiencia principalmente en el mundo de las aplicaciones web y he trabajado profesionalmente con PHP, Ruby, Python y JavaScript. Trabajo actualmente con Scala en Fidesmo y en mi tiempo libre con Haskell. Mi cuenta de twitter es @anler por si os interesa seguirme
  3. Mi estrategia para esta charla es dividirla en tres partes:

    1. Cuál es mi motivación
 2. Cómo Haskell me ayuda
 3. Uso conocido en la industria
  4. peor peor aún es que la mayor parte de la

    vida de una aplicación se dedica a mantenimiento…
  5. sinceramente me siento como un monocada vez que al cambiar

    una cosa romper 50 y que se de cuenta mi jefe mientras le hace una demo del producto a un potencial cliente muy importante
  6. Al principio hice lo que todos, busqué refugio en: -

    Las buenas prácticas 
 - TDD 
 - Software craftmanship
  7. Pero aún cuando aprendí todo lo que fui capaz para

    ser más riguroso y aún cuando aprendí a escribir tests suficientemente buenos, mi código seguía (y sigue) fallando
  8. –Edsger Dijkstra “Program testing can be used to show the

    presence of bugs, but never to show their absence!”
  9. Y es que con todo lo riguroso que pueda ser,

    solo puedo escribir tests para detectar solo los errores que sé que puedo cometer!
  10. Después de llevar un tiempo frustrado, infeliz, sintiéndome inútil, maldiciendo

    los clientes, maldiciendo el no poder trabajar con un equipo que “hiciese las cosas bien”... me di cuenta que quizás la culpa no era mía, ni de mis compañeros, ni del cliente…
  11. Sino es culpa de cómo entendemos y adoptamos las metodología.

    El problema que veo con el craftmanship es que pone toda la rigurosidad en los hombros del programador, nos exige que seamos disciplinados…
  12. Y es que no lo somos de forma natural, somos

    humanos, nos distingue la creatividad no la disciplina... las máquinas en cambio sí lo son!
  13. Es un paradigma de construcción de programas donde estos se

    construyen utilizando funciones matemáticas.
  14. ¿En la práctica qué significa programar con funciones matemáticas? 1.

    No se pueden modificar variables. 2. No se pueden modificar estructuras de datos. 3. No se pueden utilizar las excepciones. 4. No se puede escribir por la terminal. 5. No se puede escribir a un fichero. 6. No se puede dibujar en pantalla.
  15. La programación funcional es una restricción en la forma en

    la que escribimos programas, no en qué nuestros programas pueden expresar.
  16. main :: IO ()
 main = printHelloWorld
 
 printHelloWorld ::

    IO ()
 printHelloWorld = putStrLn helloMsg
 
 helloMsg :: String
 helloMsg = “Hello, World!”
  17. numbers = [1, 2, 3, 4, 5] oddNumbers = filter

    odd numbers incNumbers = map (+1) numbers sumNumbers = sum numbers
  18. data Bool = True | False (||) :: Bool ->

    Bool -> Bool False || y = y True || _ = True myOr = (||)
  19. add a b = a + b add1 = add

    1 three = add1 2 ((add 2) 3) // 5
  20. throwException = error “Booom!” neverFail = const “Haha!” neverFail throwException

    // “Haha” :: String throwException // *** Exception: Booom! //
  21. getLine :: IO String unwrap :: IO String -> String

    putStrLn :: String -> IO () putStrLn getLine ❌ putStrLn (unwrap getLine) ✅
  22. newtype MyInt = MyInt Int doSomethingToMyInt :: MyInt -> …

    doSomethingToMyInt 123 ❌ doSomethingToMyInt (MyInt 123) ✅
  23. 
 Bluespec SystemVerilog (BSV) es un lenguaje para diseño de

    semiconductores que es una extensión de Haskell
  24. Haskell es un lenguaje que cambiará la forma en la

    que piensas, está preparado para el uso industrial y te ayudará a construir software más robusto.
  25. Si estáis interesados en aprender más en Madrid contamos con

    una comunidad de entusiastas de Haskell: 
 Meetup Madrid: meetup.com/Haskell-MAD/ Y además un canal de Slack: Canal de Slack: haskellnautas.herokuapp.com