SlideShare a Scribd company logo
Back to the Future
Lessons from the Past for Today’s Web Developers

                   Bill Scott
   2008 Yahoo! Front End Developer’s Summit
                  10.08.2008
“There's an old saying about
those who forget history. I don't
   remember it, but it's good.”
 Stephen Colbert, The Colbert Report, March 10, 2008
Lessons from the Past
  Importance of Tools
  Proficiency in Debugging
  Understanding the Leaky Abstraction
  Being Pixel Retentive
  Inspired by Problems
  Students of Beautiful Code
my history
importance of tools
importance of tools
the web’s slide rule



javascript alert. microsoft debugger.
  document.write(). innerHTML().
explosion of tools
      firebug debugger. yslow. hammerhead.
     developer toolbar. drosera. webkit web
  inspector. webkit network timeline. fiddler.
   charles. httpwatch. firefox throttle. firebug
   profiler. jiffy. episodes. cuzillion. ua profiler.
 greasemonkey. dom inspector. html validator.
    live http headers. tamper data. venkman.
  firecookie. selenium. ie8 debugger. chrome
   debugger. foxyproxy. firephp. pixel perfect.
dragonfly. debugbar. modify headers. xray. design
            bookmarklet. jsmin. jslint.
missing tools
simple prototyping
visibility into browser engine
css layout & refactoring tools
prototyping
flash world: strong
DHTML prototyping: still weak
 jQuery
 yui 3.0
 protoscript (experimental)
[protoscript slide]
browser performance visibility
no real visibility into
  memory consumption
  processing times
   javascript engine
   rendering engine
   reflow times
   page event timing (Episodes, Jiffy)
[episodes slide, jiffy extension & round trip extension]
css refactoring
firebug css panel
dust-me selectors extension
css lint
but no reliable way to clean up CSS
proficiency in debugging
example: netflix Q performance
                      IE 7
                     > 250
example: gzip breaks safari
  page weight dropped by 6x




  outbound network traffic dropped in half
rules of debugging
  1. understand the system
  2. make it fail
  3. quit thinking and look
  4. divide and conquer
  5. change one thing at a time
  6. keep an audit trail                  http://www.debuggingrules.com/
                                          http://www.whyprogramsfail.com/toc.php
  7. check the plug
  8. get a fresh view
  9. if you didn't fix It, it ain't fixed
understanding the leaky
abstraction
understanding deep magic
  story of GATO development
   barely understood the language

   barely understood mac development

  afterward determined to understand the deep magic
   disassembled ROM, commented all the code

   wrote numerous utilities

   asked what happens from click to render
building on abstractions
  boosts productivity
  but what happens when you have to look underneath?
  the “leaky abstraction” syndrome
  it’s easy to just fiddle till it works but not stop to ask why
example: closures
  Most candidates we interview
      cannot accurately explain a closure

      cannot detect common errors with closures

  If you use closures you should understand closures
  When something goes wrong you have to understand it
  
      var alertFuncs = [];
  
      for(var i = 0; i < 3; i++) {
  
           var alertFunc = function(value) {
  
               return function() {
  
                  alert(value);
  
               }
  
           }(i);
  
      
    alertFuncs.push(alertFunc);
  
      }

  
      for (var i = 0; i < alertFuncs.length; i++) {
  
      
    alertFuncs[i]();
  
      }
example: toolkits
  libraries have been a big boost to our community
  however, it’s easy to end up knowing a library but not really
  what the library does for them
  it’s ok to focus on the usage of a library, but a little dose of
  curiosity a day will teach you a lot
example: end to end
  http request to http response is basic
  but do we understand what happens and when?
  getting a picture of the overall picture helps us track down
  performance issues
being pixel retentive
end-point paranoia (quickdraw)
    coordinate system infinitely thin lines between pixels
 (0,0)                                   (8,0)




 (0,4)                                    (8,4)
     filling or framing a rectangle: 0,0,8,4




     points anchor to thin grid, to right & below
css reset
css frameworks
YUI
setX(), setY()
interactive intelligence
drag and drop
  interesting moments grid
  subtlety of drag & drop
inspired by problems
chasing ideas
belief in creative process
saying yes
students of beautiful code
wang calculator
  Find out if the given number was prime
  Instructions: J if 0, J if +, J if <>0, J if Err,
  Store, Recall, Mark, Search, Set PC, Indir
  Sieve of Eratosthenes
macintosh patent for regions
(0,0)                      (14,0)




                   (9,6)      (14,6)



                                       (20,10)
                  (9,10)




         (5,12)            (13,12)


                                                 0, 0, 14, 32678,
         (5,17)            (13,17)
                                                 6, 9, 14, 32768,
                                                 10, 9, 20, 32768,
                                                 12, 5, 13, 32768,
                                                 17, 5, 13, 32768,
                                       (20,20)   20, 0, 20, 32768
(0,20)
macpaint
  MC68000 MOVEM   32 32 32 32 32 32 32 32 32 32 32 32 32
