SlideShare a Scribd company logo
@jonathanfmills
Jonathan Mills
A Skeptics Guide to
Functional Style
JavaScript
Functional Style JavaScript
So Hot Right Now
Functions
are first class objects
OBJECTS
Functions are first class
What is
Functional Programming?
In computer
science, functional
programming is a
programming paradigm
a style of building the structure
and elements of computer
programs
that treats computation as the
evaluation of mathematical
functions
that treats computation as the
evaluation of mathematical
functions
ƒ(x) = x + 2
ƒ(3) = 3 + 2 = 5
and avoids changing-state and
mutable data.
Nothing is immutable
in JavaScript
@jonathanfmills
Jonathan Mills
A Skeptics Guide to
Functional Style
JavaScript
"The programmers in that segment like
functional programming because it makes
code clearer, better structured, and it
prevents many classes of errors."
Scala founder Martin Odersky
They quote the
following phrases...
Pure Functions are Awesome!
Side effects are evil!
Without clear reasons for them…
"The programmers in that segment like
functional programming because it makes
code clearer, better structured, and it
prevents many classes of errors."
Scala founder Martin Odersky
It’s the tooling that
does the work!
@taylonr
The bit flips
when you think about it this way
0 > 1-
You can’t avoid Side Effects
Not all functions are pure
Not everything has to be
immutable
Functional style is about
using
less brain power
and
making things simpler
It is about
small,
composable
things
a style of building the structure
and elements of computer
programs
a style of building the structure
and elements of computer
programs
That is where I broke down, I think in systems…
Functional Style
thinks in the smallest possible items
You have to have both, it’s not either
Demo
Lets look at some arrays
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list);
For loop example
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
For loop example
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
For loop example
Iteration Code
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
For loop example
Worker Code
Lets break this up.
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(/*a function*/);
console.log(list);
map replaces for
Iteration Code
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
It’s the same thing
Iteration Code
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(/*a function*/);
console.log(list);
Forget iteration code forever!!
Iteration Code
What are we doing to each item?
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
For loop example
Worker Code
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(/*a function*/);
console.log(list);
Forget iteration code forever!!
Worker Code
Pass a pure function to do the work
In computer programming, a function may be considered
a pure function if both of the following statements about
the function hold:
Pure Function
The function always evaluates the same result value
given the same argument value(s).
Pure Function
ƒ(x) = x + 2
function add(a,b){return a+b}; //Pure
math.random(); //Not pure
Evaluation of the result does not cause any semantically
observable side effect or output, such as mutation of
mutable objects or output to I/O devices
Pure Function
let sum = 0;
function add(a){sum = sum + a}; // Not pure
Its not a ruleLess Brain PowerLess to track
Why pure?
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(function(item){return item+1});
console.log(list);
Add you function in!
Worker Code
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map((item)=>{return item+1});
console.log(list);
Arrow functions!
Worker Code
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(item=>item+1);
console.log(list);
Simpler!
Worker Code
let list = [1,2,3,4,5];
//Add 1 to each item...
list.map(item=>item+1);
console.log(list);
This looks nice but can be unclear!
let list = [1,2,3,4,5];
let addOne = item=>item+1
//Add 1 to each item...
list.map(addOne);
console.log(list);
No anonymous functions
let list = [1,2,3,4,5];
//Add 1 to each item...
for(let i = 0; i<list.length; i++){
list[i] = list[i] + 1;
}
console.log(list); // [ 2, 3, 4, 5, 6 ]
let list = [1,2,3,4,5];
let addOne = item=>item+1
list.map(addOne);
console.log(list);
and avoids changing-state and
mutable data.
let list = [1,2,3,4,5];
let addOne = item=>item+1
list.map(addOne);
console.log(list); // [ 1, 2, 3, 4, 5]
Why am I forced to change list?
let list = [1,2,3,4,5];
let addOne = item=>item+1
const newList = list.map(addOne);
console.log(newList); // [ 2, 3, 4, 5, 6]
No changing…
let list = [1,2,3,4,5];
let addOne = item=>item+1
list = list.map(addOne);
console.log(newList); // [ 2, 3, 4, 5, 6]
Changing
Less brain power
Easier to validate
Obja === Objb
Enforces Options
Immutability
What about more complicated loops?
Filter items!
let list = [1,2,3,4,5];
let isEven = item=>{return !(item%2)}
list = list.filter(isEven);
console.log(list); // [ 2, 4 ]
let list = [1,2,3,4,5];
let sum = 0;
for(let i = 0; i<list.length; i++){
sum = list[i] + sum;
}
console.log(list); // 15
Not everything is self contained…..
let list = [1,2,3,4,5];
let sumList = (sum, item)=>{return sum + item};
const sum= list.reduce(sumList, 0);
console.log(sum);
Lets add one
then sum them!
let list = [1,2,3,4,5];
let addOne = item=>item+1;
let sumList = (sum,item)=>{return item + sum};
let val = list.map(addOne).reduce(sumList, 0);
console.log(val); // 20
let list = [1,2,3,4,5];
let addOne = item=>item+1;
let sumList = (sum,item)=>{return item + sum};
let val = list.map(addOne).reduce(sumList, 0);
console.log(val); // 20
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getPerson = item=>item==='Rachel';
const item = list.find(getPerson);
console.log(item);
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getPerson = item=>item==='Rachel';
const item = list.find(getPerson ('Rachel'));
console.log(item);
In mathematics and computer science, a higher-order
function (also functional, functional form or functor) is
a function that does at least one of the following: takes one
or more functions as arguments (i.e., procedural
parameters), returns a function as its result.
Higher Order Functions
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getPerson = function(search){return item=>item===search;}
const item = list.find(getPerson('Rachel'));
console.log(item); // Rachel
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getPerson = search=>item=>item===search;
const item = list.find(getPerson('Rachel'));
console.log(item); // Rachel
Find items!
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getPerson = search=>item=>item===search;
const item = list.findIndex(getPerson('Rachel'));
console.log(item); // 2
Currying!
let sum = add(a,b);
Simple example
In mathematics and computer science, currying is the technique
of translating the evaluation of a function that takes multiple
arguments (or a tuple of arguments) into evaluating a sequence
of functions, each with a single argument.
Currying
let sum = add(a,b);
Simple example
let sum = add(a)(b);
Simple example
buttons = [
{ name: 'One', message: 'Button One' },
{ name: 'Two', message: 'Button Two' },
{ name: 'Three', message: 'Button Three' }
];
Bigger example
<button onClick={this.onClick} name={item.name}>
Bigger example
onClick = (event)=>{
//loop over buttons to get messages
}
Bigger example
onClick = (index, event)=>{
//I don’t have to loop over buttons to get messages
}
Bigger example
let sum = add(a,b);
Simple example
let sum = add(a)(b);
Simple example
Find Items
let list = ['jon','jack','Rachel','Susan','Sarah'];
let getOne = search=>item=>item===search;
const item = list.find(getOne('Rachel'));
console.log(item); // Rachel
getOnClick(index){
return function(event){message=buttons[index]}
}
Bigger example
<button onClick={this.getOnClick(index)} name={item.name}>
Bigger example
Monads
Once you understand Monads, you can no longer explain
them to someone who does not…
Crockford’s Law
In functional programming, a monad is a design pattern that defines how functions, actions,
inputs, and outputs can be used together to build generic types, with the following
organization:
1. Define a data type, and how values of that data type are combined.
2. Create functions that use the data type, and compose them together into actions,
following the rules defined in the first step.
Monad
Monads are things that get around the “no side effects”
rule…
Monad
The Identity Monad
function Identity(value) {
this.value = value;
}
function Identity(value) {
this.value = value;
}
var x = new Identity(5);
console.log(x.value); // 5
Identity.prototype.bind = function(transform) {
return transform(this.value);
};
function Identity(value) {
this.value = value;
}
Identity.prototype.bind = function(transform) {
return transform(this.value);
};
var x = new Identity(5);
x = x.bind((value)=> new Identity(value+2));
console.log(x.value); // 7
Monads are not required
in JavaScript…
we can have side effects…
"The programmers in that segment like
functional programming because it makes
code clearer, better structured, and it
prevents many classes of errors."
Scala founder Martin Odersky
It’s the tooling that
does the work!
function Identity(value) {
this.value = value;
}
Identity.prototype.bind = function(transform) {
return transform(this.value);
};
var x = new Identity(5);
x = x.bind((value)=> new Identity(value+2));
console.log(x.value); //8
function Identity(value) {
this.value = value;
}
Identity.prototype.bind = function(transform) {
return transform(this.value);
};
var x = new Identity(5);
x = x.bind((value)=> new Identity(value+2));
x.value = 5 // <- this
console.log(x.value); // ?
It’s the tooling that
does the work!
For JavaScript,
functional style a mindset..
Simplify the pieces…
Keep the interactions simple
Functional style is about
using
less brain power
and
making things simpler

