SlideShare a Scribd company logo
1 of 64
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

More Related Content

What's hot

Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
Ignacio Martín
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
偉格 高
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
Jarod Ferguson
 

What's hot (20)

BVJS
BVJSBVJS
BVJS
 
jQuery Namespace Pattern
jQuery Namespace PatternjQuery Namespace Pattern
jQuery Namespace Pattern
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
 
jQuery: Events, Animation, Ajax
jQuery: Events, Animation, AjaxjQuery: Events, Animation, Ajax
jQuery: Events, Animation, Ajax
 
jQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journeyjQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journey
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
Matters of State
Matters of StateMatters of State
Matters of State
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
 
Javascript essential-pattern
Javascript essential-patternJavascript essential-pattern
Javascript essential-pattern
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
 
this
thisthis
this
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
 
Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0
 
Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?
 

Viewers also liked (7)

DojoConf: Building Large Apps
DojoConf: Building Large AppsDojoConf: Building Large Apps
DojoConf: Building Large Apps
 
Vision Pacific Group Ltd
Vision Pacific Group LtdVision Pacific Group Ltd
Vision Pacific Group Ltd
 
Introducing Mulberry
Introducing MulberryIntroducing Mulberry
Introducing Mulberry
 
Rse sd oiseau dans pétrole
Rse sd oiseau dans pétroleRse sd oiseau dans pétrole
Rse sd oiseau dans pétrole
 
Ticer - What Is Summa
Ticer - What Is SummaTicer - What Is Summa
Ticer - What Is Summa
 
Summa/Summon: Something something
Summa/Summon: Something somethingSumma/Summon: Something something
Summa/Summon: Something something
 
Getting Started with Mulberry
Getting Started with MulberryGetting Started with Mulberry
Getting Started with Mulberry
 

Similar to A New Baseline for Front-End Devs

JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
David Padbury
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
Nick Sieger
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
旻琦 潘
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
Ben Lin
 
Integrating Flex And Rails With Ruby Amf
Integrating Flex And Rails With Ruby AmfIntegrating Flex And Rails With Ruby Amf
Integrating Flex And Rails With Ruby Amf
railsconf
 

Similar to A New Baseline for Front-End Devs (20)

JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
Hacking with ruby2ruby
Hacking with ruby2rubyHacking with ruby2ruby
Hacking with ruby2ruby
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
A jar-nORM-ous Task
A jar-nORM-ous TaskA jar-nORM-ous Task
A jar-nORM-ous Task
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the Cloud
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
Ruby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingRuby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programing
 
Integrating Flex And Rails With Ruby Amf
Integrating Flex And Rails With Ruby AmfIntegrating Flex And Rails With Ruby Amf
Integrating Flex And Rails With Ruby Amf
 
Flex With Rubyamf
Flex With RubyamfFlex With Rubyamf
Flex With Rubyamf
 
All I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkAll I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web Framework
 
Ruby C extensions at the Ruby drink-up of Sophia, April 2012
Ruby C extensions at the Ruby drink-up of Sophia, April 2012Ruby C extensions at the Ruby drink-up of Sophia, April 2012
Ruby C extensions at the Ruby drink-up of Sophia, April 2012
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applications
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Puppet at Pinterest
Puppet at PinterestPuppet at Pinterest
Puppet at Pinterest
 
UNO based ODF Toolkit API
UNO based ODF Toolkit APIUNO based ODF Toolkit API
UNO based ODF Toolkit API
 
Top 10 bugs in C++ open source projects, checked in 2016
Top 10 bugs in C++ open source projects, checked in 2016Top 10 bugs in C++ open source projects, checked in 2016
Top 10 bugs in C++ open source projects, checked in 2016
 

More from Rebecca Murphey (6)

Lessons from-a-rewrite-gotham
Lessons from-a-rewrite-gothamLessons from-a-rewrite-gotham
Lessons from-a-rewrite-gotham
 
Lessons from a Rewrite
Lessons from a RewriteLessons from a Rewrite
Lessons from a Rewrite
 
Modern JavaScript
Modern JavaScriptModern JavaScript
Modern JavaScript
 
Cleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQueryCleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQuery
 
The jQuery Divide
The jQuery DivideThe jQuery Divide
The jQuery Divide
 
Delivering a Responsive UI
Delivering a Responsive UIDelivering a Responsive UI
Delivering a Responsive UI
 

Recently uploaded

Recently uploaded (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

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
  • 15. Our emphasis shifts from trivia to tools as we are required to automate, streamline, and bullet-proof our processes. Friday, April 20, 12
  • 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
  • 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
  • 22. git & github Friday, April 20, 12
  • 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
  • 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
  • 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
  • 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
  • 38. 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
  • 39. 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
  • 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
  • 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
  • 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
  • 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 IS A LIE Friday, April 20, 12
  • 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
  • 54. We desperately need more resources to teach people how to get started with testing. Friday, April 20, 12
  • 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
  • 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
  • 63. 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
  • 64. rmurphey.com • @rmurphey • bocoup.com bit.ly/front-end-dev-baseline Friday, April 20, 12