Top Banner
No Silver Bullets in Functional Programming
53

No Silver Bullets in Functional Programming by Brian McKenna

Jan 11, 2017

Download

Software

Naresh Jain
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: No Silver Bullets in Functional Programming by Brian McKenna

No Silver Bullets in

Functional Programming

Page 2: No Silver Bullets in Functional Programming by Brian McKenna

Brian McKenna

Atlassian

Almost always functional programming

Australia

Page 3: No Silver Bullets in Functional Programming by Brian McKenna

There's no such thing as a silver bullet...

Page 4: No Silver Bullets in Functional Programming by Brian McKenna

... there is no single development, in either technology ormanagement technique, which by itself promises even one orderof magnitude improvement within a decade in productivity, inreliability, in simplicity. ... Hence, although I strongly support the technology transfer andcurriculum development efforts now underway, I think the mostimportant single effort we can mount is to develop ways to growgreat designers.

Fred Brooks, 1986

Page 5: No Silver Bullets in Functional Programming by Brian McKenna

The differences are not minor - it is rather like Salieri and Mozart.Study after study shows that the very best designers producestructures that are faster, smaller, simpler, cleaner and producedwith less effort. The difference between the great and theaverage approach is an order of magnitude.

Page 6: No Silver Bullets in Functional Programming by Brian McKenna

Fred Brooks' experience as of 1986:

No 10x toolsBut 10x programmers

Page 7: No Silver Bullets in Functional Programming by Brian McKenna

1. No tool will fix all productivity/reliability/simplicity problems2. No tool strictly better than another

Page 8: No Silver Bullets in Functional Programming by Brian McKenna

Availability vs consistency

Page 9: No Silver Bullets in Functional Programming by Brian McKenna

Space vs time

Page 10: No Silver Bullets in Functional Programming by Brian McKenna

Git vs Mercurial

Page 11: No Silver Bullets in Functional Programming by Brian McKenna

Emacs vs Vim

Page 12: No Silver Bullets in Functional Programming by Brian McKenna

YAML vs JSON

Page 13: No Silver Bullets in Functional Programming by Brian McKenna
Page 14: No Silver Bullets in Functional Programming by Brian McKenna

Functional programming

Page 15: No Silver Bullets in Functional Programming by Brian McKenna

(10 + 30) * 240 * 280

Page 16: No Silver Bullets in Functional Programming by Brian McKenna

Referentially transparent expressions can be replaced with thevalue that they evaluate to.

Functions are a way of creating referentially transparentexpressions.

Functional programming is programming with referentiallytransparent expressions.

Page 17: No Silver Bullets in Functional Programming by Brian McKenna

Reuse

Page 18: No Silver Bullets in Functional Programming by Brian McKenna

println("Hello"); println("World"); println("Hello"); println("World");

Page 19: No Silver Bullets in Functional Programming by Brian McKenna

val x = { println("Hello"); println("World"); };x;x;

Page 20: No Silver Bullets in Functional Programming by Brian McKenna

Refactoring

Page 21: No Silver Bullets in Functional Programming by Brian McKenna

bind(getCredentialsProvider, credentials => { val regions = Regions.fromName(streamRegion); val config = makeClientConfiguration(regions); val client = kinesis(credentials, config, regions); val proxy = kinesisProxy(credentials, client); getShardList(proxy); });

Page 22: No Silver Bullets in Functional Programming by Brian McKenna

val regions = Regions.fromName(streamRegion); val config = makeClientConfiguration(regions); bind(getCredentialsProvider, credentials => { val client = kinesis(credentials, config, regions); val proxy = kinesisProxy(credentials, client); getShardList(proxy); });

Page 23: No Silver Bullets in Functional Programming by Brian McKenna

Equational reasoning

Page 24: No Silver Bullets in Functional Programming by Brian McKenna

def traverse[A](l: List[A], f: A => IO[Unit]) = l.foldRight( (a, acc) => bind( f(a), _ => acc ), point(unit) );

traverse(["Hello", "World"], println);

Page 25: No Silver Bullets in Functional Programming by Brian McKenna

["Hello", "World"].foldRight( (a, acc) => bind( println(a), _ => acc ), point(unit) );

