Presented at #ServerlessConf 2017 in New York City. Don't go looking for serverless patterns in strange places, take existing functional programming patterns instead.
32. Greenspun's tenth rule
Any sufficiently complicated C or Fortran program
contains an ad-hoc, informally-specified, bug-ridden,
slow implementation of half of Common Lisp.
tl;dr: LISP did it first
33. ⚡ What LISP can Teach
You About Serverless
Patterns
35. map/pmap (a.k.a. Fan-Out)
(map some-function some-data)
Apply some-function to each entry of the array of
data in some-data. Then return the result as a new
array. In parallel: use pmap.
Why? To process lots of data.
36. apply (a.k.a. Proxy)
(apply some-function x y z)
Call some-function with arguments x, y, and z.
Why? To make the function to be called a variable
itself.
37. comp (a.k.a. Function Chaining)
(comp some-function some-other-function)
Create a function that first calls some-function on
the arguments, and then some-other-function
on the results.
Why? To call multiple services in order.
38. reduce (a.k.a. Fan-In)
(reduce some-function some-data)
Call some-function on the first item of some-
data, then call some-function again, using the
result of the prior invocation and the next item in
some-data as arguments.
Why? To compress large data sets into small results.
39. fold (a.k.a. Fan-In with ! on Top)
(fold reducef combined some-data)
Break some-data into multiple sets, run (reduce
reducef) on each, then run (combine
combinef) on the results.
Why? To compress really large data sets into small
results, in multiple steps.
40. iterate (a.k.a. Endless Function)
(iterate start-value some-function)
Create a function that creates a data stream starting
with start-value from repeated calls to some-
function.
Why? To turn some-function into a data emitter,
without some-function needing state.
41. juxt (a.k.a. Parallel Functions)
(juxt some-function some-other-function)
Makes a function that calls some-function and
some-other-function and returns a combined
result.
Why? To combine the results of multiple functions in
one call.
42. memoize (a.k.a. Good Ol’ Cache)
(memoize some-function)
Return a cached version of some-function that
returns the same value for the same arguments.
Why? To trade slow computing against fast cache
lookups.
43. partial (a.k.a. Wrapper)
(partial some-function value)
Creates a function that calls some-function with
value as an argument, in addition to other
arguments.
Why? To provide default values and make powerful
functions less dangerous.