Introduction to Functional Programming with Elixir
Unlearn you some OOP for great good
● OOP is not the only good way to design software ● Assignment & Control flow are not essential to programming ● Locks & Semaphores are not essential to concurrency
Learn you some Functional Programming for good
Functional Programming ● Another programming paradigm o Functions as first class citizens o Higher order functions o Immutable data o Pure functions
Pure Functions ● Stateless ● Produces the same output always for the same input ● No side effects
Functional Programming Languages ● Haskell ● Erlang/Elixir ● Common Lisp and more ● Scala ● JavaScript ● more
The functional programming Boom ● Physical constraints ● Need for: o Simple concurrency and parallelism o Easier vertical and horizontal scaling o Optimal utilization of resources
Emerging Languages ● Go ● Scala ● Erlang ● Elixir ● Rust ● Haskell ● Nim and more
Elixir? ● Built on top of the Erlang VM ● Compiles down to BEAM bytecode
Wth is Erlang? ● Designed for scalability and real-time systems ● Functional ● Simplifies concurrent programming ● Fault-tolerant (‘let it crash’ philosophy) ● Bytecode runs on the Erlang VM
Erlang is used by ● Facebook (Chat) ● Amazon ● Whatsapp ● Yahoo! ● Heroku ● Github ● and more
Story of Whatsapp ● 2 Million connections on a single node ● 450 Million users handled by 32 engineers ● Acquired by Facebook for $19 Billion ● Backend powered by Erlang
Elixir ● Dynamic ● Functional ● Built on top of the Erlang VM o implies Concurrent, Distributed and Fault-tolerant ● 1.0.0 was released in Sep 2014 ● Created by Jose Valim
Why use Elixir? ● All the benefits of Erlang ● Easily reuse Erlang libraries o No additional performance costs ● Better tooling, which allows for greater productivity ● Better syntax ● Simplified metaprogramming
Concurrency! Concurrency in erlang/elixir vs other languages is like branching in git vs subversion. ● Its simple and cheap
Everything is an expression
World of Elixir Data Modules Processes
Datatypes ● Atoms ● Integers ● Floating point numbers ● Binaries ● Tuples ● Lists ● Strings and Character lists ● Maps, Hashdicts and Keyword Lists
Modules ● Means of organizing code ● Contains all named functions
Functions ● Elixir functions are defined by: o Name o Arity ● Types of functions o Anonymous & Inline Anonymous  inherits scope o Named  does not inherit scope
Pattern Matching ● Assert, not assign ● Equals sign isn’t really assignment, its more like an assertion ● Behaviour of tuples, lists and variables in pattern matching is important to understand ● Ignore values using _ ● Force use variables using ^
Pipeline operator |> ● Formulating transformation of data ● Similar to Linux pipes ● Making functions/methods composable ● Data |> Method 1 |> Method 2 |> Method 3
Live Examples ● Sum, Multiply ● Factorial, Fibonacci, GCD ● List operations ● File operations ● Maps, Typed maps
Tooling ● Mix, a wonderful build system ● First class documentation o Inline documentation o Doctests ● Dependency Management using Mix ● Testing library included
Topics not covered ● Mix, `maven` for Elixir o compatible with hex, the `maven` for Erlang ● OTP ● Metaprogramming ● Protocols ● Structs ● Streams, Enumerables, Collectables
Elixir frameworks ● Phoenix: Web framework ● Ecto: LINQ for Elixir More: Awesome Elixir List
Questions? Interested? You can read more here: https://github.com/hashd/LearnStack/blob/master/notes/elixir.md

Introduction to functional programming, with Elixir

  • 1.
  • 2.
    Unlearn you someOOP for great good
  • 3.
    ● OOP isnot the only good way to design software ● Assignment & Control flow are not essential to programming ● Locks & Semaphores are not essential to concurrency
  • 4.
    Learn you someFunctional Programming for good
  • 5.
    Functional Programming ● Anotherprogramming paradigm o Functions as first class citizens o Higher order functions o Immutable data o Pure functions
  • 6.
    Pure Functions ● Stateless ●Produces the same output always for the same input ● No side effects
  • 7.
    Functional Programming Languages ●Haskell ● Erlang/Elixir ● Common Lisp and more ● Scala ● JavaScript ● more
  • 8.
    The functional programmingBoom ● Physical constraints ● Need for: o Simple concurrency and parallelism o Easier vertical and horizontal scaling o Optimal utilization of resources
  • 9.
    Emerging Languages ● Go ●Scala ● Erlang ● Elixir ● Rust ● Haskell ● Nim and more
  • 10.
    Elixir? ● Built ontop of the Erlang VM ● Compiles down to BEAM bytecode
  • 11.
    Wth is Erlang? ●Designed for scalability and real-time systems ● Functional ● Simplifies concurrent programming ● Fault-tolerant (‘let it crash’ philosophy) ● Bytecode runs on the Erlang VM
  • 12.
    Erlang is usedby ● Facebook (Chat) ● Amazon ● Whatsapp ● Yahoo! ● Heroku ● Github ● and more
  • 13.
    Story of Whatsapp ●2 Million connections on a single node ● 450 Million users handled by 32 engineers ● Acquired by Facebook for $19 Billion ● Backend powered by Erlang
  • 14.
    Elixir ● Dynamic ● Functional ●Built on top of the Erlang VM o implies Concurrent, Distributed and Fault-tolerant ● 1.0.0 was released in Sep 2014 ● Created by Jose Valim
  • 15.
    Why use Elixir? ●All the benefits of Erlang ● Easily reuse Erlang libraries o No additional performance costs ● Better tooling, which allows for greater productivity ● Better syntax ● Simplified metaprogramming
  • 16.
    Concurrency! Concurrency in erlang/elixirvs other languages is like branching in git vs subversion. ● Its simple and cheap
  • 17.
    Everything is anexpression
  • 18.
  • 19.
    Datatypes ● Atoms ● Integers ●Floating point numbers ● Binaries ● Tuples ● Lists ● Strings and Character lists ● Maps, Hashdicts and Keyword Lists
  • 20.
    Modules ● Means oforganizing code ● Contains all named functions
  • 21.
    Functions ● Elixir functionsare defined by: o Name o Arity ● Types of functions o Anonymous & Inline Anonymous  inherits scope o Named  does not inherit scope
  • 22.
    Pattern Matching ● Assert,not assign ● Equals sign isn’t really assignment, its more like an assertion ● Behaviour of tuples, lists and variables in pattern matching is important to understand ● Ignore values using _ ● Force use variables using ^
  • 23.
    Pipeline operator |> ●Formulating transformation of data ● Similar to Linux pipes ● Making functions/methods composable ● Data |> Method 1 |> Method 2 |> Method 3
  • 24.
    Live Examples ● Sum,Multiply ● Factorial, Fibonacci, GCD ● List operations ● File operations ● Maps, Typed maps
  • 25.
    Tooling ● Mix, awonderful build system ● First class documentation o Inline documentation o Doctests ● Dependency Management using Mix ● Testing library included
  • 26.
    Topics not covered ●Mix, `maven` for Elixir o compatible with hex, the `maven` for Erlang ● OTP ● Metaprogramming ● Protocols ● Structs ● Streams, Enumerables, Collectables
  • 27.
    Elixir frameworks ● Phoenix:Web framework ● Ecto: LINQ for Elixir More: Awesome Elixir List
  • 28.
    Questions? Interested? You canread more here: https://github.com/hashd/LearnStack/blob/master/notes/elixir.md