Page 26: No Silver Bullets in Functional Programming by Brian McKenna

bind( println("Hello"), _ => ["World"].foldRight( (a, acc) => bind( println(a), _ => acc ), point(unit) ));

Page 27: No Silver Bullets in Functional Programming by Brian McKenna

bind( println("Hello"), _ => bind( println("World"), _ => [].foldRight( (a, acc) => bind( println(a), _ => acc ), point(unit) ) ));

Page 28: No Silver Bullets in Functional Programming by Brian McKenna

bind( println("Hello"), _ => bind( println("World"), _ => point(unit) ));

Page 29: No Silver Bullets in Functional Programming by Brian McKenna

bind( println("Hello"), _ => println("World") );

Page 30: No Silver Bullets in Functional Programming by Brian McKenna

println("Hello"); println("World");

Page 31: No Silver Bullets in Functional Programming by Brian McKenna

Some benefits for humans:

ReuseRefactoringEquational reasoning

Page 32: No Silver Bullets in Functional Programming by Brian McKenna

Compare the alternatives

Page 33: No Silver Bullets in Functional Programming by Brian McKenna

Functional programming

Imperative programming

Object-oriented programming

Page 34: No Silver Bullets in Functional Programming by Brian McKenna

Functional programming

Imperative programming

Object-oriented programming

Page 35: No Silver Bullets in Functional Programming by Brian McKenna

In short, Haskell is the world's finest imperative programminglanguage.

Simon Peyton Jones, 2000

Page 36: No Silver Bullets in Functional Programming by Brian McKenna

Functional programming

Not functional programming

Page 37: No Silver Bullets in Functional Programming by Brian McKenna

Values

Side-effects

Page 38: No Silver Bullets in Functional Programming by Brian McKenna

Benefits of side-effects

Page 39: No Silver Bullets in Functional Programming by Brian McKenna
Page 40: No Silver Bullets in Functional Programming by Brian McKenna

Argument to moderation

Page 41: No Silver Bullets in Functional Programming by Brian McKenna

"Mostly functional" programming does not work. ... The idea of "mostly functional programming" is unfeasible. It isimpossible to make imperative programming languages safer byonly partially removing implicit side effects. Leaving one kind ofeffect is often enough to simulate the very effect you just tried toremove. On the other hand, allowing effects to be "forgotten" in apure language also causes mayhem in its own way.

Erik Meijer, 2014

Page 42: No Silver Bullets in Functional Programming by Brian McKenna

Middle-ground between a lie and the truth is a lie.

Page 43: No Silver Bullets in Functional Programming by Brian McKenna

Middle-ground between a side-effect and a value is a side-effect.

Page 44: No Silver Bullets in Functional Programming by Brian McKenna

Tooling

Page 45: No Silver Bullets in Functional Programming by Brian McKenna

In theory, functional programming only has benefits.

In practice, tools have trade-offs.

Page 46: No Silver Bullets in Functional Programming by Brian McKenna

type Effect[a] = WriteLine String a | ReadLine (String -> a)

Page 47: No Silver Bullets in Functional Programming by Brian McKenna

program = { writeLine("Hello, what's your name?"); s <- readLine writeLine("Hello " + s); };

Page 48: No Silver Bullets in Functional Programming by Brian McKenna

blink :: Atom ()blink = do on <- bool "on" True period timeout . atom "blinkOn" $ do call "avr_blink" on <== not_ (value on)

Page 49: No Silver Bullets in Functional Programming by Brian McKenna

Sunk cost

We have invested a lot of time and effort into using side-effects.

We have received no inherent benefit over functional programming.

We need to beware of putting any more effort into side-effects.

Page 50: No Silver Bullets in Functional Programming by Brian McKenna

Success

Page 51: No Silver Bullets in Functional Programming by Brian McKenna

Shift the conversation:

We already do functional programming.

If you want to use side-effects, the burden of justification is on you.

Page 52: No Silver Bullets in Functional Programming by Brian McKenna

Don't fall into the "everything is about trade-offs" trap:

Functional programming gives significant benefits over side-effects.

Side-effects give zero benefits over functional programming.

Page 53: No Silver Bullets in Functional Programming by Brian McKenna

We should consider side-effects to be legacy.

Functional programming should be our future.