Functional Programming Essentials

70
Functional Programming Essentials Engineering Team Lead @kelleyrobinson Kelley Robinson

Transcript of Functional Programming Essentials

Page 1: Functional Programming Essentials

Functional Programming

Essentials

Engineering Team Lead

@kelleyrobinson

Kelley Robinson

Page 2: Functional Programming Essentials

Functional Programming

Essentials

Page 3: Functional Programming Essentials
Page 4: Functional Programming Essentials

“Standardized” Ladder of Functional Programming

really

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 5: Functional Programming Essentials

Functional Programming

Essentials

Engineering Team Lead

@kelleyrobinson

Kelley Robinson

Page 6: Functional Programming Essentials

Engineering Team Lead

@kelleyrobinson

Kelley Robinson

Page 7: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Why this matters

FP In Scala

Origins

Page 8: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Why this matters

FP In Scala

Origins

Page 9: Functional Programming Essentials

Origins

Paradigms

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 10: Functional Programming Essentials

How did we get here?

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 11: Functional Programming Essentials

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

Page 12: Functional Programming Essentials

The Lambda Calculus Alonzo Church (1930s)

@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS

Origins

Page 13: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

λx.x+1

variable

function application

expression

Origins

Page 14: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

λx.x+1scala> { x: Int => x + 1 }res1: Int => Int = <function1>

Origins

Page 15: Functional Programming Essentials

The Lambda Calculus Alonzo Church (1930s)

Theoretical foundation

Pure functions - no state

Not a programming language

@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS

Origins

Page 16: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 17: Functional Programming Essentials

“Modern functional languages can be thought of as (nontrivial) embellishments of the lambda calculus”

- Paul Hudak (1989)

Page 18: Functional Programming Essentials

Fortran John Backus (1954)

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 19: Functional Programming Essentials

Logic Theory Machine Newell and Simon (1956)

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 20: Functional Programming Essentials

Logic Theory Machine Newell and Simon (1956)

IPL (Information Processing

Language)

List processing

Recursion

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 21: Functional Programming Essentials

Lisp John McCarthy (1958)

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 22: Functional Programming Essentials

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

Page 23: Functional Programming Essentials

Paradigms Revisited

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Origins

Page 24: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Why this matters

FP In Scala

Origins

Page 25: Functional Programming Essentials

Recursive Programming TechniquesW.H. Burge (1975)

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 26: Functional Programming 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

Page 27: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

ExpressionsExpressions

ExpressionsExpressions

Expressions

Essentials

Page 28: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

3x2 + y3x2 + y

Essentials

Page 29: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

+ (* (3, square(x)), y)

3x2 + y

operators

operands

Essentials

Page 30: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

+ (* (3, square(2)), 1)

for x = 2, y = 1

operators

operands

Essentials

Page 31: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

+ (* (3, 4), 1)

operators

operandsfor x = 2, y = 1

Essentials

Page 32: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

+ (12, 1)

operators

operandsfor x = 2, y = 1

Essentials

Page 33: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

13

for x = 2, y = 1

Essentials

Page 34: Functional Programming Essentials

Side Effects Changes outside of function scope

Modifies state

Not predictable

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 35: Functional Programming Essentials

Expressions Instead of statements

Related:

Pure functions

Immutable data

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 36: Functional Programming Essentials

Referential transparency An expression can be replaced by its value without changing the program behavior

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 37: Functional Programming Essentials

Immutable data Avoid modifying state

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 38: Functional Programming Essentials

Expressions The programmer benefits

Understanding

Predictability

Unit testing

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 39: Functional Programming Essentials

Data Structures Constructing and Deconstructing

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 40: Functional Programming 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

Page 41: Functional Programming 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]

Page 42: Functional Programming Essentials

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... }

Page 43: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

def length(l: List[Int]): Int = l match { case Cons(x, xs) => 1 + length(xs) case Null => 0 }

Page 44: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

def sum(l: List[Int]): Int = l match { case Cons(x, xs) => x + sum(xs) case Null => 0 }

Page 45: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

def product(l: List[Int]): Int = l match { case Cons(x, xs) => x * product(xs) case Null => 1 }

Page 46: Functional Programming Essentials

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 }

Page 47: Functional Programming Essentials

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)

Page 48: Functional Programming Essentials

Recursive Programming Techniques W.H. Burge (1975)

Expressions

Data structures

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Page 49: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 50: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Why this matters

FP In Scala

Origins

Page 51: Functional Programming Essentials

“Standardized” Ladder of Functional Programming

really

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 52: Functional Programming Essentials

“Modern” Functional Programming is cluttered with jargon

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Why this matters

Page 53: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 54: Functional Programming Essentials

“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

Page 55: Functional Programming Essentials
Page 56: Functional Programming Essentials

“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.”

Page 57: Functional Programming Essentials

Vocabulary and context are necessary

for understanding

Page 58: Functional Programming Essentials

Ladder of Functional Programming

really

“Standardized”**Updated!🙄**

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Page 59: Functional Programming Essentials

Profunctor what?

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Why this matters

Page 60: Functional Programming Essentials

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

Page 61: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Jargon is alienating

Why this matters

Page 62: Functional Programming Essentials

Please.

Stop.

Saying

This.

Please.

@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS

Why this matters

Page 63: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Essentials

Why this matters

FP In Scala

Origins

Page 64: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

🙅FP In Scala

Page 65: Functional Programming Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

Storing data val var

Iterating map for loop

pattern matching

procedural statementsDeconstructing data

preferred possible

FP In Scala

Page 66: Functional Programming Essentials

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

Page 67: Functional Programming Essentials

• Have fun

• Promote understanding

• Be kind

@KELLEYROBINSONFUNCTIONAL PROGRAMMING ESSENTIALS

Page 68: Functional Programming Essentials

Thank You! @kelleyrobinson

[email protected]

Page 69: Functional Programming Essentials

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

Page 70: Functional Programming Essentials

@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