<?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; Programming Languages</title>
	<atom:link href="http://adam.kahtava.com/journal/category/programming-languages/feed/" rel="self" type="application/rss+xml" />
	<link>http://adam.kahtava.com/journal</link>
	<description>A software development blog</description>
	<pubDate>Fri, 12 Mar 2010 03:41:25 +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>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>Working On the Dark Side of the Technology Stack: A .NET Developer Working in the Java Community</title>
		<link>http://adam.kahtava.com/journal/2009/02/26/working-on-the-dark-side-of-the-technology-stack-a-net-developer-working-in-the-java-community/</link>
		<comments>http://adam.kahtava.com/journal/2009/02/26/working-on-the-dark-side-of-the-technology-stack-a-net-developer-working-in-the-java-community/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 15:26:39 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

		<category><![CDATA[Open Source]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,acb8c5ea-3a52-4076-a729-6d666a0d1420.aspx</guid>
		<description><![CDATA[ 
 Over the past couple months I had the pleasure of working in a Java shop. Up to this point I&#39;ve spent most of my time in the .NET realm. Working with Java was a great chance to experience the similarities and contrasts between environments, cultures, and web application implementations. Here are a couple [...]]]></description>
			<content:encoded><![CDATA[<div style="padding-left: 5px; float: right;"><a href="http://flickr.com/photos/leahculver/2380865613/"><img style="border: 0px none ;" src="http://farm3.static.flickr.com/2206/2380865613_4671d9c404_m.jpg"></a> </div>
<p> Over the past couple months I had the pleasure of working in a Java shop. Up to this point I&#39;ve spent most of my time in the .NET realm. Working with Java was a great chance to experience the similarities and contrasts between environments, cultures, and web application implementations. Here are a couple of my observations.</p>
<p> <b>Java developers are more knowledgeable than the <i>typical </i>.NET developer. </b>Java developers tend to gravitate towards complexity, Linux, UNIX, open source, and continuous learning. They are less familiar with the wizards and drag-n-drop style development that often characterize .NET development. The Java developers I worked with didn&#39;t depend on a single unified IDE (like Visual Studio), instead each developer chose their text editor / environment (Emacs, Eclipse, TextMate, E-TextEditor, and jEdit were all being used on a single project). Each developer was responsible for being productive with their editor; and took responsibility for learning shortcuts, and other performance enhancing techniques. This broad use of editors placed an emphasis on the core command line tools which ensured that developers knew how the application was put together, and cultivated broad application troubleshooting skills within the team.  </p>
<p> <b>Unified IDEs (like Visual Studio or Eclipse) do not result in faster development, better developers do.</b> Developers empowered with the ability to choose their development environment / text editors / operating system resulted in more passion and responsibility. Informal friendly rivalry between editor users drove development faster while providing diversity within the work place. &nbsp;</p>
<p> <b>Programming languages and technology stacks don&#39;t matter to <i>experienced</i> software developers.</b> As a developer it&#39;s easy to become a fanboy of languages or technologies stacks, but&#8230; they don&#39;t matter - writing good software within the bounds of our project do. There&#39;s no reason to be tied to a specific language or technology stack. Sure, languages fall into a specific category (dynamic, static, classical inherited, prototypical inherited) but programming languages are very similar.</p>
<p> Steve McConnell has been saying this all along:<br />
<blockquote>mastering more than one language is often a watershed in the career of a professional programmer. <b>Once a programmer realizes that programming principles transcend the syntax of any specific language, the doors swing open to knowledge that truly makes a difference in quality and productivity.</b> - Steve McConnell, <a href="http://www.amazon.com/dp/0735619670/">Code Complete 2nd Edition</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/02/26/working-on-the-dark-side-of-the-technology-stack-a-net-developer-working-in-the-java-community/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fun with Ruby: The RubyGem Package Manager and the Test-Unit Gem</title>
		<link>http://adam.kahtava.com/journal/2009/02/02/fun-with-ruby-the-rubygem-package-manager-and-the-test-unit-gem/</link>
		<comments>http://adam.kahtava.com/journal/2009/02/02/fun-with-ruby-the-rubygem-package-manager-and-the-test-unit-gem/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:45:31 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Programming Languages]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,57d735fd-66d7-4d79-acf7-07664006198d.aspx</guid>
		<description><![CDATA[Ruby is consistently placed as one of the ten most popular programming languages - see the TIOBE Programming Community Index for more language comparisons. Matz (the creator of Ruby) described his guiding philosophy for the language as one that&#8217;s &#8220;designed to make programmers happy&#8221;. While the Ruby language gets a lot of praise for its [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby is consistently placed as one of the ten most popular programming languages - <em>see the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE Programming Community Index</a> for more language comparisons</em>. <a href="http://en.wikipedia.org/wiki/Yukihiro_Matsumoto">Matz</a> (the creator of Ruby) described his guiding philosophy for the language as one that&#8217;s <em>&#8220;designed to make programmers happy&#8221;</em>. While the Ruby language gets a lot of praise for its zen like qualities, its clarity, and terseness. The tools surrounding Ruby like the <a href="http://rubyforge.org/projects/rubygems/">RubyGem Package Manager</a> along with its active community and growing collection of Gems (view the list <a href="http://rubyforge.iasi.roedu.net/gems/">here</a>) are often overlooked.</p>
<p>I like the RubyGem system just as much as Ruby, it makes a developer&#8217;s life easy.</p>
<p>For example, let&#8217;s say I want to design a new class:</p>
<ul>
<li> <a href="http://www.ruby-lang.org/en/downloads/">Install Ruby</a></li>
<li> Install the Test-Unit Gem (along with a couple automatically installed prerequisites):</li>
</ul>
<pre>C:\&gt;gem install test-unit
 Successfully installed test-unit-2.0.2
 Successfully installed hoe-1.8.3
 Successfully installed rubyforge-1.0.2
 Successfully installed rake-0.8.3</pre>
<ul>
<li> Create a new <em>test.rb</em> file along with a new <em>class.rb</em> file (alternately we could have used the Interactive Ruby Shell directly from the command line)</li>
<li> Run the test (<em>test.rb</em>):</li>
</ul>
<pre>C:\&gt;ruby test.rb
 Loaded suite test
 Started
 .
 Finished in 0.001 seconds.
 1 tests, 1 assertions, 1 failures, 0 errors</pre>
<ul>
<li> ???</li>
<li> Profit! :)</li>
</ul>
<p>Contrasting this to the Java / C# world: I&#8217;d be installing a compiler (or slower yet an IDE), then installing / configuring a testing framework. I&#8217;d also probably be installing a build process tool (like ant / nAnt), then I&#8217;d need to create a build file.</p>
<p>Similarly if I wanted to install Rails at the command line I specify <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 13px; font-weight: bold;">gem install rails</span> or if I want to use  RSpec <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 13px; font-weight: bold;">gem install rspec</span>.</p>
<p>The Ruby tools, ecosystem, and community is fantastic.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/02/02/fun-with-ruby-the-rubygem-package-manager-and-the-test-unit-gem/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Winforms / Webforms Can Make You Obsolete: Framework or Metaphor Lock-in is a Liability For Your Career</title>
		<link>http://adam.kahtava.com/journal/2008/10/13/winforms-webforms-can-make-you-obsolete-framework-or-metaphor-lock-in-is-a-liability-for-your-career/</link>
		<comments>http://adam.kahtava.com/journal/2008/10/13/winforms-webforms-can-make-you-obsolete-framework-or-metaphor-lock-in-is-a-liability-for-your-career/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 15:47:45 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f1df3cbd-b0b0-4d78-95e2-1ff113acd6d7.aspx</guid>
		<description><![CDATA[I&#8217;ve always been uncomfortable with the ASP.NET Webform / Winform metaphor - I moved to ASP.NET from ASP 3.0 / PHP with no proper Windows development experience. The Webform / Winform metaphor was alien, but the code behind model and the ability to re-use controls drew me in, while the Webform metaphor became a tolerated [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been uncomfortable with the ASP.NET Webform / Winform metaphor - I moved to ASP.NET from ASP 3.0 / PHP with no proper Windows development experience. The Webform / Winform metaphor was alien, but the code behind model and the ability to re-use controls drew me in, while the Webform metaphor became a tolerated evil. Today ASP.NET MVC and the announcement that Microsoft has embraced jQuery keeps me interested.</p>
<p>As developers, limiting ourselves to a single metaphor, framework, or programming language is a liability to our career. In order to remain employable and engaged with our work, we need to understand the higher level concepts surrounding our chosen development arena - if you&#8217;re working in the webspace this means knowing CSS, JavaScript, HTML, and more than one server-side language. Then beyond technologies and languages we should be looking at transcending principals like design patterns, and good design practices.</p>
<blockquote><p>identifying with anything so strongly that it starts to give you emotional reaction is really bad. <strong>You never know when your language is going to be obsolete or &#8230; your favorite framework is going to be replaced.</strong> &#8230; I would love to see everybody learn a bunch of languages because it does make you a better programmer. &#8230; Most people will never switch languages. - Steve Yegge, <a href="http://blog.stackoverflow.com/2008/10/podcast-25/">stackoverflow podcast #25</a> </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/10/13/winforms-webforms-can-make-you-obsolete-framework-or-metaphor-lock-in-is-a-liability-for-your-career/feed/</wfw:commentRss>
		</item>
		<item>
		<title>More on Naming Conventions: My Naming Heuristics</title>
		<link>http://adam.kahtava.com/journal/2008/08/30/more-on-naming-conventions-my-naming-heuristics/</link>
		<comments>http://adam.kahtava.com/journal/2008/08/30/more-on-naming-conventions-my-naming-heuristics/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 15:27:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Programming Languages]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,bae46b4a-b837-48b2-9594-da47e8b26e9a.aspx</guid>
		<description><![CDATA[Following a hard rule for naming conventions in software development is difficult; it&#8217;s always a compromise between how things were named in the past and where things are going in the future. Other dependencies like the size of the project, the number of developers, and the environment you&#8217;re developing in play important factors. In short, [...]]]></description>
			<content:encoded><![CDATA[<p>Following a hard rule for naming conventions in software development is difficult; it&#8217;s always a compromise between how things were named in the past and where things are going in the future. Other dependencies like the size of the project, the number of developers, and the environment you&#8217;re developing in play important factors. In short, there&#8217;s never a great naming rule, but here&#8217;s my general (heuristic) approach to naming.</p>
<p>My heuristic approach to naming conventions:</p>
<p><strong>New Development / Greenfield Work:</strong></p>
<ul>
<li> Follow the conventions of the language, or the standards used within the larger community, and pay attention to the API. For example: If you&#8217;re programming in .NET follow the naming conventions outlined in MSDN, in JavaScript look at the DOM API, in CSS look at the definitions.</li>
<li> If a formal naming convention exists for the organization and these conventions makes sense (they aren&#8217;t too far off the language APIs) then follow them. If it feels like the naming conventions were created in the dark ages by a very-very senior COBOL Developer then start asking questions.</li>
</ul>
<p><strong>Maintenance / Brownfield Work:</strong></p>
<ul>
<li> Follow the conventions of the existing code if you&#8217;re modifying an existing module.</li>
<li> If you&#8217;re creating new modules then consider following the conventions of the language and API.</li>
</ul>
<p>This post was inspired by a podcast by <a href="http://www.dotnetrocks.com/default.aspx?showNum=354">Donald Belcham and Kyle Baley on Brownfield Applications</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/08/30/more-on-naming-conventions-my-naming-heuristics/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cross Language Naming Conventions: Avoiding Verbosity In The Presentation Layer</title>
		<link>http://adam.kahtava.com/journal/2008/08/29/cross-language-naming-conventions-avoiding-verbosity-in-the-presentation-layer/</link>
		<comments>http://adam.kahtava.com/journal/2008/08/29/cross-language-naming-conventions-avoiding-verbosity-in-the-presentation-layer/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 22:17:38 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[ASP.NET]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,3a071811-8e92-4511-a2e3-e4501864e82d.aspx</guid>
		<description><![CDATA[
Most languages and technologies used in web applications come with their own unique naming conventions - which is unfortunate, but necessary, because diversity is important. Languages like JavaScript and PHP use camelCase, CSS uses-hyphenated-delimiters, and ASP.NET / Java / and the like adhere to the conventions used in their respective libraries and frameworks. Managing the [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 5px; float: right;"><a href="http://www.flickr.com/photos/jimmysmith/135368590/"><img style="border: 0px none ;" src="http://farm1.static.flickr.com/56/135368590_cb5abe1793_m.jpg" alt="" /></a></div>
<p>Most languages and technologies used in web applications come with their own unique naming conventions - <em>which is unfortunate, but necessary, because diversity is important</em>. Languages like JavaScript and PHP use <a href="http://en.wikipedia.org/wiki/CamelCase">camelCase</a>, CSS <em>uses-hyphenated-delimiters</em>, and ASP.NET / Java / and the like adhere to the conventions used in their respective libraries and frameworks. Managing the different naming conventions in a web application can be difficult, but with discipline, embracing each language&#8217;s conventions can provide some great benefits.</p>
<p>A common mistake I&#8217;ve made in the past, was trying to make all languages adhere to a single convention. <strong>As a budding PHP / ASP developer I took <em>the-single-convention-for-all-languages</em> approach</strong>. In retrospect, I used this approach because I didn&#8217;t completely understand the language I was using, and in order to compensate for this lack of knowledge, I&#8217;d try to meld the languages into the mental model I understood best. <strong>This was a mistake.</strong></p>
<p>Today, I find that working with the conventions of the language facilitates re-use (<em>experts in the language understand what I&#8217;m doing</em>), promotes portability (<em>modules can be used across projects regardless of server-side technologies</em>), encourages global collaboration (<em>open source modules and plug-ins can be easily consumed and contributed to</em>), and helps to a nurture a more maintainable application (<em>developers from other language domains can easily maintain the application with a relatively small learning curve</em>). Like a carpenter working with fine material, <strong>I embrace working with the grain of each language</strong>. It&#8217;s also fair to mention that breaking free from the monocultured (<em>one-size-fits-all</em>) approach to naming conventions provides a broader perspective, and also makes your development skills more universal - it might even open the door to different development domains in the future.</p>
<p>Then there&#8217;s the discussion on name length, verbosity, and using meaningful names. Steve McConnell suggests that the optimum name size for a variable or function is between 8 and 20 characters (Chapter 11, <a href="http://www.amazon.ca/dp/0735619670/">Code Complete</a>), but with tools like <a href="http://en.wikipedia.org/wiki/ReSharper">ReSharper</a> (for renaming / refactoring etc&#8230;) I find myself using names well over 30 characters. So names like <em>GetApproveeTotalFromNamedBasket</em> are a common occurrence in my code. However, like most things, verbosity does need balance (everything in moderation right?). In the business layer, descriptive names are a godsend - they jog my memory as I rediscover what the module I wrote last month was supposed to do. But&#8230; in the presentation layer languages (like JavaScript, CSS,  ASP.NET, or XHTML) you may want to reconsider using long descriptive names. Since verbose, long running descriptive names in the presentation layer are passed over the network and can degrade performance. Often times these verbose names are combined together - throw in ASP.NET name mangeling, start hooking in verbose CSS definitions, and then start inserting JavaScript events. All this compounds quickly and result in large page payloads filled with elements like the following:</p>
<pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;div id=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"ctl00_ContentPlaceHolderForAllTheBestImprotantContent
 _PanelForTheBestReviews"</span>&gt; </span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;a onclick=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"LinkButtonClick_ThankYouForTakingTheTimeToReadThis();"</span> </span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> id=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"ctl00_ContentPlaceHolderForAllTheBestImprotantContent_
 RepeaterForAllMyFavoriteBookReiews_ctl00_
 LinkButtonMarkReviewAsFavorite"</span>
<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"> class</span>=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"LinkFormatingCssClass SelectedLinkFormatingCssClass"</span> </span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> href=<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">"javascript:__doPostBack( </span></span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"> ctl00$ContentPlaceHolderForAllTheBestImprotantContent$ </span></span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"> RepeaterForAllMyFavoriteBookReiews$ctl00$LinkButtonMarkReviewAsFavorite'</span></span>
<span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;"> ,'')"</span>&gt;Mark As Favorite &lt;/a&gt; </span></pre>
<p>Note: <em>That mess of code above would fire a JavaScript event then an ASP.NET event. It&#8217;s the result of</em><em> placing an ASP.NET LinkButton, inside a Repeater, inside a Panel, inside a Masterpage, and adding a JavaScript event along with some CSS. We can see that using long names in the presentation layers results in a mess of text. It&#8217;s also fair to mention that the <a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework">ASP.NET MVC Framework</a> lets developers write cleaner presentation code.</em><br />
Sure, everyone cites <em>premature optimization as the root of all evil</em>, and we <strong>do</strong> live in a world of <a href="http://en.wikipedia.org/wiki/Gzip">gzip file compression</a> and JavaScript <a href="http://en.wikipedia.org/wiki/Minify">minifiers</a>. But&#8230; keeping names short in CSS, ASP.NET, and XHTML isn&#8217;t hard as long as you&#8217;re mindful of the final goal. Smaller names in the presentation layer will reduce the amount of data transferred over the network which increase the performance of the application.</p>
<p>Joseph Smarr of Plaxo.com once said:</p>
<blockquote><p>Web applications are only slow if you let them get slow - <a href="http://channel9.msdn.com/posts/Charles/Douglas-Crockford-Alex-Russell-and-Joseph-Smarr-On-the-Past-Present-and-Future-of-JavaScript/">Douglas Crockford, Alex Russell and Joseph Smarr: On the Past, Present and Future of JavaScript</a> [30:00]</p></blockquote>
<p><strong>My preference (project requirements warranting) is to keep things short and concise in the presentation languages while using longer descriptive names outside the presentation languages. What&#8217;s your preference?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/08/29/cross-language-naming-conventions-avoiding-verbosity-in-the-presentation-layer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Living The High-tech Illusion: Software Development is Not Rocket Surgery</title>
		<link>http://adam.kahtava.com/journal/2008/06/15/living-the-high-tech-illusion-software-development-is-not-rocket-surgery/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/15/living-the-high-tech-illusion-software-development-is-not-rocket-surgery/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 19:50:02 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Calgary]]></category>

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

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

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

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

		<category><![CDATA[Team Work]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f8afb754-90dc-4231-8ee7-94be1b9c19c1.aspx</guid>
		<description><![CDATA[#CalgaryBarCamp was swell. It was refreshing to meet such a diverse group of like minded people that all essentially do the same thing (create software), but do it in different ways using different tools, platforms, and languages. The ad-hoc discussions both in the bar and between sessions were my highlight. A reoccurring theme in our [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/rohdesign/2560405008/"><img style="border: 0px none ; float: right;" src="http://farm4.static.flickr.com/3032/2560405008_f4afc06eee_m.jpg" alt="" /></a><a href="http://barcamp.org/BarCampCalgary">#CalgaryBarCamp</a> was swell. It was refreshing to meet such a diverse group of like minded people that all essentially do the same thing (create software), but do it in different ways using different tools, platforms, and languages. The ad-hoc discussions both in the bar and between sessions were my highlight. A reoccurring theme in our conversations was that technology, tools, and platforms don&#8217;t matter that much. <strong>What really matters is: people, communication, ideas, taking risks, and motivation.</strong></p>
<p>The topic of our discussions reminded me of something David Heinemeier Hansson said when talking about software development:</p>
<blockquote><p>You don&#8217;t need to be a f***ing genius to make any of this stuff work, it&#8217;s not rocket surgery! - <a href="http://omnisio.com/startupschool08/david-heinemeier-hansson-at-startup-school-08">David Heinemeier Hansson at Startup School 08 </a></p></blockquote>
<p>DeMarco and Lister also echoed this outlook back in the 80&#8217;s, and publicized: the High-Tech Illusion:</p>
<blockquote><p>the High-Tech Illusion: [is] the widely held conviction among people who deal with any aspect of new technology &#8230; that they are in &#8230; high-tech business. [These people] are indulging in this illusion whenever they find themselves explaining at a &#8230; party, say, that that they are &#8220;in computers&#8221; &#8230; The implication is that they are part of the high-tech world. [These people] usually aren&#8217;t. <strong>The researchers who made the fundamental breakthroughs in those areas are in the high-tech business. The rest of us are appliers of their work.</strong> - <a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;tag=adamkahtavaap-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0932633439">Peopleware : Productive Projects and Teams</a></p></blockquote>
<p>If we <span style="text-decoration: underline;">were</span> in the High-Tech business, then we&#8217;d be the bottom feeders (the parasites, the grunts), because our daily activities revolve around consuming other peoples research and work (programming languages, platforms, frameworks and the like). <strong>We are consumers, we&#8217;re not on the cutting edge nor are we in the high-tech world.</strong></p>
<p>Perhaps building software could be much like outfitting yourself for a day in the snow. You head off to the local shopping mall, you acquire the functional items to keep yourself warm, but brands and store choice don&#8217;t really matter. Whether we&#8217;re buying winter boots or choosing a programming language, technology doesn&#8217;t really matter. There are an infinite number of ways to solve any problem, as well as an infinite number of technical permutations to form a solution. If we can solve the problem within the constraints of our problem domain then we&#8217;ve succeeded.</p>
<p>The High-Tech Illusion often permeates my world - I work as a Web Developer in the Microsoft realm. I continually see the High-Tech Illusion manifests itself in these situations:</p>
<ul>
<li> Colleagues talking in vague opaque high-level metaphors that patronizingly shield you from the inter working of what they assume is beyond your comprehension</li>
<li> Fixations on specific tools, hardware, platforms, and methodologies while the problem that needs to be solved is diluted and any combination of these items could solve the problem</li>
<li> Colleagues that assume superiority and can&#8217;t acknowledge that knowledge is acquired through research and a continual efforts to improve</li>
</ul>
<p>Pretentiousness in the software realm (in teams, organization, and so on) is usually the byproduct of someone that&#8217;s living the High-Tech Illusion.</p>
<p>I&#8217;ve been guilty of subscribing to the High-Tech Illusion. How does the High-Tech Illusion permeate your world? How can we get back to reality?</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/15/living-the-high-tech-illusion-software-development-is-not-rocket-surgery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How I Got Started In Software Development: Confessions of a Script Kiddie</title>
		<link>http://adam.kahtava.com/journal/2008/06/13/how-i-got-started-in-software-development-confessions-of-a-script-kiddie/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/13/how-i-got-started-in-software-development-confessions-of-a-script-kiddie/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 23:45:53 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,291b1c53-14dd-46d6-8f6c-792250d4c998.aspx</guid>
		<description><![CDATA[

The classic geek haircut. I still sport this cut today. :)
How old were you when you started programming?
Somewhere around the age of 8 or earlier, computers were always just there - they&#8217;d been in my life since I can begin to remember.
How did you get started in programming? What was your first language?
My dad went [...]]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #c8c8c8; margin: 5px; padding: 5px; float: right; width: 150px; text-align: center;">
<p><img src="http://adam.kahtava.com/journal/images/blog/Geek-Adam-Kahtava.jpg" alt="" /><br />
The classic geek haircut. I still sport this cut today. :)</div>
<p><strong>How old were you when you started programming?</strong></p>
<p>Somewhere around the age of 8 or earlier, computers were always <em>just </em>there - they&#8217;d been in my life since I can begin to remember.</p>
<p><strong>How did you get started in programming? What was your first language?</strong></p>
<p>My dad went to College for robotics when I was around 8 years old. His robotics program involved lots of programming and together we worked through a couple BASIC programming books. I continued to mess around with BASIC and wrote scripts so I could get at my favourite games. Later I was frequenting BBSs (The Fisherman&#8217;s Scroll), and surfing the internet through lynx (a text based browser). I eventually became a <a href="http://en.wikipedia.org/wiki/Script_kiddie">Script kiddie</a> - being a Script kiddie was what really turned me on to programming. My friends and I would write IRC war scripts, play <a href="http://en.wikipedia.org/wiki/Muds">MUDs</a>, and try to figure out how Trumpet Winsock, networks, and HTML worked - those were the days of Netscape 1 (the version with the big glowing &#8216;N&#8217;). Later we tried writing our own version of <a href="http://en.wikipedia.org/wiki/Netbus">NetBus</a> with the help of C / C++ programmers on IRC - the fragments of the C language these programmers exposed to me were magical, and sparked an genuine interest in computer programming. In addition to all this my dad kept a constant supply of old and new computer parts funneling into our house, my brothers and I would build computers from the parts - today my closest brother is a Linux fanatic, evidently all this sparked his interest too.</p>
<p>Programming has always been a part of my life, BASIC was my first language.</p>
<p><strong>What was the first real program you wrote?</strong></p>
<p>I followed a couple game tutorials from my BASIC books, but my first real program would have been Pacman programmed in Turing - in my final year of high school I enrolled in a computer course, where the instructor let us write any program we wanted for half a school year I chose to write a game.</p>
<p><strong>What languages have you used since you started programming?</strong></p>
<p>I&#8217;ve spent most my time in C, C++, C#, JavaScript, SQL, and the mark-up languages. I primarily program for the web or at least for the network, but have used many other languages like COBOL and so on&#8230;</p>
<p>While using multiple languages are great, I really believe that we you should completely understand the fundamentals of at least two languages (like say a static language and a dynamic language), because:</p>
<blockquote><p>Once a programmer realizes that programming principles transcend the syntax of any specific language, the doors swing open to knowledge that truly makes a difference in quality and productivity. - Steve McConnell, Code Complete 2nd Edition. </p></blockquote>
<p><strong>What was your first professional programming gig?</strong></p>
<p>I would have been 18. It was my first year of College, I needed a part-time job in order to pay rent, I initially worked on an assembly line, but would occasionally help the office workers troubleshoot their IT issues. I soon found myself working as the company&#8217;s network admin / computer gopher. I went on to develop their cataloging system and a website. At the time I was going to school for Electronic Engineering, but decided to switch to a Computer specific program. Previous to this, I had freelanced a couple websites for local businesses while in high school.</p>
<p><strong>If you knew then what you know now, would you have started programming?</strong></p>
<p>Absolutely! The industry continues to instill a sense of wonder in me. I can&#8217;t imagine doing anything else.</p>
<p><strong>If there is one thing you learned along the way that you would tell new developers, what would it be?</strong></p>
<ul>
<li> Read! You&#8217;d be surprised how little progress has been made in the software industry over the past 30 years. By reading we can learn from the mistakes others have made.</li>
<li> Don&#8217;t be intimidated by code or frameworks handed down by large organizations, their code isn&#8217;t any different than yours.</li>
<li> Hard work always pays off, or as Thomas Edison said: <em>&#8220;Success is 10 percent inspiration and 90 percent perspiration.&#8221;</em></li>
</ul>
<p><strong>What&#8217;s the most fun you&#8217;ve ever had &#8230; programming?</strong></p>
<p>Collaborative programming is always fun whether it be paired programming or working together on a project. It&#8217;s hard to pinpoint the most fun I&#8217;ve <em>&#8220;ever&#8221;</em> had, because it&#8217;s all fun. :)</p>
<p><em>This post was in response to Michael Eaton&#8217;s initial post on: <a href="http://michaeleatonconsulting.com/blog/archive/2008/06/04/how-did-you-get-started-in-software-development.aspx">How did you get started in software development?</a></em></p>
<p><strong>Now it&#8217;s your turn to answer: How did you get started in software development?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/13/how-i-got-started-in-software-development-confessions-of-a-script-kiddie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book Reviewed: JavaScript: The Good Parts by Douglas Crockford</title>
		<link>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 23:32:33 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,6b653e5a-27a0-4fc6-bd15-85cd9c414372.aspx</guid>
		<description><![CDATA[Weighing in at 140+ pages of content, JavaScript: The Good Parts [Douglas Crockford] cuts through the obscurities, pleasantries, and filler found in most technical books. Instead, this book dives straight into the heart of the JavaScript language. It presents the clearest comprehensive explanation of what makes JavaScript a great programming language that I&#8217;ve encountered to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596517742/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596517742"><img style="border-width: 0px; float: right;" src="http://ecx.images-amazon.com/images/I/51Mb1xCr7CL._SL500_AA240_.jpg" alt="" /></a>Weighing in at 140+ pages of content, <a href="http://www.amazon.com/gp/product/0596517742/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596517742">JavaScript: The Good Parts [Douglas Crockford]</a> cuts through the obscurities, pleasantries, and filler found in most technical books. Instead, this book dives straight into the heart of the JavaScript language. It presents the clearest comprehensive explanation of what makes JavaScript a great programming language that I&#8217;ve encountered to date. It nails the important concepts, like JavaScript&#8217;s: object oriented nature, its classless (pseudoclassical) nature, and functional nature. While covering the fundamentals like JavaScript&#8217;s: functions, lexical scoping, lambdas, prototypal inheritance, and functional inheritance.</p>
<p>This book&#8217;s size makes it approachable for all audiences, its style is terse and concise. This book has the potential to do for JavaScript, what Richie&#8217;s inspirational classic the <a href="http://www.amazon.com/gp/product/0131103628/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131103628">C Programming Language</a> did for the C language.</p>
<p>JavaScript is the programming language of the web (AJAX), and this book will guide you through the good parts of this often misunderstood language - while this book is an excellent reference, it is not intended to replace <a href="http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/">JavaScript: The Definitive Guide</a>, you&#8217;ll do best to have both these books on hand.</p>
<p>If you enjoyed (or are considering) this book then you may want to learn more of what Douglas Crockford has to say, check out his great JavaScript video series on the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a>.</p>
<p>I highly recommend this book. View my review on <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/ref=cm_pdp_reviews_see_all?ie=UTF8&amp;sort_by=MostRecentReview">Amazon</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/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>
		<item>
		<title>The ASP.NET AJAX Framework is for Dummies</title>
		<link>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 21:09:35 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f3b618d7-4a7d-4892-88d4-3b85bcb01555.aspx</guid>
		<description><![CDATA[
The ASP.NET AJAX Framework is an embarrassing server-side centric approach to DHTML / AJAX web development. While most programming languages and frameworks come with both good and bad parts, the ASP.NET AJAX Framework is an example of a bad part - on the contrast the ASP.NET MVC Framework looks to be a good part.
What&#8217;s wrong with the [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 0px 0px 5px 5px; float: right;"><a href="http://www.flickr.com/photos/chuckbiscuito/161971512/"><img style="border: 0px none ;" src="http://farm1.static.flickr.com/78/161971512_bc7776cc98_m.jpg" alt="" /></a></div>
<p>The <a href="http://www.asp.net/ajax/">ASP.NET AJAX Framework</a> is an embarrassing server-side centric approach to DHTML / AJAX web development. While most programming languages and frameworks come with both <em>good</em> and <em>bad</em> parts, the ASP.NET AJAX Framework is an example of a <em>bad part</em> - on the contrast the <a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework">ASP.NET MVC Framework</a> looks to be a <em>good part</em>.</p>
<p><strong>What&#8217;s wrong with the ASP.NET AJAX Framework?</strong></p>
<p><strong>1 .NET Developers are DUMMIES!<br />
</strong>The ASP.NET AJAX Framework appears to have been designed under the assumption that <strong>.NET developers are dummies and can&#8217;t learn or don&#8217;t want to learn JavaScript</strong>. That .NET Developers would rather hobble along with their familiar languages, then to learn something new. I understand that <a href="http://weblogs.asp.net/jeff/archive/2008/03/26/the-asp-net-community-s-only-real-problem-is-education.aspx">the ASP.NET community&#8217;s only real problem is education</a>, so let&#8217;s ask: <a href="http://danhounshell.com/blogs/dan/archive/2008/03/24/what-is-wrong-with-the-asp-net-community.aspx">What is wrong with the ASP.NET Community?</a> Then educate ourselves rather than becoming the .NET Developer statuesque. It&#8217;s patronizing to use a framework that assumes learning a new language is beyond our capabilities. Many of these other programming languages are more expressive than statically typed languages like most of the .NET languages. </p>
<p><strong>2. The <em>&#8220;don&#8217;t write a line of JavaScript&#8221;</em> abstraction leaks like a sieve</strong><br />
The Framework is intended to shelter .NET Developers from the JavaScript language. Which, like driving a car across North America without knowing how to pump gas, stops you dead. Either you depend on someone to pump your gas - depend on a 3rd party (vendors or the ASP.NET AJAX Control Toolkit) and their many authors to write your JavaScript - or you stop moving. As Web Developers, sooner or later learning how to pump your own JavaScript becomes a mandatory skill.</p>
<p><strong>3. Client-side programming from the Server-side is a absurd</strong><br />
The AJAX Framework does back flips to translate server-side code into JavaScript, and then requires that you write JavaScript anyway. Save yourself the pain, learn JavaScript. One day <a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">The Law of Leaky Abstractions</a> comes into play, the gas station attendant fills your gas tank with diesel - the AJAX Control Toolkit blows requires debugging and you have to learn JavaScript anyways.</p>
<p><strong>4. Bloated, poor performance, bad user and developer experience</strong><br />
The AJAX Framework extends many of the native JavaScript objects as it attempts to turn JavaScript into a <a href="http://en.wikipedia.org/wiki/Static_type#Static_typing">staticly typed</a> programming language, and tries to hook into the ASP.NET life cycle, but all these features are unneeded as they are <span style="text-decoration: underline;">ALL</span> already achievable through the native JavaScript language - <em>if it walks like a duck and quacks like a duck, then&#8230; err&#8230; could someone remind me why we need typed languages in a web browser?</em> Anyhow; all these object extensions, enhancements, and upgrades, contribute to more scripts that need to be downloaded and increases the number of scripts running in your browser. Then there&#8217;s partial-page rendering and Update Panels which do full page post backs under the guise of AJAX. BAD! Client-side scripting is supposed to enhance the user experience not make it worse. Other AJAX Frameworks are built with performance as their number one goal, but in the ASP.NET AJAX Framework adding more widgets to JavaScript seemed to be the first priority, and performance an after thought.</p>
<p><strong>5. Working against the grain is a waste of time</strong><br />
The AJAX Framework works against the grain, it would be nice if it embraced the JavaScript language. Very few of the concepts and metaphors used in the ASP.NET AJAX Framework transcend AJAX techniques or frameworks - your time is probably better spent learning how JavaScript works or how the other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a> work.</p>
<p><strong>6. Disconnected from the ASP.NET MVC Framework</strong><br />
The ASP.NET MVC Framework throws the ASP.NET life cycle away leaving more dead weight ASP.NET AJAX Framework script and rendering many of the AJAX Framework techniques moot.</p>
<p><strong>7. The </strong><strong>ASP.NET AJAX Framework</strong><strong> almost over looks the &#8216;J&#8217; in AJAX - &#8216;J&#8217; stands for JavaScript (that&#8217;s <span style="text-decoration: underline;">GOOD</span></strong>)<br />
JavaScript is the glue of the web, even the ASP.NET Framework depends heavily on JavaScript, it is not something to shy away from.</p>
<p><strong>8. Aside from local intranet sites, no one really uses the ASP.NET AJAX Framework.</strong><br />
The AJAX Framework isn&#8217;t widely used. The ASP.NET AJAX site showcases <a href="http://www.asp.net/ajax/showcase/">25 sites</a> using ASP.NET AJAX. None of these applications appear to be high-traffic or moderately high-traffic applications. On the other hand, the YUI site showcases <a href="http://209.73.186.27/yui/poweredby/">89 sites</a>, out of these sites, 6 sites (flickr, Slashdot, Linkedin, Paypal, O&#8217;Reilly, My Opera) could be considered high-traffic. Other AJAX libraries like jQuery, and Dojo compare similarly. Your time might be better spent learning one of the other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a>.</p>
<p>If we (as .NET Developers) are going to claim we know AJAX, then let&#8217;s focus on the core of AJAX (JavaScript) and stop obscuring it in poor frameworks. Frankly the ASP.NET AJAX Framework is embarrassing, <strong>the web development community is laughing at the ASP.NET AJAX Framework and the Developers touting it.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book Reviewed: JavaScript: The Definitive Guide by David Flanagan</title>
		<link>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 14:49:27 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,d293d1fa-0815-4cf5-9e66-494cdddc8e00.aspx</guid>
		<description><![CDATA[  JavaScript: The Definitive Guide by David Flanagan is a great book! When I began reading this book I was convinced that (like many technical books) the first couple chapters would contain the important stuff and the content would slowly digress into page filler, fluff, and the book would become just another monitor stand. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996"><img style="float: right;" src="http://ecx.images-amazon.com/images/I/51OY5KP5ydL._AA240_.jpg" alt="" /></a> <a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996"> JavaScript: The Definitive Guide by David Flanagan</a> is a great book! When I began reading this book I was convinced that (like many technical books) the first couple chapters would contain the important stuff and the content would slowly digress into page filler, fluff, and the book would become just another <a href="http://adam.kahtava.com/journal/2008/03/08/something-about-the-cobblers-children-having-no-shoes/">monitor stand</a>. But not this book! After finishing the formal chapters I started reading the references - YES, this book is so good I&#8217;m reading the references! Flanagan has raised the bar for all JavaScript books - this book is in its 5th edition, and has been reviewed by a couple web Gurus (<a href="http://www.crockford.com/">Douglas Crockford</a>, <a href="http://www.quirksmode.org/">Peter-Paul Koch</a>).</p>
<p>JavaScript is the <a href="http://en.wikipedia.org/wiki/Assembly_language">assembly language</a> of the internet - most of the current-generation web frameworks make heavy use of JavaScript, CSS, and AJAX. If you really want to understand how ASP.NET or Ruby on Rails really works, how AJAX works, how JavaScript libraries work. If itching to push the web browser envelope, to really innovate, then this book is a required read. In addition if you&#8217;re coming from a staticly type background like Java or .NET, then JavaScript (a functional programming language) will open your eyes to a different programming model. <em><strong>Once you grock the fundamentals of JavaScript you&#8217;ll never be able to look at classical languages (Java, C++, .NET, &#8230;) with a straight face again.</strong></em> I highly recommend this book to any web developer from any web framework camp.</p>
<p>View <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/">my review</a> on Amazon.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The summer of &#8216;99: Junior-Style / Newbie Programming</title>
		<link>http://adam.kahtava.com/journal/2008/03/01/the-summer-of-99-junior-style-n00b-programming/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/01/the-summer-of-99-junior-style-n00b-programming/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 15:36:15 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,1538c0be-a324-4e03-9753-6899bc2e15a8.aspx</guid>
		<description><![CDATA[Steve Yegge discusses junior-style programming in his post: Portrait of a n00b. After reading Steve&#8217; post I decided to dig up some of my own newbie code - this code is from the summer of &#8216;99.
I got my first real C++ book
Bought it at the local book store
read it &#8217;til my eyes turned red
it was [...]]]></description>
			<content:encoded><![CDATA[<p>Steve Yegge discusses junior-style programming in his post: <a href="http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html">Portrait of a n00b</a>. After reading Steve&#8217; post I decided to dig up some of my own newbie code - this code is from the summer of &#8216;99.</p>
<blockquote><p>I got my first real C++ book<br />
Bought it at the local book store<br />
read it &#8217;til my eyes turned red<br />
it was the summer of &#8216;99</p></blockquote>
<p>I found this code amusing&#8230; To keep things short, I included one method, but the entire class implementation is similar - my comments describe almost every facet of what I now regard as relatively simple logic and I&#8217;ve completely removed all whitespace.</p>
<p>As Steve puts it:</p>
<blockquote><p>[I was] making up a temporal narrative in an attempt to carve out a mental picture of the computation for myself. These stories I told myself were a critical part of my mental development as a programmer. I was a child trying to make sense of a big, scary new world. - Steve Yegge: <a href="http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html">Portrait of a n00b</a></p></blockquote>
<p><strong>The code:</strong></p>
<pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//***************************_Command.cpp_*********************************</span>
 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//__Creator:_____________Adam Kahtava</span>
 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//__Date:________________June 14, 1999</span>
 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//*************************************************************************</span> 

 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//-----Implements the init method defined in the command.h header file</span>
 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//-----Keywords and Modifiers are initialized into keyword[], and modifier[1-5].</span>
 <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//-----(Keywords and modifiers are all separated by semi-colons).</span>
 <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> command::init(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">char</span> data[]){
   <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> j</span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">0;
   <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> len<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>strlen(data);
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">for</span>(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> i</span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">0;i&lt;6;i++){
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//this for loop is run 6 times, 1st for the keyword,
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// and 5 times for the modifiers, and increments i.</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span> k</span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">0;
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">char</span> temp[20]<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>{<span style="color: #666666; background-color: #e4e4e4; font-family: Courier New; font-size: 11px;">""</span>}; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//sets temp to "" (the default)</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//goes through "data" copying string into "temp",
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">until delimiter ";", '\0' is encountered or until len &gt;= j</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">  while</span>((data[j]!=';'&amp;&amp;data[j]!='\0')&amp;&amp;len&gt;=j){
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  temp[k]<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>data[j]; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//copies useful data from "data" to "temp"</span>
     </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">i++; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//increments i</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">    k++; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//increments k</span>
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">}
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"> if</span>(i==0){ <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//is initiated on first "for loop".</span>
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  strcpy(keyword,temp); <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//copies temp to keyword/</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  }
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">else</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span>(i&gt;0){ <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//else if "for loop" has been run more than once.</span>
     </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">strcpy(modifier[i<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">-</span>1],temp); <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//copies temp to modifier[1-5].</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  }
   </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">j++; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//increments j</span>
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">}
 } </span></pre>
<p><strong>Notable difference from then and now:</strong></p>
<p>Back in &#8216;99 I thought everything I wrote was awesome, I thought I was a <em>Code Poet</em>, or a <em>Programming Ninja</em> (with <a href="http://www.realultimatepower.net/index4.htm"><em>Real Ultimate Power</em></a>). I thought my descriptive comments were awesome, and probably thought that by removing all whitespace I would be increasing the program&#8217;s efficiency. I thought I could learn more by just programming than reading about programming - I recall discarding books and often hacking my way to comprehension. I was clearly disillusioned.</p>
<p><strong> Today</strong> I agree with Jeff Atwood that <a href="http://www.codinghorror.com/blog/archives/000530.html">everything I write sucks</a>, I have an obsession with white space, and prefer to thoroughly understand a programming language before verbalizing my proficiency in it. Now I occasionally get complaints that I&#8217;m not including enough comments, and I&#8217;m still improving and learning. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/01/the-summer-of-99-junior-style-n00b-programming/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software Ethnocentrism: Staving Off Tunnel Vision</title>
		<link>http://adam.kahtava.com/journal/2008/02/17/software-ethnocentrism-staving-off-tunnel-vision/</link>
		<comments>http://adam.kahtava.com/journal/2008/02/17/software-ethnocentrism-staving-off-tunnel-vision/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 15:40:42 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[CSharp]]></category>

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,7aeb7ce6-8899-400e-b04a-93eb8db398ef.aspx</guid>
		<description><![CDATA[Loosely typed / weakly languages are amazing! But&#8230; for myself, coming to this conclusion was like an acquired taste.
Many people appreciate loosely typed languages for the how expressive, elegant, simple, and Zen like they are - and I agree, but I haven&#8217;t always thought this way. You see; strictly typed (statically typed) programming languages have [...]]]></description>
			<content:encoded><![CDATA[<p>Loosely typed / weakly languages are amazing! But&#8230; for myself, coming to this conclusion was like an <a href="http://en.wikipedia.org/wiki/Acquired_taste"><em>acquired taste</em></a>.</p>
<p>Many people appreciate loosely typed languages for the how expressive, elegant, simple, and Zen like they are - and I agree, but I haven&#8217;t always thought this way. You see; strictly typed (statically typed) programming languages have always been the mainstay of my programming vocabulary, C++, Java, and C# were the meat and potatoes of my programming language diet. I used these languages (strictly typed) because they were familiar, I understood how their compilers, IDEs, and comfortable class-based inheritance model worked. If someone asked me whether I liked C# (insert strict typed language) or JavaScript (insert weakly typed language) I would immediately have given preference to the strictly typed language. <em>Why?</em> Because that&#8217;s where I felt safe, and that&#8217;s what I understood - besides who wants to admit they prefer the <em>&#8220;weak&#8221;</em> language? My preference wasn&#8217;t based on knowledge or experience it was based on my familiarity with the strictly typed culture.</p>
<p>I was suffering from <strong>Software Ethnocentrism</strong>.</p>
<blockquote><p>Software Ethnocentrism often entails the belief that one&#8217;s programming language or development environment is the most important and/or &#8230; are superior to those of other software developers. Within this ideology, software developers will judge other groups in relation to their own particular development environment or culture, especially with concern to programming language, methodologies, behaviour, customs, and religion.  - the derived definition (above) is based on Wikipedia&#8217;s article on <a href="http://en.wikipedia.org/wiki/Ethnocentrism">Ethnocentrism</a>. </p></blockquote>
<p>I had the tell tale signs of Software Ethnocentrism:</p>
<ul>
<li> I thought strictly typed language were <em>&#8220;the bomb&#8221;</em>  - the only viable solution :)</li>
<li> I thought <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development (TDD)</a> and Unit Testing was the panacea</li>
<li> I was completely obsessed with refactoring tools like <a href="http://en.wikipedia.org/wiki/Resharper">ReSharper</a> and Refactoring</li>
<li> I thought my Compiler and <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> were superior</li>
<li> and I had complete faith in multipurpose strictly typed languages like C#</li>
</ul>
<p><strong>Then things changed.</strong> I started diving deep into the hearts of weakly typed languages: JavaScript, Ruby, and LISP. Now today, I wonder If the time I spent hung up on strictly typed languages, TDD, and unit testing could have been better spent by expanding my programming vocabulary. If I had only delved deep into the heart of weakly typed languages (like JavaScript, 3 years ago) and grocked the fundamentals of these other languages, then I could have achieved this richer understanding of programming languages that I have today. It&#8217;s important to note, that i&#8217;m not stating that weakly typed languages are better than strictly typed languages or vise versa, only that both have their place, are equally useful, and should be used when appropriate.<br />
<a href="http://photos1.blogger.com/blogger2/1715/1669/1600/larson-oct-1987.gif"> <img style="border: medium none ; float: right;" src="http://adam.kahtava.com/journal/images/blog/larson-oct-1987.gif" alt="" /> </a><br />
Do you too suffer from Software Ethnocentrism? <strong>Try staving off this programming language tunnel vision, learn a new type of programming language. It might be a better investment in your time than becoming obsessed over a microcosm (like say unit testing and TDD). </strong></p>
<p>Steve Yegge makes some humorous jabs at the static type culture:</p>
<blockquote><p>&#8230; I think we can conclude that people who rely too much on static types, people who really love the static modeling process, are n00bs. &#8230; Hee hee. - Steve Yegge: <a href="http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html">Portrait of a N00b</a></p>
<p>&#8230; I think there&#8217;s some mystical relationship between the personality traits of &#8220;wakes up before dawn&#8221;, &#8220;likes static typing but not type inference&#8221;, &#8220;is organized to the point of being anal&#8221;, &#8220;likes team meetings&#8221;, and &#8220;likes Bad Agile&#8221;. I&#8217;m not quite sure what it is, but I see it a lot. - Steve Yegge: <a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html">Good Agile, Bad Agile</a></p>
<p>&#8230; you have your slob type systems and your neat-freak type systems, and it comes down to personal preference. The neat freaks (Java, C#, C++, Pascal) know damn well that the slobs (Perl, Python, Ruby, JavaScript) are just as productive. Maybe even more so. - Steve Yegge: <a href="http://steve-yegge.blogspot.com/2006/10/egomania-itself.html">Egomania Itself</a></p></blockquote>
<p><strong>Cartoon Notes:</strong> I took this cartoon from Steve Yegge&#8217;s blog titled Egomania Itself. It represents the irony of static type languages where everything is a named type - presumably the owner of the property is naming all his objects so he can remember what they are, but in loosely type languages, If it walks like a dog and barks like a dog, I would call it a dog. Read more about Dog Typing er&#8230; <a href="http://en.wikipedia.org/wiki/Duck_typing">Duck Typing</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/02/17/software-ethnocentrism-staving-off-tunnel-vision/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
