KEMBAR78
A New Baseline for Front-End Devs | PDF
A new baseline
               for front-end developers
               Rebecca Murphey • April 2012 • BerlinJS

Friday, April 20, 12
rmurphey.com • @rmurphey • bocoup.com




Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
Our emphasis shifts from trivia to tools as we are
                   required to automate, streamline, and bullet-proof
                   our processes.




Friday, April 20, 12
bit.ly/front-end-dev-baseline




Friday, April 20, 12
javascript
Friday, April 20, 12
you already know:
                   jQuery, underscore, basic JavaScript


                   you should know:
                   jQuery-less JavaScript, prototypal inheritance,
                   Function.bind, basics of Backbone, Ember,
                   canJS or similar



Friday, April 20, 12
https://github.com/rmurphey/js-assessment




Friday, April 20, 12
4
                     5   beforeEach(function() {
                     6     a = [ 1, 2, 3, 4 ];
                     7     b = {
                     8        foo : 'bar',
                     9        baz : 'bim'
                   10      };
                   11
                   12      fn = function() { };
                   13    });
                   14
                   15    it("you should be able to determine the location of an item in an array", function() {
                   16      // define a function for fn so that the following will pass
                   17      expect(fn(a, 3)).to.be(2);
                   18    });
                   19
                   20    it("you should be able to add the values of an array", function() {
                   21      // define a function for fn so that the following will pass
                   22      expect(fn(a)).to.be(10);
                   23    });
                   24
                   25    it("you should be able to remove an item from an array", function() {
                   26      // define a function for fn so that the following will pass
                   27      var result = fn(a, 2);
                   28      expect(result).to.have.length(3);
                   29      expect(result.join(' ')).to.be('1 3 4');
                   30    });
                   31
                   32    it("you should be able to add an item to the end of an array", function() {
                   33      // define a function for fn so that the following will pass
                   34      var result = fn(a, 10);
                   35      expect(result).to.have.length(5);
                   36      expect(result[result.length - 1]).to.be(10);
                   37    });
                   38
                   39    it("you should be able to create an array from two arrays", function() {
                   40      // define a function for fn so that the following will pass
                   41      var c = [ 'a', 'b', 'c' ],
                   42          result = fn(a, c);
Friday, April 20, 12
                   43
eloquentjavascript.net



Friday, April 20, 12
git & github
Friday, April 20, 12
you already know:
                   creating a new repo, cloning a repo, branching
                   and merging locally


                   you should know:
                   collaboration workflow, pull requests, code
                   reviews



Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
modularity
                   & builds
Friday, April 20, 12
you already know:
                   to keep scripts out of your <head>,
                   to limit the number of http requests,
                   to reduce http overhead via minification


                   you should know:
                   AMD, RequireJS / Almond,
                   UglifyJS, Closure Compiler



Friday, April 20, 12
Friday, April 20, 12
1 ({
                    2 baseUrl : 'app',
                    3 dir : 'build',
                    4 paths : {
                    5    lib : '../lib',
                    6    plugins : '../lib/plugins',
                    7    app : '.',
                    8
                    9    jquery : '../lib/jquery',
                   10    underscore : '../lib/underscore',
                   11    backbone : '../lib/backbone',
                   12
                   13    use : '../lib/plugins/use',
                   14    text : '../lib/plugins/text'
                   15 },
                   16
                   17 use : {
                   18    underscore : {
                   19      attach : '_'
                   20    },
                   21    backbone : {
                   22      deps : [ 'use!underscore', 'jquery' ],
                   23      attach : [ 'Backbone' ]
                   24    }
                   25 },
                   26
                   27 modules : [
                   28    {
                   29      name : 'app/main'
                   30    }
                   31 ]
                   32 })




Friday, April 20, 12
r.js -o your.build.js




Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
dev tools
Friday, April 20, 12
you already know:
                   console.log, console.dir, editing CSS,
                   the network tab, Firebug or Chrome dev tools


                   you should know:
                   breakpoints & step debugging, $0,
                   timelines & profiles, other browsers



Friday, April 20, 12
Friday, April 20, 12
Friday, April 20, 12
command line
Friday, April 20, 12
Is it unreasonable to ask for a GUI so that
                   whatever I’m doing works like all the other
                   programs I use all day?
                                                Dark_Prism on Reddit




Friday, April 20, 12
Now you can berate me for not understanding
                       the Terminal if you like, but I’ll trade your
                       ruby gems for my under-colour removal and
                       dot gain, any day of the week. How hard
                       should this be?
                                 Andy Clarke, author of “Hardboiled Web Design”




Friday, April 20, 12
you already know:
                   either that the command line is amazing,
                   or the command line is terrifying


                   you should know:
                   ack, ssh, find, curl, git, npm; creating aliases
                   for commonly used commands



Friday, April 20, 12
Friday, April 20, 12
templates
Friday, April 20, 12
you already know:
                   to send data, not HTML, from the server; to
                   build HTML as a string & insert it into the
                   DOM all at once*


                   you should know:
                   various templating libraries & tradeoffs,
                   the RequireJS text! plugin



Friday, April 20, 12
Friday, April 20, 12
1 define([
                    2   'app/components/base',
                    3   'text!app/templates/searchForm.html'
                    4 ], function(C, tpl) {
                    5   return C({
                    6     template : tpl,
                    7
                    8     events : {
                    9        'submit .search-form' : '_onSearch'
                   10     },
                   11
                   12     _onSearch : function(e) {
                   13        e.preventDefault();
                   14        var term = $.trim(this.query('.js-input').val());
                   15        if (!term) { return; }
                   16        this.trigger('search', term);
                   17     }
                   18   });
                   19 });




Friday, April 20, 12
css
Friday, April 20, 12
you already know:
                   that CSS is difficult to maintain, that you
                   should be modularizing your CSS, that you
                   should combine & minify CSS for production


                   you should know:
                   SASS, Stylus, and/or LESS; RequireJS
                   for plain CSS optimization



Friday, April 20, 12
1 border-radius()
                    2   -webkit-border-radius arguments
                    3   -moz-border-radius arguments
                    4   border-radius arguments
                    5
                    6 body
                    7   font 12px Helvetica, Arial, sans-serif
                    8
                    9 a.button
                   10   border-radius 5px




Friday, April 20, 12
1   $blue: #3bbfce;
                    2   $margin: 16px;
                    3
                    4   .content-navigation {
                    5     border-color: $blue;
                    6     color:
                    7       darken($blue, 9%);
                    8   }
                    9
                   10   .border {
                   11     padding: $margin / 2;
                   12     margin: $margin / 2;
                   13     border-color: $blue;
                   14   }




Friday, April 20, 12
CAUTION: THIS IS A LIE




Friday, April 20, 12
testing
Friday, April 20, 12
you already know:
                   you should be testing your code, but it’s
                   hard to know where to start


                   you should know:
                   modularizing code makes testing easier;
                   baby steps are better than no steps at all



Friday, April 20, 12
Friday, April 20, 12
We desperately need more resources to teach
                   people how to get started with testing.




Friday, April 20, 12
automation
Friday, April 20, 12
Friday, April 20, 12
code quality
Friday, April 20, 12
you already know:
                   subtle flaws in code can ruin your day,
                   a project’s existing style


                   you should know:
                   JSHint, pre-commit hooks, editor plugins




Friday, April 20, 12
Friday, April 20, 12
docs
Friday, April 20, 12
you already know:
                   w3schools.com is abhorrent


                   you should know:
                   MDN, dochub.io; prefix all your JS searches
                   with “mdn” (or !js on duckduckgo)




Friday, April 20, 12
Friday, April 20, 12
A good programmer is a lazy programmer;
                   only lazy programmers will want to write the
                   kind of tools that might replace them in the
                   end. But for a lazy programmer to be a good
                   programmer, he or she must be incredibly
                   unlazy when it comes to learning how to
                   stay lazy.
                                         Paraphrased from Philipp Lenssen,
                                “Why Good Programmers are Lazy and Dumb”




Friday, April 20, 12
rmurphey.com • @rmurphey • bocoup.com

                            bit.ly/front-end-dev-baseline




Friday, April 20, 12

A New Baseline for Front-End Devs

  • 1.
    A new baseline for front-end developers Rebecca Murphey • April 2012 • BerlinJS Friday, April 20, 12
  • 2.
    rmurphey.com • @rmurphey• bocoup.com Friday, April 20, 12
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    Our emphasis shiftsfrom trivia to tools as we are required to automate, streamline, and bullet-proof our processes. Friday, April 20, 12
  • 16.
  • 17.
  • 18.
    you already know: jQuery, underscore, basic JavaScript you should know: jQuery-less JavaScript, prototypal inheritance, Function.bind, basics of Backbone, Ember, canJS or similar Friday, April 20, 12
  • 19.
  • 20.
    4 5 beforeEach(function() { 6 a = [ 1, 2, 3, 4 ]; 7 b = { 8 foo : 'bar', 9 baz : 'bim' 10 }; 11 12 fn = function() { }; 13 }); 14 15 it("you should be able to determine the location of an item in an array", function() { 16 // define a function for fn so that the following will pass 17 expect(fn(a, 3)).to.be(2); 18 }); 19 20 it("you should be able to add the values of an array", function() { 21 // define a function for fn so that the following will pass 22 expect(fn(a)).to.be(10); 23 }); 24 25 it("you should be able to remove an item from an array", function() { 26 // define a function for fn so that the following will pass 27 var result = fn(a, 2); 28 expect(result).to.have.length(3); 29 expect(result.join(' ')).to.be('1 3 4'); 30 }); 31 32 it("you should be able to add an item to the end of an array", function() { 33 // define a function for fn so that the following will pass 34 var result = fn(a, 10); 35 expect(result).to.have.length(5); 36 expect(result[result.length - 1]).to.be(10); 37 }); 38 39 it("you should be able to create an array from two arrays", function() { 40 // define a function for fn so that the following will pass 41 var c = [ 'a', 'b', 'c' ], 42 result = fn(a, c); Friday, April 20, 12 43
  • 21.
  • 22.
  • 23.
    you already know: creating a new repo, cloning a repo, branching and merging locally you should know: collaboration workflow, pull requests, code reviews Friday, April 20, 12
  • 24.
  • 25.
  • 26.
    modularity & builds Friday, April 20, 12
  • 27.
    you already know: to keep scripts out of your <head>, to limit the number of http requests, to reduce http overhead via minification you should know: AMD, RequireJS / Almond, UglifyJS, Closure Compiler Friday, April 20, 12
  • 28.
  • 29.
    1 ({ 2 baseUrl : 'app', 3 dir : 'build', 4 paths : { 5 lib : '../lib', 6 plugins : '../lib/plugins', 7 app : '.', 8 9 jquery : '../lib/jquery', 10 underscore : '../lib/underscore', 11 backbone : '../lib/backbone', 12 13 use : '../lib/plugins/use', 14 text : '../lib/plugins/text' 15 }, 16 17 use : { 18 underscore : { 19 attach : '_' 20 }, 21 backbone : { 22 deps : [ 'use!underscore', 'jquery' ], 23 attach : [ 'Backbone' ] 24 } 25 }, 26 27 modules : [ 28 { 29 name : 'app/main' 30 } 31 ] 32 }) Friday, April 20, 12
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    you already know: console.log, console.dir, editing CSS, the network tab, Firebug or Chrome dev tools you should know: breakpoints & step debugging, $0, timelines & profiles, other browsers Friday, April 20, 12
  • 35.
  • 36.
  • 37.
  • 38.
    Is it unreasonableto ask for a GUI so that whatever I’m doing works like all the other programs I use all day? Dark_Prism on Reddit Friday, April 20, 12
  • 39.
    Now you canberate me for not understanding the Terminal if you like, but I’ll trade your ruby gems for my under-colour removal and dot gain, any day of the week. How hard should this be? Andy Clarke, author of “Hardboiled Web Design” Friday, April 20, 12
  • 40.
    you already know: either that the command line is amazing, or the command line is terrifying you should know: ack, ssh, find, curl, git, npm; creating aliases for commonly used commands Friday, April 20, 12
  • 41.
  • 42.
  • 43.
    you already know: to send data, not HTML, from the server; to build HTML as a string & insert it into the DOM all at once* you should know: various templating libraries & tradeoffs, the RequireJS text! plugin Friday, April 20, 12
  • 44.
  • 45.
    1 define([ 2 'app/components/base', 3 'text!app/templates/searchForm.html' 4 ], function(C, tpl) { 5 return C({ 6 template : tpl, 7 8 events : { 9 'submit .search-form' : '_onSearch' 10 }, 11 12 _onSearch : function(e) { 13 e.preventDefault(); 14 var term = $.trim(this.query('.js-input').val()); 15 if (!term) { return; } 16 this.trigger('search', term); 17 } 18 }); 19 }); Friday, April 20, 12
  • 46.
  • 47.
    you already know: that CSS is difficult to maintain, that you should be modularizing your CSS, that you should combine & minify CSS for production you should know: SASS, Stylus, and/or LESS; RequireJS for plain CSS optimization Friday, April 20, 12
  • 48.
    1 border-radius() 2 -webkit-border-radius arguments 3 -moz-border-radius arguments 4 border-radius arguments 5 6 body 7 font 12px Helvetica, Arial, sans-serif 8 9 a.button 10 border-radius 5px Friday, April 20, 12
  • 49.
    1 $blue: #3bbfce; 2 $margin: 16px; 3 4 .content-navigation { 5 border-color: $blue; 6 color: 7 darken($blue, 9%); 8 } 9 10 .border { 11 padding: $margin / 2; 12 margin: $margin / 2; 13 border-color: $blue; 14 } Friday, April 20, 12
  • 50.
    CAUTION: THIS ISA LIE Friday, April 20, 12
  • 51.
  • 52.
    you already know: you should be testing your code, but it’s hard to know where to start you should know: modularizing code makes testing easier; baby steps are better than no steps at all Friday, April 20, 12
  • 53.
  • 54.
    We desperately needmore resources to teach people how to get started with testing. Friday, April 20, 12
  • 55.
  • 56.
  • 57.
  • 58.
    you already know: subtle flaws in code can ruin your day, a project’s existing style you should know: JSHint, pre-commit hooks, editor plugins Friday, April 20, 12
  • 59.
  • 60.
  • 61.
    you already know: w3schools.com is abhorrent you should know: MDN, dochub.io; prefix all your JS searches with “mdn” (or !js on duckduckgo) Friday, April 20, 12
  • 62.
  • 63.
    A good programmeris a lazy programmer; only lazy programmers will want to write the kind of tools that might replace them in the end. But for a lazy programmer to be a good programmer, he or she must be incredibly unlazy when it comes to learning how to stay lazy. Paraphrased from Philipp Lenssen, “Why Good Programmers are Lazy and Dumb” Friday, April 20, 12
  • 64.
    rmurphey.com • @rmurphey• bocoup.com bit.ly/front-end-dev-baseline Friday, April 20, 12