Functional Programming Essentials

Post on 21-Apr-2017

729 views 0 download

Transcript of Functional Programming Essentials

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+1scala> { 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 TechniquesW.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

ExpressionsExpressions

ExpressionsExpressions

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

operandsfor x = 2, y = 1

Essentials

FUNCTIONAL PROGRAMMING ESSENTIALS @KELLEYROBINSON

+ (12, 1)

operators

operandsfor 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 statementsDeconstructing 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