More Related Content

What's hot

Input and Output In C Language
Input and Output In C LanguageInput and Output In C Language
Input and Output In C Language
Adnan Khan
 
07 mesh
07 mesh07 mesh
07 mesh
manojg1990
 
Introducing Spring Auto REST Docs - Spring IO 2017
Introducing Spring Auto REST Docs - Spring IO 2017Introducing Spring Auto REST Docs - Spring IO 2017
Introducing Spring Auto REST Docs - Spring IO 2017
Florian Benz
 
Auditing System Password Using L0phtcrack
Auditing System Password Using L0phtcrackAuditing System Password Using L0phtcrack
Auditing System Password Using L0phtcrack
Vishal Kumar
 
A report on application of probability to control the flow of traffic through...
A report on application of probability to control the flow of traffic through...A report on application of probability to control the flow of traffic through...
A report on application of probability to control the flow of traffic through...
ABHIJITPATRA23
 
Operators in Python
Operators in PythonOperators in Python
Operators in Python
Anusuya123
 
2 R Tutorial Programming
2 R Tutorial Programming2 R Tutorial Programming
2 R Tutorial Programming
Sakthi Dasans
 
Scala cheatsheet
Scala cheatsheetScala cheatsheet
Scala cheatsheet
Arduino Aficionado
 
