Taming complexity in JavaScript

48
Taming complexity in JavaScript Mykyta Semenistyi

Transcript of Taming complexity in JavaScript

Page 1: Taming complexity in JavaScript

Taming complexity in JavaScriptMykyta Semenistyi

Page 2: Taming complexity in JavaScript

Mykyta Semenistyi

@msemenistyi

Tech LeadBinaryStudio

http://www.binary-studio.com/

Page 3: Taming complexity in JavaScript
Page 4: Taming complexity in JavaScript

C# JS

Enterprise Startup

Page 5: Taming complexity in JavaScript

The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.

Edsger W. Dijkstra

Page 6: Taming complexity in JavaScript

Ubiquitous state

Page 7: Taming complexity in JavaScript

Managing state is hard

Server responsesCached dataLocally generated dataUI data

Page 8: Taming complexity in JavaScript

jQuery

Page 9: Taming complexity in JavaScript

AngularChild Controller + Parent controllers chain

Markup

Page 10: Taming complexity in JavaScript

Flux -> Redux

Page 11: Taming complexity in JavaScript

Immutability

reducer (oldState) -> newState

Page 12: Taming complexity in JavaScript

Pure functions

Page 13: Taming complexity in JavaScript

Pure functions

Page 14: Taming complexity in JavaScript

Asynchronicity

Page 15: Taming complexity in JavaScript
Page 16: Taming complexity in JavaScript

UI Thread

...onclick XHR state change

setTimeout setInterval

onclick XHR state change

setTimeout

Event Loop

Page 17: Taming complexity in JavaScript

Callback hell

Page 18: Taming complexity in JavaScript

Async

Page 19: Taming complexity in JavaScript

Async

Page 20: Taming complexity in JavaScript

Promises

Page 21: Taming complexity in JavaScript

Promises

Page 22: Taming complexity in JavaScript

GeneratorsOutput ->

<- Input

Page 23: Taming complexity in JavaScript

Generators - Coroutines

Page 24: Taming complexity in JavaScript

Async await

Page 25: Taming complexity in JavaScript

API implicitness

Page 26: Taming complexity in JavaScript

Implementation implicitness

Digest loops

Directives

Scope inheritance

Page 27: Taming complexity in JavaScript

DSL - Webpack

Page 28: Taming complexity in JavaScript
Page 29: Taming complexity in JavaScript

Inheritance

Favor aggregation over inheritance Go

F

Page 30: Taming complexity in JavaScript

Custom implementations

Page 31: Taming complexity in JavaScript
Page 32: Taming complexity in JavaScript
Page 33: Taming complexity in JavaScript

leftpad

Page 34: Taming complexity in JavaScript

Outtakes

There are people behind npm modules

People happen to be assholes

Npm has fixed the issue within hours

Npm has updated its policy of unpublishing

Page 35: Taming complexity in JavaScript
Page 36: Taming complexity in JavaScript

Why?

Waste of time

High probability of bugs

No bugfixes and upgrades from others

Page 37: Taming complexity in JavaScript

Selecting tools

Be aware

Avoid JavaScript fatigue

Consider ecosystem

Page 38: Taming complexity in JavaScript
Page 39: Taming complexity in JavaScript

Signal vs NoisejQuery - DOM API Backbone - UI Architecture

Page 40: Taming complexity in JavaScript

Code inconsistency

Page 41: Taming complexity in JavaScript

CoffeeScript

Page 42: Taming complexity in JavaScript

TypeScript

Page 43: Taming complexity in JavaScript

ES2015

Page 44: Taming complexity in JavaScript

Linters

Page 45: Taming complexity in JavaScript

Flow

Page 46: Taming complexity in JavaScript

BE CONSISTENT.

If you're editing code, take a few minutes to look at the code around you and determine its style. If they use spaces around all their arithmetic operators, you should too. If their comments have little boxes of hash marks around them, make your comments have little boxes of hash marks around them too.

Google JS Styleguide

Page 47: Taming complexity in JavaScript

Recap

Tame state

Use modern approaches for asynchronicity

Prefer composition

Don’t try to invent you language - use JS

Utilize what others have created

Choose tools wisely

Use tools if necessary

Love JS

Page 48: Taming complexity in JavaScript

yield ‘end’;