html*
hacker?
event-driven
objects
separation of concerns
model-view-controller
style-behavior-logic
patterns
Make it right before you make it fast. Make
 it clear before you make it faster. Keep it
        right when you make it faster.
Where there are two bugs, there is likely
            to be a third.
Make sure your code 'does nothing'
            gracefully.
Premature optimization is the root of all
                 evil.
1978
Lessons from the Past
  Importance of Tools
  Proficiency in Debugging
  Understanding the Leaky Abstraction
  Being Pixel Retentive
  Inspired by Problems
  Students of Beautiful Code
Credits
  http://flickr.com/photos/rogersmith/53912456/

  http://flickr.com/photos/threesixes/12169049/

  http://flickr.com/photos/playstar_rocker/2626983033/

  http://flickr.com/photos/jakecaptive/49915119/

  http://www.oldcalculatormuseum.com/wang600.html

  http://flickr.com/photos/trainor/451799414/

  http://flickr.com/photos/tom-b/2441980046/

  http://www.1000bit.it/support/manuali/apple/lisa/LisaPatentQuickDraw.pdf

  http://en.wikipedia.org/wiki/Image:TI-59.jpg

More Related Content

Similar to Back To The Future.Key 2

He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!
François-Guillaume Ribreau
 
Y U NO CRAFTSMAN
Y U NO CRAFTSMANY U NO CRAFTSMAN
Y U NO CRAFTSMAN
Paul Blundell
 
4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know
Dynatrace
 
Real_World_0days.pdf
Real_World_0days.pdfReal_World_0days.pdf
Real_World_0days.pdf
distortdistort
 
10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
ConSanFrancisco123
 
Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"
Fwdays
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
Mark Fayngersh
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
alexsaves
 
What Lies Beneath
What Lies BeneathWhat Lies Beneath
What Lies Beneath
Maurice Naftalin
 
Shifting Gears
Shifting GearsShifting Gears
Shifting Gears
Christian Heilmann
 
Professional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsProfessional JavaScript: AntiPatterns
Professional JavaScript: AntiPatterns
Mike Wilcox
 
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On? Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
Steve Poole
 
JavaProgrammingForBeginners-Presentation.pdf
JavaProgrammingForBeginners-Presentation.pdfJavaProgrammingForBeginners-Presentation.pdf
JavaProgrammingForBeginners-Presentation.pdf
Sathwika7
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Dom
kaven yan
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
vincent_scheib
 
jQuery Conference Toronto
jQuery Conference TorontojQuery Conference Toronto
jQuery Conference Toronto
dmethvin
 
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAnalyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
Ariya Hidayat
 
Operational transformation
Operational transformationOperational transformation
Operational transformation
Matteo Collina
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 Robotics
Max Kleiner
 
Intro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate JavascriptIntro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate Javascript
Andrew Lovett-Barron
 

Similar to Back To The Future.Key 2 (20)

He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!
 
Y U NO CRAFTSMAN
Y U NO CRAFTSMANY U NO CRAFTSMAN
Y U NO CRAFTSMAN
 
4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know4 Node.js Gotchas: What your ops team needs to know
4 Node.js Gotchas: What your ops team needs to know
 
Real_World_0days.pdf
Real_World_0days.pdfReal_World_0days.pdf
Real_World_0days.pdf
 
10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
 
Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
What Lies Beneath
What Lies BeneathWhat Lies Beneath
What Lies Beneath
 
Shifting Gears
Shifting GearsShifting Gears
Shifting Gears
 
Professional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsProfessional JavaScript: AntiPatterns
Professional JavaScript: AntiPatterns
 
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On? Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
Mind Control to Major Tom: Is It Time to Put Your EEG Headset On?
 
JavaProgrammingForBeginners-Presentation.pdf
JavaProgrammingForBeginners-Presentation.pdfJavaProgrammingForBeginners-Presentation.pdf
JavaProgrammingForBeginners-Presentation.pdf
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Dom
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
 
jQuery Conference Toronto
jQuery Conference TorontojQuery Conference Toronto
jQuery Conference Toronto
 
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAnalyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
 
Operational transformation
Operational transformationOperational transformation
Operational transformation
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 Robotics
 
Intro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate JavascriptIntro to BackboneJS + Intermediate Javascript
Intro to BackboneJS + Intermediate Javascript
 

Recently uploaded

Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
Intelisync
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
saastr
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Jeffrey Haguewood
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
LucaBarbaro3
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 

Recently uploaded (20)

Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 