Turing Machine
Turing MachineTuring Machine
Turing Machine
AyAn KhAn
 
Guaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in RustGuaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in Rust
nikomatsakis
 
Introduction to Python
Introduction to Python  Introduction to Python
Introduction to Python
Mohammed Sikander
 
Algorithms and Flowcharts
Algorithms and FlowchartsAlgorithms and Flowcharts
Algorithms and Flowcharts
Deva Singh
 
C programming
C programmingC programming
C programming
Jigarthacker
 
Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2
Emertxe Information Technologies Pvt Ltd
 
Latency SLOs Done Right
Latency SLOs Done RightLatency SLOs Done Right
Latency SLOs Done Right
Fred Moyer
 
Loops in c programming
Loops in c programmingLoops in c programming
Loops in c programming
CHANDAN KUMAR
 
Pumping Lemma and Regular language or not?
Pumping Lemma and Regular language or not?Pumping Lemma and Regular language or not?
Pumping Lemma and Regular language or not?
Animesh Chaturvedi
 
Increment and Decrement operators in C++
Increment and Decrement operators in C++Increment and Decrement operators in C++
Increment and Decrement operators in C++
Neeru Mittal
 
Python exception handling
Python   exception handlingPython   exception handling
Python exception handling
Mohammed Sikander
 

What's hot (20)

Input and Output In C Language
Input and Output In C LanguageInput and Output In C Language
Input and Output In C Language
 
07 mesh
07 mesh07 mesh
07 mesh
 
Introducing Spring Auto REST Docs - Spring IO 2017
Introducing Spring Auto REST Docs - Spring IO 2017Introducing Spring Auto REST Docs - Spring IO 2017
Introducing Spring Auto REST Docs - Spring IO 2017
 
Auditing System Password Using L0phtcrack
Auditing System Password Using L0phtcrackAuditing System Password Using L0phtcrack
Auditing System Password Using L0phtcrack
 
A report on application of probability to control the flow of traffic through...
A report on application of probability to control the flow of traffic through...A report on application of probability to control the flow of traffic through...
A report on application of probability to control the flow of traffic through...
 
Operators in Python
Operators in PythonOperators in Python
Operators in Python
 
2 R Tutorial Programming
2 R Tutorial Programming2 R Tutorial Programming
2 R Tutorial Programming
 
Scala cheatsheet
Scala cheatsheetScala cheatsheet
Scala cheatsheet
 
Turing Machine
Turing MachineTuring Machine
Turing Machine
 
bhargav_flowing-fountain
bhargav_flowing-fountainbhargav_flowing-fountain
bhargav_flowing-fountain
 
Guaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in RustGuaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in Rust
 
Introduction to Python
Introduction to Python  Introduction to Python
Introduction to Python
 
Algorithms and Flowcharts
Algorithms and FlowchartsAlgorithms and Flowcharts
Algorithms and Flowcharts
 
C programming
C programmingC programming
C programming
 
Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2
 
Latency SLOs Done Right
Latency SLOs Done RightLatency SLOs Done Right
Latency SLOs Done Right
 
Loops in c programming
Loops in c programmingLoops in c programming
Loops in c programming
 
Pumping Lemma and Regular language or not?
Pumping Lemma and Regular language or not?Pumping Lemma and Regular language or not?
Pumping Lemma and Regular language or not?
 
Increment and Decrement operators in C++
Increment and Decrement operators in C++Increment and Decrement operators in C++
Increment and Decrement operators in C++
 
Python exception handling
Python   exception handlingPython   exception handling
Python exception handling
 

Similar to A Skeptics guide to functional style javascript

Begin with Python
Begin with PythonBegin with Python
Begin with Python
Narong Intiruk
 
C++ Searching & Sorting5. Sort the following list using the select.pdf
C++ Searching & Sorting5. Sort the following list using the select.pdfC++ Searching & Sorting5. Sort the following list using the select.pdf
C++ Searching & Sorting5. Sort the following list using the select.pdf
Rahul04August
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdf
ebrahimbadushata00
 
The Ring programming language version 1.6 book - Part 24 of 189
The Ring programming language version 1.6 book - Part 24 of 189The Ring programming language version 1.6 book - Part 24 of 189
The Ring programming language version 1.6 book - Part 24 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 22 of 184
The Ring programming language version 1.5.3 book - Part 22 of 184The Ring programming language version 1.5.3 book - Part 22 of 184
The Ring programming language version 1.5.3 book - Part 22 of 184
Mahmoud Samir Fayed
 
Elixir in a nutshell - Fundamental Concepts
Elixir in a nutshell - Fundamental ConceptsElixir in a nutshell - Fundamental Concepts
Elixir in a nutshell - Fundamental Concepts
Héla Ben Khalfallah
 
JDD 2016 - Philippe Charrière - Golo, The Tiny Language That Gives Super Powers
JDD 2016 - Philippe Charrière -  Golo, The Tiny Language That Gives Super PowersJDD 2016 - Philippe Charrière -  Golo, The Tiny Language That Gives Super Powers
JDD 2016 - Philippe Charrière - Golo, The Tiny Language That Gives Super Powers
PROIDEA
 
#includeiostream #includefstreamusing namespace std; glo.pdf
#includeiostream #includefstreamusing namespace std; glo.pdf#includeiostream #includefstreamusing namespace std; glo.pdf
#includeiostream #includefstreamusing namespace std; glo.pdf
krram1989
 
cover every basics of python with this..
cover every basics of python with this..cover every basics of python with this..
cover every basics of python with this..
karkimanish411
 
DAA Lab Work.docx
DAA Lab Work.docxDAA Lab Work.docx
DAA Lab Work.docx
Deepusri2000Srivasta
 
Python Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, ExceptionsPython Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, Exceptions
Sreedhar Chowdam
 
File handling in pythan.pptx
File handling in pythan.pptxFile handling in pythan.pptx
File handling in pythan.pptx
NawalKishore38
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)riue
 
Thinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in PythonThinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in Python
Anoop Thomas Mathew
 
Swift Rocks #2: Going functional
Swift Rocks #2: Going functionalSwift Rocks #2: Going functional
Swift Rocks #2: Going functional
Hackraft
 
Stacks,queues,linked-list
Stacks,queues,linked-listStacks,queues,linked-list
Stacks,queues,linked-list
pinakspatel
 
Refer to my progress on this assignment belowIn this problem you w.pdf
Refer to my progress on this assignment belowIn this problem you w.pdfRefer to my progress on this assignment belowIn this problem you w.pdf
Refer to my progress on this assignment belowIn this problem you w.pdf
arishmarketing21
 
Arrays
ArraysArrays
Getting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsGetting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsRichard Minerich
 
Stack and its applications
Stack and its applicationsStack and its applications
Stack and its applications
Ahsan Mansiv
 

