Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Evolution is Awesome

dherman
March 26, 2014

Evolution is Awesome

My EmberConf 2014 keynote, on evolving the Web forward.

dherman

March 26, 2014
Tweet

More Decks by dherman

Other Decks in Programming

Transcript

  1. EVOLUTION
    IS
    AWESOME

    View full-size slide

  2. photo credits: http://en.wikipedia.org/wiki/French_Revolution

    View full-size slide

  3. 1998: Netscape was doomed – and they knew it.
    Microsoft was likely to kill the Web.
    The plan: at 10am on March 31, Jamie Zawinski
    would push Netscape's source code to the Web,
    creating the open source Mozilla Web browser.

    View full-size slide

  4. http://www.youtube.com/watch?v=mZTJbsUcdeU

    View full-size slide

  5. Well, they simply cannot undo what has been
    done. The Mozilla code is out there…and nobody
    can ever take that away from you. Ever.
    — Jamie Zawinski, 23 Nov. 1999

    View full-size slide

  6. !
    !
    Cause for revolution
    zomg Web's gonna die
    !
    !
    !
    !
    !
    Not so much
    eugh, JS has warts
    eugh, HTML has warts
    eugh, CSS has warts

    View full-size slide

  7. Y U NO bytecode?

    View full-size slide

  8. JavaScript lacks cross-language features.
    JavaScript is slow.
    JavaScript is sometimes fast but unpredictable.
    JIT compilation can be janky.

    View full-size slide

  9. Revolution: new bytecode language!
    Evolution:
    • build a native → JS compiler
    • study and optimize code patterns it generates
    • close gaps where we aren't generating optimal code
    • formalize pattern as validator ⇒ AOT

    View full-size slide

  10. All along, asm.js has worked across browsers.

    View full-size slide

  11.  <br/>!<br/>!<br/>!<br/>

    View full-size slide

  12.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View full-size slide

  13.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View full-size slide

  14.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View full-size slide

  15.  <br/>    function*  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View full-size slide

  16. Focus: no reinvent-the-universe boondoggles
    Consistency: keep a unified development model
    Adoption: gradual adoption (polyfills, compilers)

    View full-size slide

  17. "use  strict";  
    !
    !
    !
    !
    !
    !
    !

    View full-size slide

  18. "use  strict";  
    !
    if  (foo)  {  
       function  f()  {  
       }  
       ...  
    }  
    !
    module.exports  =  ...;

    View full-size slide

  19. //  automatically  strict  
    !
    if  (foo)  {  
       function  f()  {  
       }  
       ...  
    }  
    !
    export  default  ...;

    View full-size slide

  20. features > forks
    modules > modes

    View full-size slide

  21. Extensible Web

    View full-size slide

  22. Good design is motivated by use cases,
    workflows.
    Good design is built from small, orthogonal, and
    composable primitives.

    View full-size slide

  23. study the text
    interpret the text
    study the text
    interpret the text
    study the text
    interpret the text

    View full-size slide

  24. design
    evaluate
    design
    evaluate
    design
    evaluate

    View full-size slide

  25. photo credits: http://davidpaulbaker.blogspot.com/2013/02/move-fast-and-break-things.html

    View full-size slide

  26. do  {  
       product.build();  
       product.ship();  
       product.evaluate();  
    }  while  (!product.isPerfect());

    View full-size slide

  27. do  {  
       standard.design();  
       standard.ship();  
       standard.evaluate();  
       throw  new  DontBreakTheWeb();  
    }  while  (!standard.isPerfect());

    View full-size slide

  28. browser vendors devs

    View full-size slide

  29. browser vendors devs

    View full-size slide

  30. browser vendors devs
    development
    workflow

    View full-size slide

  31. 1. Add the missing primitives.
    2. Enable userland polyfills and compilers.
    3. Work together to design the future.

    View full-size slide

  32. 1. Add the missing primitives.
    2. Enable userland polyfills and compilers.
    3. Work together to design the future.
    Thanks!

    View full-size slide