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

Functional programming *isn't* scary

Functional programming *isn't* scary

A talk I gave on the 15th of May at the Computer Science Dept of UCT.

Robert Stuttaford

May 15, 2013
Tweet

More Decks by Robert Stuttaford

Other Decks in Programming

Transcript

  1. The trouble with having an open
    mind, of course, is that people
    will insist on coming along and
    trying to put things in it.
    Terry Pratchett
    Wednesday 15 May 13

    View Slide

  2. I’m Robert Stuttaford
    I like coding, sleep, and thinking about thinking
    Chief Technical at Cognician
    Talk notes and code here:
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  3. Functional programming
    isn’t scary
    (today’s thing)
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  4. http://goo.gl/b9JkF
    So. Just what is it?
    Quite simply, functional programming
    concerns and facilitates the application
    and composition of functions.
    Yes. That’s it. Almost.
    Wednesday 15 May 13

    View Slide

  5. http://goo.gl/b9JkF
    So. Just what is it?
    For a language to be considered functional, its
    notion of ‘function’ must be first-class:
    The functions of a language must be able to be
    stored, passed, and returned just like any
    other piece of data within that language.
    Wednesday 15 May 13

    View Slide

  6. Clojure, a modern Lisp
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  7. http://goo.gl/b9JkF
    Lisp? Err, what?
    • From 1958. Yes, 1958.
    • Designed by John McCarthy. Thanks John!
    • Lisp code is expressed as Lisp data structures.
    Allows for macros, where you
    can put code in your code so
    you can code as you code.
    This is ‘homoiconicity’.
    Wednesday 15 May 13

    View Slide

  8. http://goo.gl/b9JkF
    Lisp? Err, what?
    • Expressed as s-expressions, which represent
    code as a series of nested lists, or tree
    structures.
    Wednesday 15 May 13

    View Slide

  9. http://goo.gl/b9JkF
    Lisp? Err, what?
    • Progenitor of:
    • If, then, else conditional.
    • Automatic garbage collection.
    • An astonishing amount of parenthesis.
    • Didn’t take off because hardware
    sucked back then.
    Wednesday 15 May 13

    View Slide

  10. http://goo.gl/b9JkF
    Why is Clojure ‘modern’?
    • General-purpose, dynamic, functional language.
    • Designed for concurrency - use multiple cores.
    • Symbiotic with JVM (and CLR, JavaScript).
    • Just 6 years old.
    • AWESOME open-source community. Seriously.
    Wednesday 15 May 13

    View Slide

  11. http://goo.gl/b9JkF
    The Clojure philosophy
    • Keep it simple. Ok, how?
    • Don’t complect state and behaviour.
    • Compose small, usually pure functions.
    • Immutable, persistent data structures.
    • Be explicit about identity, values, and state.
    Wednesday 15 May 13

    View Slide

  12. The truth may be out there, but
    the lies are inside your head.
    Terry Pratchett, Hogfather
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  13. OOPs vs FP
    • Defines classes with
    properties, and methods
    that alter them in place.
    • Composition requires
    work: interfaces. Yay.
    • Hides data away inside
    type hierarchy.
    • Noun-centric approach
    to problem solving.
    • Defines functions that
    transform generic data
    structures.
    • Composition is simple
    and natural.
    • Exposes data.
    • Verb-centric approach
    to problem solving.
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  14. http://goo.gl/b9JkF
    ‘Pure’ functions?
    • Pure functions are simply functions that
    operate only on their inputs without causing
    side-effects.
    • A pure function will always return the same
    result for the same inputs.
    • Any time a function alters state or performs
    I/O, it is impure; it causes side-effects.
    Wednesday 15 May 13

    View Slide

  15. Functional Composition
    A demo.
    But first: who’s read Pratchett?
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  16. Immutable Data
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  17. http://goo.gl/b9JkF
    Immutable Data
    Consider this JavaScript:
    We can’t know that for sure! doSomethingWith
    might have doneSomethingTo our dear witches!
    Wednesday 15 May 13

    View Slide

  18. http://goo.gl/b9JkF
    Immutable data
    • In Clojure, locals are immutable.
    • This means, once a value exists, it can not be
    changed.
    • You can change what value your local binding
    pointing at, but you can’t alter that value.
    • Clojure’s let special form provides the ability
    to create lexical bindings.
    Wednesday 15 May 13

    View Slide

  19. Immutable data
    A let special form demo.
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  20. http://goo.gl/b9JkF
    Immutable data
    • “So, I can’t alter data.
    How do I, you know, alter data?”
    • Functions return a copy of the data you provide
    with the transformations applied.
    • With the capability let provides, you can keep
    (or discard) successive values of your data as
    you transform it, without affecting that data for
    any other consumers of it. Great for concurrency!
    Wednesday 15 May 13

    View Slide

  21. http://goo.gl/b9JkF
    Immutable data
    • “Altered copies? Whoa. That must eat memory!
    That’s a performance no-no!”
    • Clojure’s immutable data structures are
    persistent; because they are immutable, they can
    share internal structure! Check it out:
    Wednesday 15 May 13

    View Slide

  22. Ok, fine.
    But what about mutable data?
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  23. “Look, that's why there's rules,
    understand? So that you think
    before you break 'em.”
    Terry Pratchett, Thief of Time
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  24. http://goo.gl/b9JkF
    Mutable data, or ‘state’
    • By using an immutable-first data orientation,
    Clojure forces you to think carefully about how
    and when your state changes.
    • When you can’t avoid it, Clojure provides four
    distinct mechanisms - the reference types -
    which allow changing state in a controlled
    manner.
    Wednesday 15 May 13

    View Slide

  25. http://goo.gl/b9JkF
    In Summary
    • Functional programming is objectively simpler
    than OOPs, and is therefore easier to do.
    • Clojure is a great modern FP language that you
    can use for just about anything.
    • Cats are awesome. And bacon. Bacon is
    awesome.
    Wednesday 15 May 13

    View Slide

  26. Phew. Ok. I’m done!
    Any questions? :-)
    http://goo.gl/b9JkF
    Wednesday 15 May 13

    View Slide

  27. http://goo.gl/b9JkF
    Cape Town
    Clojure User Group
    • We’re having a meet this Saturday, May 18th from 9am at
    codebridge.co.za.
    • We’ll properly introduce Clojure, live-code a small web app,
    and take a look at ClojureScript and Datomic - a new
    database built on the same principles as Clojure!
    • Come join us!
    • Follow @clj_ug_ct on Twitter or visit
    http://www.siliconcape.com/group/clojure-ct
    Wednesday 15 May 13

    View Slide