Similar to A Skeptics guide to functional style javascript (20)

Begin with Python
Begin with PythonBegin with Python
Begin with Python
 
C++ Searching & Sorting5. Sort the following list using the select.pdf
C++ Searching & Sorting5. Sort the following list using the select.pdfC++ Searching & Sorting5. Sort the following list using the select.pdf
C++ Searching & Sorting5. Sort the following list using the select.pdf
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdf
 
The Ring programming language version 1.6 book - Part 24 of 189
The Ring programming language version 1.6 book - Part 24 of 189The Ring programming language version 1.6 book - Part 24 of 189
The Ring programming language version 1.6 book - Part 24 of 189
 
The Ring programming language version 1.5.3 book - Part 22 of 184
The Ring programming language version 1.5.3 book - Part 22 of 184The Ring programming language version 1.5.3 book - Part 22 of 184
The Ring programming language version 1.5.3 book - Part 22 of 184
 
Elixir in a nutshell - Fundamental Concepts
Elixir in a nutshell - Fundamental ConceptsElixir in a nutshell - Fundamental Concepts
Elixir in a nutshell - Fundamental Concepts
 
JDD 2016 - Philippe Charrière - Golo, The Tiny Language That Gives Super Powers
JDD 2016 - Philippe Charrière -  Golo, The Tiny Language That Gives Super PowersJDD 2016 - Philippe Charrière -  Golo, The Tiny Language That Gives Super Powers
JDD 2016 - Philippe Charrière - Golo, The Tiny Language That Gives Super Powers
 
#includeiostream #includefstreamusing namespace std; glo.pdf
#includeiostream #includefstreamusing namespace std; glo.pdf#includeiostream #includefstreamusing namespace std; glo.pdf
#includeiostream #includefstreamusing namespace std; glo.pdf
 
cover every basics of python with this..
cover every basics of python with this..cover every basics of python with this..
cover every basics of python with this..
 
DAA Lab Work.docx
DAA Lab Work.docxDAA Lab Work.docx
DAA Lab Work.docx
 
Python Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, ExceptionsPython Programming: Lists, Modules, Exceptions
Python Programming: Lists, Modules, Exceptions
 
File handling in pythan.pptx
File handling in pythan.pptxFile handling in pythan.pptx
File handling in pythan.pptx
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
 
Thinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in PythonThinking in Functions: Functional Programming in Python
Thinking in Functions: Functional Programming in Python
 
Swift Rocks #2: Going functional
Swift Rocks #2: Going functionalSwift Rocks #2: Going functional
Swift Rocks #2: Going functional
 
Stacks,queues,linked-list
Stacks,queues,linked-listStacks,queues,linked-list
Stacks,queues,linked-list
 
Refer to my progress on this assignment belowIn this problem you w.pdf
Refer to my progress on this assignment belowIn this problem you w.pdfRefer to my progress on this assignment belowIn this problem you w.pdf
Refer to my progress on this assignment belowIn this problem you w.pdf
 
Arrays
ArraysArrays
Arrays
 
Getting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsGetting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n Monads
 
Stack and its applications
Stack and its applicationsStack and its applications
Stack and its applications
 

Recently uploaded

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 

Recently uploaded (20)

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 

A Skeptics guide to functional style javascript

Editor's Notes

  1. We will come back to this!!! Elements..
  2. There is functionall
  3. There is functionall
  4. We can’t even get types to stay the same…
  5. The benefit of FP is in the tooling, JS Doesn’t have the tooling…. So why?
  6. We will come back to this!!! Elements..
  7. We will come back to this!!! Elements..
  8. I don’t want to have to care about iteration again!!!
  9. I don’t want to have to care about iteration again!!!
  10. I don’t want to have to care about iteration again!!!
  11. I don’t want to have to care about iteration again!!!
  12. I don’t want to have to care about iteration again!!!
  13. I don’t want to have to care about iteration again!!!
  14. I don’t want to have to care about iteration again!!!
  15. I don’t want to have to care about iteration again!!!
  16. I don’t want to have to care about iteration again!!!
  17. I don’t want to have to care about iteration again!!!
  18. I don’t want to have to care about iteration again!!!
  19. I don’t want to have to care about iteration again!!!
  20. I don’t want to have to care about iteration again!!!
  21. I don’t want to have to care about iteration again!!!