Back To The Future.Key 2

  • 1. Back to the Future Lessons from the Past for Today’s Web Developers Bill Scott 2008 Yahoo! Front End Developer’s Summit 10.08.2008
  • 2. “There's an old saying about those who forget history. I don't remember it, but it's good.” Stephen Colbert, The Colbert Report, March 10, 2008
  • 3. Lessons from the Past Importance of Tools Proficiency in Debugging Understanding the Leaky Abstraction Being Pixel Retentive Inspired by Problems Students of Beautiful Code
  • 7. the web’s slide rule javascript alert. microsoft debugger. document.write(). innerHTML().
  • 8. explosion of tools firebug debugger. yslow. hammerhead. developer toolbar. drosera. webkit web inspector. webkit network timeline. fiddler. charles. httpwatch. firefox throttle. firebug profiler. jiffy. episodes. cuzillion. ua profiler. greasemonkey. dom inspector. html validator. live http headers. tamper data. venkman. firecookie. selenium. ie8 debugger. chrome debugger. foxyproxy. firephp. pixel perfect. dragonfly. debugbar. modify headers. xray. design bookmarklet. jsmin. jslint.
  • 9. missing tools simple prototyping visibility into browser engine css layout & refactoring tools
  • 10. prototyping flash world: strong DHTML prototyping: still weak jQuery yui 3.0 protoscript (experimental)
  • 12. browser performance visibility no real visibility into memory consumption processing times javascript engine rendering engine reflow times page event timing (Episodes, Jiffy)
  • 13. [episodes slide, jiffy extension & round trip extension]
  • 14. css refactoring firebug css panel dust-me selectors extension css lint but no reliable way to clean up CSS
  • 16.
  • 17.
  • 18. example: netflix Q performance IE 7 > 250
  • 19. example: gzip breaks safari page weight dropped by 6x outbound network traffic dropped in half
  • 20. rules of debugging 1. understand the system 2. make it fail 3. quit thinking and look 4. divide and conquer 5. change one thing at a time 6. keep an audit trail http://www.debuggingrules.com/ http://www.whyprogramsfail.com/toc.php 7. check the plug 8. get a fresh view 9. if you didn't fix It, it ain't fixed
  • 22. understanding deep magic story of GATO development barely understood the language barely understood mac development afterward determined to understand the deep magic disassembled ROM, commented all the code wrote numerous utilities asked what happens from click to render
  • 23. building on abstractions boosts productivity but what happens when you have to look underneath? the “leaky abstraction” syndrome it’s easy to just fiddle till it works but not stop to ask why
  • 24. example: closures Most candidates we interview cannot accurately explain a closure cannot detect common errors with closures If you use closures you should understand closures When something goes wrong you have to understand it var alertFuncs = []; for(var i = 0; i < 3; i++) { var alertFunc = function(value) { return function() { alert(value); } }(i); alertFuncs.push(alertFunc); } for (var i = 0; i < alertFuncs.length; i++) { alertFuncs[i](); }
  • 25. example: toolkits libraries have been a big boost to our community however, it’s easy to end up knowing a library but not really what the library does for them it’s ok to focus on the usage of a library, but a little dose of curiosity a day will teach you a lot
  • 26. example: end to end http request to http response is basic but do we understand what happens and when? getting a picture of the overall picture helps us track down performance issues
  • 28. end-point paranoia (quickdraw) coordinate system infinitely thin lines between pixels (0,0) (8,0) (0,4) (8,4) filling or framing a rectangle: 0,0,8,4 points anchor to thin grid, to right & below
  • 29.
  • 34. drag and drop interesting moments grid subtlety of drag & drop
  • 35.
  • 37.
  • 42. wang calculator Find out if the given number was prime Instructions: J if 0, J if +, J if <>0, J if Err, Store, Recall, Mark, Search, Set PC, Indir Sieve of Eratosthenes
  • 43.
  • 45. (0,0) (14,0) (9,6) (14,6) (20,10) (9,10) (5,12) (13,12) 0, 0, 14, 32678, (5,17) (13,17) 6, 9, 14, 32768, 10, 9, 20, 32768, 12, 5, 13, 32768, 17, 5, 13, 32768, (20,20) 20, 0, 20, 32768 (0,20)
  • 46. macpaint MC68000 MOVEM 32 32 32 32 32 32 32 32 32 32 32 32 32
  • 47. html*
  • 55.
  • 56. Make it right before you make it fast. Make it clear before you make it faster. Keep it right when you make it faster.
  • 57. Where there are two bugs, there is likely to be a third.
  • 58. Make sure your code 'does nothing' gracefully.
  • 59. Premature optimization is the root of all evil.
  • 60. 1978
  • 61.
  • 62. Lessons from the Past Importance of Tools Proficiency in Debugging Understanding the Leaky Abstraction Being Pixel Retentive Inspired by Problems Students of Beautiful Code
  • 63. Credits http://flickr.com/photos/rogersmith/53912456/ http://flickr.com/photos/threesixes/12169049/ http://flickr.com/photos/playstar_rocker/2626983033/ http://flickr.com/photos/jakecaptive/49915119/ http://www.oldcalculatormuseum.com/wang600.html http://flickr.com/photos/trainor/451799414/ http://flickr.com/photos/tom-b/2441980046/ http://www.1000bit.it/support/manuali/apple/lisa/LisaPatentQuickDraw.pdf http://en.wikipedia.org/wiki/Image:TI-59.jpg