Functional Programming Essentials Engineering Team Lead @kelleyrobinson Kelley Robinson
Functional Programming Essentials
“Standardized” Ladder of Functional Programming really FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Functional Programming Essentials Engineering Team Lead @kelleyrobinson Kelley Robinson
Engineering Team Lead @kelleyrobinson Kelley Robinson
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials Why this matters FP In Scala Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials Why this matters FP In Scala Origins
Origins Paradigms FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
How did we get here? FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON “..in the same way that music is not a set of instruments, functional programming is not a set of abstractions that we need to learn and memorize.” - José Calderón Origins
The Lambda Calculus Alonzo Church (1930s) @KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON λx.x+1 variable function application expression Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON λx.x+1 scala> { x: Int => x + 1 } res1: Int => Int = <function1> Origins
The Lambda Calculus Alonzo Church (1930s) Theoretical foundation Pure functions - no state Not a programming language @KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
“Modern functional languages can be thought of as (nontrivial) embellishments of the lambda calculus” - Paul Hudak (1989)
Fortran John Backus (1954) FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
Logic Theory Machine Newell and Simon (1956) FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
Logic Theory Machine Newell and Simon (1956) IPL (Information Processing Language) List processing Recursion FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
Lisp John McCarthy (1958) FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
Functional abstraction Evolution of Functional Programming An Early History Higher level languages List processing & recursion Lisp popularizes paradigm FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON 1930s 1950s Origins
Paradigms Revisited FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials Why this matters FP In Scala Origins
Recursive Programming Techniques W.H. Burge (1975) FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
This was before… Polymorphic Type Inference Algebraic Data types Lazy languages Category-theoretic terminology Introduction: Burge School of Functional Programming FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON W.H. Burge (1975) Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Expressions Expressions Expressions Expressions Expressions Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON 3x2 + y3x2 + y Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON + (* (3, square(x)), y) 3x2 + y operators operands Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON + (* (3, square(2)), 1) for x = 2, y = 1 operators operands Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON + (* (3, 4), 1) operators operands for x = 2, y = 1 Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON + (12, 1) operators operands for x = 2, y = 1 Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON 13 for x = 2, y = 1 Essentials
Side Effects Changes outside of function scope Modifies state Not predictable FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Expressions Instead of statements Related: Pure functions Immutable data FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Referential transparency An expression can be replaced by its value without changing the program behavior FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Immutable data Avoid modifying state FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Expressions The programmer benefits Understanding Predictability Unit testing FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Data Structures Constructing and Deconstructing FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
Data Structures Constructing and Deconstructing 1. How do you make the data? 2. How do you take it apart? FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON sealed abstract class List[+A]
 case class Cons[A](head: A, tail: List[A]) extends List[A]
 case object Null extends List[Nothing]
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def listFunction(list: List[Int]) =
 list match {
 case Cons(x, xs) => // ... something that uses x and xs...
 case Null => // ... something that can’t use x and xs... 
 }
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def length(l: List[Int]): Int =
 l match {
 case Cons(x, xs) => 1 + length(xs)
 case Null => 0
 }
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def sum(l: List[Int]): Int =
 l match {
 case Cons(x, xs) => x + sum(xs)
 case Null => 0
 }
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def product(l: List[Int]): Int =
 l match {
 case Cons(x, xs) => x * product(xs)
 case Null => 1
 }
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def list[A, B](f: (A,B) => B, d: B, xs: List[A]): B =
 xs match {
 case Cons(y, ys) => f(y, list(f,d,ys))
 case Null => d
 }
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON def list[A, B](f: (A,B) => B, d: B, xs: List[A]): B def length ... = list((_, b) => 1 + b, 0, xs) 
 def sum ... = list((a, b) => a + b, 0, xs) def product ... = list((a, b) => a * b, 1, xs)
Recursive Programming Techniques W.H. Burge (1975) Expressions Data structures FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials Why this matters FP In Scala Origins
“Standardized” Ladder of Functional Programming really FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
“Modern” Functional Programming is cluttered with jargon FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Why this matters
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
“Jargon comes with an inherent cost. It needs to earn its place. (And it often does: jargon is necessary to discuss complex and domain- specific ideas.)” - Bonnie Eisenman FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON@KELLEYROBINSON Why this matters
“It is also a striking demonstration of the fact that even definitions of very high quality are often inadequate as sources of information on usage.”
Vocabulary and context are necessary for understanding
Ladder of Functional Programming really “Standardized”**Updated!🙄** FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON
Profunctor what? FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Why this matters
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON “It may be fun to brag about knowing how to use "embedded DSL with combinators," but is that really the best thing to help your startup succeed?” - Hacker News Why this matters
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Jargon is alienating Why this matters
Please. Stop. Saying This. Please. @KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS Why this matters
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Essentials Why this matters FP In Scala Origins
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON 🙅 FP In Scala
FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON Storing data val var Iterating map for loop pattern matching procedural statements Deconstructing data preferred possible FP In Scala
What about…? Cats…Scalaz…FREE MONADS!? Basics are built into Scala (think `map`, `fold`) Libraries have other syntactic sugar FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON FP In Scala
• Have fun • Promote understanding • Be kind @KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS
Thank You! @kelleyrobinson hello@krobinson.me
FUNCTIONAL PROGRAMMING ESSENTIALS Special thanks to • Sharethrough • José Calderón • Heather Miller • Bonnie Eisenman Resources • Mentioned in this talk: • Bonnie Eisenman on Scala Jargon • José Calderón's Burge School of Functional Programming • Conception, Evolution, and Application of Functional Programming Languages • Original LambdaConf ladder and Updated LambdaConf ladder • Vocabulary Processes • Further Reading & Watching: • Functional programming • Lambda calculus • John McCarthy - History of Lisp • Lambda Calculus - Computerphile • Mark Priestley - New Problems, New Paradigms • John Hughes, Mary Sheeran - Keynote: Why Functional Programming Matters • Vocabulary and Comprehension Research: • The Relationship between Reading Comprehension and Vocabulary Knowledge • The Relationship between Vocabulary Size and Reading Comprehension • Vocabulary and Word Study to Increase Comprehension in Content Areas • Why Vocabulary Instruction Matters • Effects of long-term vocabulary instruction on reading comprehension @KELLEYROBINSON
@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALSFUNCTIONAL PROGRAMMING ESSENTIALS Photography credits • Opening image • Solving imaginary scaling issues • Paradigms • Orchestra • Alonzo Church • Philip Wadler • Glitter • Fortran • Chess • A Lisp machine in the MIT Museum • 1975 SNL cast • Side effects • Escher print • Legos • Jargon • Child reading • University • The thinker • Jargon is alienating • Cat typing @KELLEYROBINSON

Functional Programming Essentials