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

Functional Programming for Fun and Profit!!

Jenny Shih
November 18, 2022

Functional Programming for Fun and Profit!!

Presented at RubyConf Mini 2022

Jenny Shih

November 18, 2022
Tweet

More Decks by Jenny Shih

Other Decks in Technology

Transcript

  1. @jenny-codes
    Functional programming for fun
    and profit!!

    View Slide

  2. @jenny_codes https://github.com/readme/featured/functional-programming

    View Slide

  3. @jenny_codes Source: https://youtu.be/ADqLBc1vFwI

    View Slide

  4. @jenny_codes Source: https://giphy.com/gifs/emoji-idk-thinking-3o7buirYcmV5nSwIRW
    What is functional programming?

    View Slide

  5. @jenny_codes Source: https://giphy.com/gifs/emoji-idk-thinking-3o7buirYcmV5nSwIRW
    What is functional programming?
    Should I care about it
    if I just want to write Ruby code?

    View Slide

  6. Functional programming helps
    us write better Ruby code

    View Slide

  7. @jenny_codes
    Jenny Shih / 施靜樺

    View Slide

  8. @jenny_codes
    Jenny Shih / 施靜樺
    🇹🇼 Taiwan -> 🇨🇦 Canada


    💎 💧


    https://codecharms.me

    View Slide

  9. Programming paradigms
    A way to classify programming languages
    based on their features

    View Slide

  10. @jenny_codes
    Programming paradigms
    • Object Oriented Programming (OO)


    • Functional Programming (FP)

    View Slide

  11. Mental model

    View Slide

  12. @jenny_codes
    Value
    Time Behavior
    A program

    View Slide

  13. @jenny_codes

    View Slide

  14. @jenny_codes
    Value
    Behavior

    View Slide

  15. @jenny_codes

    View Slide

  16. @jenny_codes
    Time

    View Slide

  17. @jenny_codes
    Value
    Time Behavior
    A program
    State

    View Slide

  18. @jenny_codes
    Object
    An OO program
    Value Behavior
    Time Time

    View Slide

  19. @jenny_codes
    An OO program
    Object
    Value Behavior
    Object
    Value Behavior
    Object
    Value Behavior
    Time
    Time
    Time
    Time Time
    Time

    View Slide

  20. @jenny_codes
    A FP program
    Value Time
    Behavior

    View Slide

  21. @jenny_codes
    A FP program
    Value Time
    Behavior

    View Slide

  22. Immutability

    View Slide

  23. Immutability
    Don’t change a value once you initialize it.

    View Slide

  24. @jenny_codes
    Immutability

    View Slide

  25. @jenny_codes
    Immutability

    View Slide

  26. @jenny_codes
    Immutability

    View Slide

  27. @jenny_codes
    Immutability

    View Slide

  28. @jenny_codes Source: https://giphy.com/gifs/emoji-idk-thinking-3o7buirYcmV5nSwIRW
    Why?

    View Slide

  29. @jenny_codes
    Immutability: Why??
    • Peace of mind

    View Slide

  30. @jenny_codes
    Immutability: Why??

    View Slide

  31. @jenny_codes
    Immutability: Why??
    • Peace of mind

    View Slide

  32. @jenny_codes
    Immutability: Why??
    • Peace of mind


    • Eliminate shared state

    View Slide

  33. @jenny_codes
    Immutability: Why??
    • Peace of mind


    • Eliminate shared state

    View Slide

  34. @jenny_codes
    Immutability: How???

    View Slide

  35. @jenny_codes
    Immutability: How???
    • Provide a good reason for every value mutation.

    View Slide

  36. @jenny_codes
    Immutability: How???
    • Provide a good reason for every value mutation.


    • Use tools

    View Slide

  37. @jenny_codes

    View Slide

  38. @jenny_codes
    https://dry-rb.org/

    View Slide

  39. @jenny_codes
    Immutability: How???
    • Provide a good reason for every value mutation.


    • Use tools


    • `dry-struct`: https://dry-rb.org/gems/dry-struct/main/

    View Slide

  40. @jenny_codes
    Immutability: How???
    • Provide a good reason for every value mutation.


    • Use tools


    • `dry-struct`: https://dry-rb.org/gems/dry-struct/main/


    • `Data.de
    fi
    ne` in Ruby

    View Slide

  41. @jenny_codes

    View Slide

  42. @jenny_codes

    View Slide

  43. @jenny_codes https://dev.to/baweaver/new-in-ruby-32-datade
    fi
    ne-2819

    View Slide

  44. @jenny_codes
    Immutability: How???
    • Provide a good reason for every value mutation.


    • Use tools


    • `dry-struct`: https://dry-rb.org/gems/dry-struct/main/


    • `Data.de
    fi
    ne` in Ruby

    View Slide

  45. @jenny_codes
    A FP program
    Value Time
    Behavior

    View Slide

  46. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data

    View Slide

  47. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data

    View Slide

  48. Pure functions

    View Slide

  49. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  50. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  51. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  52. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  53. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  54. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  55. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  56. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  57. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  58. @jenny_codes
    Source: https://giphy.com/gifs/emoji-idk-thinking-3o7buirYcmV5nSwIRW
    Why?

    View Slide

  59. @jenny_codes
    “The problem with OO languages is they’ve got all this
    implicit environment that they carry around with them.
    You wanted a banana but what you got was a gorilla
    holding the banana and the entire jungle.”


    – Joe Armstrong, Creator of Erlang
    Pure functions: Why??

    View Slide

  60. @jenny_codes
    “The problem with OO languages is they’ve got all this
    implicit environment that they carry around with them.
    You wanted a banana but what you got was a gorilla
    holding the banana and the entire jungle.”


    – Joe Armstrong, Creator of Erlang
    Pure functions: Why??

    View Slide

  61. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    Source: https://thenounproject.com/icon/forest-5299391/
    Source: https://thenounproject.com/icon/monkey-298282/

    View Slide

  62. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    Source: https://thenounproject.com/icon/forest-5299391/
    Source: https://thenounproject.com/icon/monkey-298282/

    View Slide

  63. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤯

    View Slide

  64. @jenny_codes
    Pure functions: Why??
    No implicit environment!!

    View Slide

  65. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘

    View Slide

  66. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘🐛
    🔪

    View Slide

  67. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘🐛
    🔪
    🧪

    View Slide

  68. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘🐛
    🔪
    🧪 ✅

    View Slide

  69. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘🐛
    🔪
    🧪 ✅ ✌

    View Slide

  70. @jenny_codes
    Pure functions: Why??
    No implicit environment!!
    🤘🐛
    🔪
    🧪 ✅ ✌
    Source: https://www.ktiv.com/2022/10/07/nobel-peace-prize-awarded-human-rights-advocates/

    View Slide

  71. @jenny_codes
    Pure functions: How???

    View Slide

  72. @jenny_codes
    Pure functions: How???
    • Parameterization/Dependency Injections

    View Slide

  73. @jenny_codes
    Pure functions: Parameterization

    View Slide

  74. @jenny_codes
    Pure functions: Parameterization

    View Slide

  75. @jenny_codes
    Pure functions: Parameterization

    View Slide

  76. @jenny_codes
    Pure functions: Parameterization

    View Slide

  77. @jenny_codes
    Pure functions: Parameterization

    View Slide

  78. @jenny_codes
    Pure functions: Parameterization

    View Slide

  79. @jenny_codes
    Pure functions: Parameterization

    View Slide

  80. @jenny_codes
    Pure functions: Parameterization

    View Slide

  81. @jenny_codes
    Pure functions: Parameterization

    View Slide

  82. @jenny_codes
    Pure functions: Parameterization

    View Slide

  83. @jenny_codes
    Pure functions: How???
    • Parameterization/Dependency Injections


    • Transformation instead of mutation

    View Slide

  84. @jenny_codes
    Pure functions: Transformation over Mutation

    View Slide

  85. @jenny_codes
    Pure functions: Transformation over Mutation

    View Slide

  86. @jenny_codes
    Pure functions: Transformation over Mutation

    View Slide

  87. @jenny_codes
    1. Only depends on its input argument


    2. Does not mutate states
    (no side effects)
    A pure function

    View Slide

  88. @jenny_codes
    A pure function
    1. Only depends on its input argument ✅


    2. Does not mutate states
    (no side effects)

    View Slide

  89. @jenny_codes
    A pure function
    1. Only depends on its input argument ✅


    2. Does not mutate states ✅
    (no side effects)

    View Slide

  90. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data

    View Slide

  91. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions

    View Slide

  92. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions

    View Slide

  93. Concurrency

    View Slide

  94. @jenny_codes
    An OO program
    Object
    Value Behavior
    Object
    Value Behavior
    Object
    Value Behavior
    Time
    Time
    Time
    Time Time
    Time

    View Slide

  95. @jenny_codes
    An OO program
    Object
    Value Behavior
    Object
    Value Behavior
    Object
    Value Behavior
    Time
    Time
    Time
    Time Time
    Time
    Global Interpreter Lock
    🔐

    View Slide

  96. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency 💯

    View Slide

  97. @jenny_codes
    Elixir’s concurrency model: Actors
    Actor /
    Process
    Actor /
    Process
    Actor /
    Process

    View Slide

  98. @jenny_codes
    Elixir’s concurrency model: Actors
    Thread Thread Thread

    View Slide

  99. @jenny_codes
    “It’s multi-core age today. Concurrency is very important. With
    Ractor, along with Async Fiber, Ruby will be a real concurrent
    language.”


    — Matz


    Ruby’s concurrency abstraction: Ractor
    https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/

    View Slide

  100. @jenny_codes
    Ractor
    Ractor
    Ractor
    ︴︴︴
    ︴︴︴
    ︴︴︴
    Ruby’s concurrency abstraction: Ractor
    ︴︴︴= threads

    View Slide

  101. @jenny_codes
    Ractor
    Ractor
    Ractor
    🔐
    🔐
    🔐
    ︴︴︴
    ︴︴︴
    ︴︴︴
    🔐 = Global Interpreter Lock
    Ruby’s concurrency abstraction: Ractor
    ︴︴︴= threads

    View Slide

  102. @jenny_codes
    Ractor
    Ractor
    Ractor
    🔐
    🔐
    🔐
    ︴︴︴
    ︴︴︴
    ︴︴︴
    🔐 = Global Interpretation Lock
    Ruby’s concurrency abstraction: Ractor
    ︴︴︴= threads

    View Slide

  103. @jenny_codes

    View Slide

  104. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency

    View Slide

  105. Recap

    View Slide

  106. @jenny_codes
    We are defined not so much by what we
    can do, but what we don’t do.

    View Slide

  107. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency

    View Slide

  108. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency

    View Slide

  109. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency

    View Slide

  110. @jenny_codes
    A FP program
    Value Time
    Behavior
    Immutable data Pure functions Concurrency

    View Slide

  111. Functional programming helps
    us write better Ruby code

    View Slide

  112. @jenny_codes
    Resources: Functional programming mental model
    • Jose Valim’s ElixirConf 2017 Keynote by Jose Valim


    • Are we there yet by Rich Hickey


    • The language of programming by Anjana Vakil


    • Value Object by Martin Fowler

    View Slide

  113. @jenny_codes
    Resources: Functional programming architecture
    (That I didn’t get to talk about because I’d get too excited


    and run overtime)
    • Functional Architecture for the Practical Rubyist by Tim Riley


    • Functional web with Ruby by Luca Luigi


    • Boundaries by Gary Bernhardt


    • The Hanami Ruby framework


    • (Book) Domain Modelling Made Functional by Scott Wlaschin

    View Slide

  114. @jenny_codes
    Resources: Ruby docs
    • https://ruby-doc.org/core-3.2.0_preview2/Ractor.html


    • https://scoutapm.com/blog/ruby-ractor


    • https://dev.to/baweaver/new-in-ruby-32-datade
    fi
    ne-2819


    • https://github.com/ruby/ruby/pull/6353

    View Slide