<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Adam.Kahtava.com / AdamDotCom &#187; Google Exercise</title>
	<atom:link href="http://adam.kahtava.com/journal/category/javascript/google-exercise/feed/" rel="self" type="application/rss+xml" />
	<link>http://adam.kahtava.com/journal</link>
	<description>A software development blog</description>
	<pubDate>Thu, 15 Jul 2010 17:00:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Chronic Divitis And Classitis, What Are They?</title>
		<link>http://adam.kahtava.com/journal/2009/07/15/cronic-divitis-and-classitis-what-is-it/</link>
		<comments>http://adam.kahtava.com/journal/2009/07/15/cronic-divitis-and-classitis-what-is-it/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 16:00:16 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Google Exercise]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=1716</guid>
		<description><![CDATA[Jeffery Zeldman offers this entertaining definition for Divitis and Classitis:
Classitis is the measles of markup, obscuring meaning as it adds needless weight to every page. The affliction dates back to the early days of semi-CSS-capable browsers and the many designers&#8217; initially childish comprehension of how CSS works.
Alas, many have not yet outgrown that childish misunderstanding [...]]]></description>
			<content:encoded><![CDATA[<p>Jeffery Zeldman offers this entertaining definition for Divitis and Classitis:</p>
<blockquote><p><strong>Classitis is the measles of markup</strong>, obscuring meaning as it adds needless weight to every page. The affliction dates back to the early days of semi-CSS-capable browsers and the many designers&#8217; initially childish comprehension of how CSS works.<br />
Alas, many have not yet outgrown that childish misunderstanding of CSS &#8230; Classitis is as bad in its own way as the <code>&lt;font&gt;</code> tag ever was; rarely does good markup require it &#8230; At other times classitis is exacerbated by a still more serious condition &#8230; divitis &#8230;<strong> Classitis and divitis are like the needless adjectives with wich bad writing is strewen</strong>. They are the weeds in the garden of meaning. - Jeffrey Zeldman, <a href="http://www.amazon.com/Designing-Web-Standards-Jeffrey-Zeldman/dp/0321385551/">Designing with Web Standards</a></p></blockquote>
<p><strong>An example of markup wraught with divitis and classitis:</strong><br />
<img class="alignnone size-full wp-image-1720" style="padding-left: 5px;" title="googleexercise-divitis1" src="http://adam.kahtava.com/journal/wp-content/uploads/2009/07/googleexercise-divitis1.png" alt="googleexercise-divitis1" width="470" height="455" /><br />
<em>13 <code>div</code> elements and 11 classes for a single item. What a stench! :)  <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/">View this markup in action.</a></em></p>
<p><strong>The equivalent markup disease free:</strong><br />
<img class="alignnone size-full wp-image-1721" style="padding-left: 5px;" title="googleexercise-semantic" src="http://adam.kahtava.com/journal/wp-content/uploads/2009/07/googleexercise-semantic.png" alt="googleexercise-semantic" width="519" height="360" /><br />
<em>Cleaner, more meaningful, and with all the functionality of the former code. One <code>div</code> element and 3 classes for a single item.  ShamWow! <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/">View this markup in action.</a></em></p>
<p>Both of these markup snippets are visually and functionally equivalent. In the first example the <code>divs</code>, <code>classes</code>, and cryptic <code>ids</code> weigh down the page and pollute the meaning of the markup. In the later, a more semantic / structural approach is taken  Both these snippets were pulled from my attempts at <a href="http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/">the Google Web Developer Exercise.</a></p>
<p>Clean meaningful markup is the API that users and web crawlers consume - it&#8217;s important and easy to keep things clean, it just takes a little experience. Thank goodness for patterns like <a href="http://en.wikipedia.org/wiki/Model–view–controller">MVC</a> that let us control our API (the markup).</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/07/15/cronic-divitis-and-classitis-what-is-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Google Exercise Revisited: Semantic Markup with jQuery</title>
		<link>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/</link>
		<comments>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:00:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Google Exercise]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Programming Languages]]></category>

		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=1641</guid>
		<description><![CDATA[A couple years ago I tried getting a Web Developer position at Google. After a few interviews they had me complete their Web Developer exercise. I did it, and my initial submission would have made any respectable web developer ill - you can read more here: Getting a Job at Google: A Web Developer Fizzbuzz. [...]]]></description>
			<content:encoded><![CDATA[<p>A couple years ago I tried getting a Web Developer position at Google. After a few interviews they had me complete their Web Developer exercise. I did it, and my initial submission would have made any respectable web developer ill - you can read more here: <a href="http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/">Getting a Job at Google: A Web Developer Fizzbuzz</a>. I <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/">redid the exercise</a> over a year ago, but today even that code stink.</p>
<p><strong>I did the exercise yet again (the third time) because my last attempt needed some improvements:</strong></p>
<ul>
<li>it suffered from <a href="http://adam.kahtava.com/journal/2009/07/15/cronic-divitis-and-classitis-what-is-it/">chronic classitis and divitis</a> (too many classes, ids, and divs were making me itchy)</li>
<li>it wasn&#8217;t really using <a href="http://brainstormsandraves.com/articles/semantics/structure/">semantic / structural</a> markup (all the extra divs etc&#8230; cluttered my markup, and some of my class names like <code>container-borders</code> are non-semantic altogether)</li>
<li>it performed poorly and wasn&#8217;t accessible (everything was being rendered in the DOM, there was no immediate rendered markup which kind of violated the idea of <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">unobtrusive JavaScript</a>, nor was it screen reader friendly)</li>
<li>it wasn&#8217;t making use of any JavaScript libraries to abstract browser inconsistencies out of the code</li>
<li>it suffered from my <a href="http://adam.kahtava.com/journal/2008/02/17/software-ethnocentrism-staving-off-tunnel-vision/">software ethnocentrism</a> (my variable and object naming like <code>GoogleExercise</code> was mirroring statically typed languages and not the native language they were being written in)
</ul>
<p><strong>Here&#8217;s my latest Google Exercise (addressing all the above concerns):</strong><br />
<iframe src="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/" style="border-width: 0px; width: 320px; height: 300px; margin-left: 15px; float: left;"> </iframe><em>View this post outside your RSS reader to see it in action or view it <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/">here</a>.</em></p>
<p>This attempt makes use of <a href="http://jquery.com/">jQuery</a> and uses 57 lines of JavaScript (almost 200 lines less from my last one). </p>
<p>You can view the code for this attempt here: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/google.contact.widget.js">google.contact.widget.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/google-contact-widget.css">google-contact-widget.css</a>. </p>
<p>You can view the old code here: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.js">GoogleExercise.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.css">GoogleExercise.css</a>.</p>
<p>If you think I can improve on my code then let me know. Oh yeah, and if you&#8217;re a recruiter from Google then hire me! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting a Job at Google: A Web Developer Fizzbuzz</title>
		<link>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/</link>
		<comments>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/#comments</comments>
		<pubDate>Sat, 24 May 2008 21:03:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Google Exercise]]></category>

		<category><![CDATA[IE]]></category>

		<category><![CDATA[Interview]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,8cfd415e-f895-4115-8713-5a879e1abb15.aspx</guid>
		<description><![CDATA[Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to [...]]]></description>
			<content:encoded><![CDATA[<p>Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to Java. Things went great, I moved on to the next step of the process - writing code (a JavaScript widget for Gmail) with a 2 day (weekend) hard deadline. At the time I was wearing JavaScript diapers, but tried the exercise anyways - I&#39;m still convinced the recruiter confused my Java / C# experience with JavaScript. Anyhow&#8230; </p>
<p> <b>The Google Web Developer Exercise:<br /> </b><br />
<blockquote style="border: 1px solid rgb(207, 207, 207); padding-left: 7px;">
<h3>Web Developer Exercise </h3>
<p> Attached are three states of a new contacts widget. This widget will be used across Google and may be anywhere on the page. Designers will also use this in mocks for usability tests. Create the HTML, CSS, and JavaScript for the widget as described in the image. Your solution must work in Firefox v1.5+ and IE v6+. Bonus points for a solution that degrades nicely on older browsers.</p>
<p> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise02.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise03.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise01.png">  </p></blockquote>
<p><b>After my first attempt, I concluded that: </b> <br /> 
<ol>
<li> My JavaScript knowledge was embarrassing  </li>
<li> <a href="http://en.wikipedia.org/wiki/Dynamic_language">Dynamic programming languages</a> like JavaScript using <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototypical inheritance</a> were awesome - as a monocultured .NET developer I had sorely been missing out</li>
<li> Framework Web Developers (ASP.NET, Ruby on Rails, and so on) aren&#39;t really Web Developers - we depend on a framework (an API) as a crutch, where the law of <a href="http://en.wikipedia.org/wiki/Leaky_abstraction">Leaky Abstractions</a> is very real, and often when it rears it&#39;s head we use our <a href="http://en.wikipedia.org/wiki/Golden_hammer">golden hammer</a> (our multipurpose language of choice), but there are better tools at hand </li>
<li> Web Developers claiming <i>n</i> years of experience need to at least know JavaScript, CSS, HTML / XHTML, a server-side language, and some XML / XSL - NOT just a single multipurpose language or framework </li>
<li> Innovation can only happen when you become <i>one</i> with the technologies surrounding your realm - for example: <a href="http://adaptivepath.com/ideas/essays/archives/000385.php">Jesse James Garrett</a> probably would not have publicized AJAX had he been an exclusive ASP.NET developer. Diversity is essential for innovation </li>
</ol>
<p> In retrospect this exercise is brilliant, it&#39;s a more complex derivation of a <a href="http://www.codinghorror.com/blog/archives/000781.html">Fizzbuzz exercise</a>, which effectively weeds out the knowledgeable candidates from the n00bs. JavaScript is notorious for being one of <a href="http://www.crockford.com/javascript/javascript.html">the world&#39;s most misunderstood language</a>, many developer (and the ASP.NET Framework) still use JavaScript techniques from the old days of Netscape. For example: <i>&lt;a onclick=&#8221;return false;&#8221; &#8230;</i>, or &lt;a <i>href=&#8221;Javascript: do something;&#8221; &#8230;</i> are common <a href="http://en.wikipedia.org/wiki/DOM_Events#DOM_Level_0">DOM Level 0</a> inline techniques that should be avoided. These techniques have been replaced, but finding developer that use these JavaScript techniques can be hard.</p>
<p> <b>By having a developer complete this exercise you effectively determine that the they understands these concepts:</b> <br /> 
<ul>
<li> Cross browser compatibilities and work arounds for both JavaScript and CSS - with a preference given to <a href="http://www.quirksmode.org/js/support.html">feature detection (object detection)</a> vs browser detection, an understanding of the different event handling models between browsers </li>
<li> An understanding of the separation of concerns - JavaScript, markup, and CSS should be separate files, or at least separated within the document </li>
<li> Event registration and listening - <a href="http://en.wikipedia.org/wiki/DOM_Events">DOM events</a>, the different browser event models, no inline level 0 event declarations, no pseudo JavaScript protocol inline declarations within markup </li>
<li> An understanding of <a href="http://en.wikipedia.org/wiki/Functional_languages">functional languages</a> - <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29">closures</a>, <a href="http://adam.kahtava.com/journal/2008/03/17/NamespacingYourJavaScript.aspx">namespaces</a>, <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambdas</a>, recursion where necessary </li>
<li> Node manipulation - creating, swapping, removing elements</li>
<li> Knowledge of <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">non-obtrusive JavaScript techniques</a> </li>
<li> Importance of modular / compartmentalization of CSS and JavaScript - defensive programming techniques that minimize the risk of interfering with other scripts and elements within the page, part of the non-obtrusive techniques, how to avoid global variables</li>
<li> An understanding on how to debug JavaScript from both IE (<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">link</a>) and Firefox (<a href="http://www.getfirebug.com/js.html">link</a>)</li>
<li> <a href="http://javascript.crockford.com/code.html">JavaScript code conventions</a> - naming conventions, statement conventions</li>
<li> CSS naming conventions</li>
<li> General DHTML / AJAX techniques - showing and hiding elements </li>
<li> A gauge on their attention to details and UI design intuition - what their gut tells them to do when things aren&#39;t spelled out</li>
</ul>
<p> <b>My latest crack at the Google Web Developer Exercise:</b>  <br /> <iframe src="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/" style="border-width: 0px; width: 320px; height: 300px; margin-left: 15px; float: left;"> </iframe> <br /> <i>You&#39;ll have to visit my site (view this blog post outside a RSS reader) to view the code in action.</p>
<p> </i>The code: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.js">GoogleExercise.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.css">GoogleExercise.css</a> </p>
<p> <i>Today I&#39;m wearing JavaScript training wheels - </i><i>feel free to comment on the code, I&#39;m always looking for improvements and suggestions. I did take a couple shortcuts on the CSS / UI side of things as I was focusing more on the functionality.</i>  </p>
<p> <i>Using one of the <a href="http://en.wikipedia.org/wiki/Ajax_Libraries">AJAX Libraries</a> (like <a href="http://jquery.com/">jQuery</a>) we could certainly do this exercise in significantly fewer lines of code.</p>
<p> </i>
<div style="clear: both;">Today I still think about <a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">Getting that job at Google</a>, Yahoo!, Amazon, or Microsoft. <a href="http://adam.kahtava.com/journal/2008/01/13/HowWellDoYouKnowJavaScript.aspx">How well do you know JavaScript?</a> </p></div>
<div style="border: 1px solid #ccccee; padding: 5px; background-color: #ffffdd;"><strong>Update:</strong> I redid the Google Exercise using jQuery and more semantics, you can find my latest version here: <a href="http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/">The Google Exercise Revisited: Semantic Markup with jQuery</a>.</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
