Functional Programming Essentials
-
Upload
kelley-robinson -
Category
Engineering
-
view
727 -
download
0
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.”
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
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