<?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; Software</title>
	<atom:link href="http://adam.kahtava.com/journal/category/software/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:38:43 +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>Chatting With a Flash Developer Turned Web Developer</title>
		<link>http://adam.kahtava.com/journal/2009/11/30/chatting-with-a-flash-developer-turned-web-developer/</link>
		<comments>http://adam.kahtava.com/journal/2009/11/30/chatting-with-a-flash-developer-turned-web-developer/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 16:00:11 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=2112</guid>
		<description><![CDATA[I was chatting with a Flash Developer turned Web Developer. When asked why he made the transition, he predicted that HTML 5 and the evolution of the web thereafter would lessen the demand for Flash Developers (possibly making them obsolete) and that moving towards a Web Developer / Generalist is an investment for the future. [...]]]></description>
			<content:encoded><![CDATA[<p>I was chatting with a Flash Developer turned Web Developer. When asked why he made the transition, he predicted that <a href="http://en.wikipedia.org/wiki/HTML5">HTML 5</a> and the evolution of the web thereafter would lessen the demand for Flash Developers (possibly making them obsolete) and that moving towards a Web Developer / Generalist is an investment for the future. I thought that was an interesting perspective. It&#8217;s not far fetched to predict that the open web will replace proprietary browser plug-ins - in many cases digital content has already replaced print.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/11/30/chatting-with-a-flash-developer-turned-web-developer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Behaviour Driven Development Frameworks are for Geeks and Crackpots</title>
		<link>http://adam.kahtava.com/journal/2009/06/24/behaviour-driven-development-frameworks-are-for-geeks-and-crackpots/</link>
		<comments>http://adam.kahtava.com/journal/2009/06/24/behaviour-driven-development-frameworks-are-for-geeks-and-crackpots/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 16:00:22 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Software]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=1597</guid>
		<description><![CDATA[Behaviour Driven Development (BDD) generally makes use of Mocks, Unit Tests, or specialized BDD Specification Frameworks like RSpec, MSpec, NSpec, JBehave, NBehave. View the list of other BDD frameworks here and read more about BDD here: A New Look at Test Driven Development.
Now, I&#8217;ve been finding Behaviour Driven Development fascinating in a geeky kind of way (kind [...]]]></description>
			<content:encoded><![CDATA[<p><a style="float: right;" href="http://www.flickr.com/photos/dlemieux/325512823/"><img src="http://farm1.static.flickr.com/136/325512823_b81d400fdc_m.jpg" alt="" /></a><a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">Behaviour Driven Development (BDD)</a> generally makes use of <a href="http://en.wikipedia.org/wiki/Mock_object">Mocks</a>, <a href="http://en.wikipedia.org/wiki/Unit_testing">Unit Tests</a>, or specialized BDD Specification Frameworks like <a href="http://rspec.info/">RSpec</a>, <a href="http://github.com/machine/machine/tree/master">MSpec</a>, <a href="http://nspec.tigris.org/">NSpec</a>, <a href="http://jbehave.org/">JBehave</a>, <a href="http://code.google.com/p/nbehave/">NBehave</a>. <em>View the list of other BDD frameworks </em><a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development#Tools"><em>here</em></a><em> and read more about BDD here: </em><a href="http://techblog.daveastels.com/2005/07/05/a-new-look-at-test-driven-development/"><em>A New Look at Test Driven Development</em></a><em>.</em></p>
<p>Now, I&#8217;ve been finding Behaviour Driven Development fascinating in a geeky kind of way (kind of like functional programming languages, and programming paradigm debates), but BDD has left a gnawing uneasiness in the back of my mind - generally this mind chewing begins when I&#8217;m missing the bigger picture or when something just isn&#8217;t right. I got a chuckle out of Spolsky&#8217;s writing as he discusses specification frameworks:</p>
<blockquote><p><strong>the geeks &#8230; focus on things they can see in the code, rather than waiting for the users to judge. They’re programmers, so they try to automate everything in their life, and of course they try to automate the QA process.</strong> This is how you get unit testing &#8230; In order to mechanically prove that a program corresponds to some spec, the spec itself needs to be extremely detailed. In fact the spec has to define everything about the program, otherwise, nothing can be proven automatically and mechanically. Now, <strong>if the spec does define everything about how the program is going to behave, then, lo and behold, it contains all the information necessary to generate the program!</strong> And now certain geeks go off to a very dark place where they start thinking about automatically compiling specs into programs, and they start to think that they’ve just invented a way to program computers without programming.</p>
<p>Now, <strong>this is the software engineering equivalent of a perpetual motion machine. It’s one of those things that crackpots keep trying to do, no matter how much you tell them it could never work.</strong> - <a href="http://www.joelonsoftware.com/items/2007/12/03.html">Talk at Yale: Part 1 of 3, Joel Spolsky</a></p></blockquote>
<p>Hehehe&#8230; Anyhow; I need to cut this post short. My <a href="http://www.brian-mcdermott.com/fusion_is_easy.htm">DIY Nuclear Fusion Reactor</a> and perpetual motion machine are calling my name. Errrr&#8230; I mean, I need to continue working through the <a href="http://www.amazon.com/RSpec-Book-Behaviour-Development-Cucumber/dp/1934356379/">RSpec book</a> and playing around with other specification frameworks, because there&#8217;s always value in learning something new.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/06/24/behaviour-driven-development-frameworks-are-for-geeks-and-crackpots/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Stop Refactoring</title>
		<link>http://adam.kahtava.com/journal/2009/06/19/stop-refactoring/</link>
		<comments>http://adam.kahtava.com/journal/2009/06/19/stop-refactoring/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 16:00:44 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[DDD]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=1556</guid>
		<description><![CDATA[Eric Evans provides this interesting commentary while he discusses refactoring targets:
When you encounter a large system that is poorly factored, where do you start? In the XP community, the answer tends to be either one of the these:

Just start anywhere, because it all has to be refactored.
Start wherever it is hurting. I&#8217;ll refactor what I [...]]]></description>
			<content:encoded><![CDATA[<p>Eric Evans provides this interesting commentary while he discusses refactoring targets:</p>
<blockquote><p>When you encounter a large system that is poorly factored, where do you start? In the XP community, the answer tends to be either one of the these:</p>
<ol>
<li>Just start anywhere, because it all has to be refactored.</li>
<li>Start wherever it is hurting. I&#8217;ll refactor what I need to in order to get my specific task done.</li>
</ol>
<p>I don&#8217;t hold with either of these. The first is impracticable except in a few projects staffed entirely with top programmers. The second tends to pick around the edges, treating symptoms and ignoring the root causes, shying away from the worst tangles. - <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/">Domain Driven Design, Eric Evans</a></p></blockquote>
<p>I can think of many times where developers (myself included) have really just been <a href="http://www.codinghorror.com/blog/archives/000150.html">gold plating</a> under the guise of refactoring, or other times when refactoring activities contributed superficial cosmetic changes while the real mess lies beneath - getting to the root of the problem requires significantly more time and work than we&#8217;re often allocated and the cosmetic changes give us a sense of motion without moving. Then there are the occasions where seemingly superficial refactorings lead to an insightful break through.</p>
<p>Of course Evans isn&#8217;t suggesting that we stop refactoring altogether, instead he suggests that we think about what we&#8217;re refactoring, and that we focus on the parts of our software that provide the most value - in the context of Domain Driven Design this would be our <a href="http://domaindrivendesign.org/node/99">Core Domain</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/06/19/stop-refactoring/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>Do We Really Need Personal Data Backup Strategies?</title>
		<link>http://adam.kahtava.com/journal/2008/12/29/do-we-really-need-personal-data-backup-strategies/</link>
		<comments>http://adam.kahtava.com/journal/2008/12/29/do-we-really-need-personal-data-backup-strategies/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 14:42:43 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,4fc1094b-3494-41ea-b721-7a72b60eae9b.aspx</guid>
		<description><![CDATA[ 
 Some people advocate frequent backups - and some go so far as to suggest making use of offsite storage, duplicating their DVD/CD collections, and so on. This fixation on personal data redundancy seems multi-compulsive for an individual or a family (running a company is obviously a different situation).
 I personally do not have [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://flickr.com/photos/macpablo_campbell_river/260416057/sizes/o/"><img style="border: 0px none ;" src="http://farm1.static.flickr.com/120/260416057_d873204713_m.jpg"></a> </div>
<p> Some people advocate frequent backups - and some go so far as to suggest making use of offsite storage, duplicating their DVD/CD collections, and so on. This fixation on personal data redundancy seems multi-compulsive for an individual or a family (running a company is obviously a different situation).</p>
<p> I personally do <i>not</i> have a data backup plan - aside from online storage like Google Docs, Flickr (for photos and videos), and source control. I <i>have</i> lost years worth of files a number of times, and every time my hard drive comes screeching to a halt, I feel that burning pit of anxiety deep in my stomach, but guess what? It doesn&#39;t last long. Seriously, over the years there has never been a case where I lost something that I absolutely needed (again, personal pictures and videos are an exception). After losing data, I find myself pining for a couple recently created / used files, I then recreate the files in a quarter the time it took me to do the first version, then I forget about the heaps of digital baggage I was hording over the years.</p>
<p> Personal data loss might be part of a natural regeneration process - like a forest fire, it makes way for new growth and forces us to focus on the present.  </p>
<p> Stop fighting nature, forget about a data backup plan, involuntary random data purging might be good for all of us. Perhaps a digital natural disaster is in order for you. :)</p>
<p> <b>Can you let go of your bits? What is your backup strategy? Why do you backup?</b> <br /> </p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/12/29/do-we-really-need-personal-data-backup-strategies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Law of Two Feet</title>
		<link>http://adam.kahtava.com/journal/2008/12/19/the-law-of-two-feet/</link>
		<comments>http://adam.kahtava.com/journal/2008/12/19/the-law-of-two-feet/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 06:42:03 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f770210a-ac17-4411-83ba-cf4d2e0eec69.aspx</guid>
		<description><![CDATA[
The Law of Two Feet is just as applicable to life, as it is to Open Spaces.
The Law of Two Feet:
If at any time during our time together you find yourself in any situation where you are neither learning nor contributing, use your two feet. Go to some other place where you may learn and [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://www.flickr.com/photos/owenthatsmyname/2942529789/"><img style="border: medium none ;" src="http://farm4.static.flickr.com/3190/2942529789_8dfb231125_m.jpg" alt="" /></a></div>
<p>The Law of Two Feet is just as applicable to life, as it is to Open Spaces.</p>
<p>The Law of Two Feet:</p>
<blockquote><p>If at any time during our time together you find yourself in any situation where you are neither learning nor contributing, use your two feet. Go to some other place where you may learn and contribute. - <a href="http://en.wikipedia.org/wiki/Open_Space_Technology#Philosophy">Open Spaces, Wikipedia</a></p></blockquote>
<p>By applying this philosophy to software development (programming languages, operating systems, and development ecosystems), I&#8217;ve really been been re-igniting my passion as a software developer. I am foremost a software developer and the tools and products I choose are secondary, but I lost sight of this over the past couple years. I was buying into being a <em>[insert your choice of ecosystem, language, operating system here]</em> developer.</p>
<p>Anyhow; this isn&#8217;t to say I won&#8217;t be raising my concerns (running away), I&#8217;ll continue to make noise (because <a href="http://adam.kahtava.com/journal/2008/11/28/bad-advice-if-you-dont-have-anything-nice-to-say-dont-say-anything-at-all/">I believe it has value</a>), but when change doesn&#8217;t manifest. I will (like so many people before me) use my own two feet and move towards a situation where I can continue to learn, contribute, and be the change I&#8217;d like to see .</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/12/19/the-law-of-two-feet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Passion, Quality Over Quantity, Domestic Failure: Microsoft, Ford, GM, Chrysler?</title>
		<link>http://adam.kahtava.com/journal/2008/11/24/passion-quality-over-quantity-domestic-failure-microsoft-ford-gm-chrysler/</link>
		<comments>http://adam.kahtava.com/journal/2008/11/24/passion-quality-over-quantity-domestic-failure-microsoft-ford-gm-chrysler/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 22:43:17 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,14553847-8a49-4798-947f-2ed8e72788c6.aspx</guid>
		<description><![CDATA[Steve Ballmer (the CEO of Microsoft) made this comment during Mix &#8216;08 during his interview with Guy Kawasaki:
GUY KAWASAKI: Okay. &#8230; so it was like in the ashtray of your Lexus?
STEVE BALLMER: I&#8217;m a Ford guy, and I&#8217;m slightly offended by that. My father who worked for Ford would be offended, but nonetheless &#8230;
Fair enough, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Steve_Ballmer">Steve Ballmer</a> (the CEO of Microsoft) made this comment during <a href="http://archive.visitmix.com/blogs/News/Watch-Steve-Ballmer-and-Guy-Kawasaki-Live/">Mix &#8216;08 during his interview with Guy Kawasaki</a>:</p>
<blockquote><p><strong>GUY KAWASAKI</strong>: Okay. &#8230; so it was like in the ashtray of your Lexus?<br />
<strong>STEVE BALLMER</strong>: <strong>I&#8217;m a Ford guy</strong>, and I&#8217;m slightly offended by that. My father who worked for Ford would be offended, but nonetheless &#8230;</p></blockquote>
<p>Fair enough, Ballmer likes Ford, but what kills me is that he apparently made his choice by association. Like Ballmer, my extended family are (were) also employed by Ford in the US <a href="http://en.wikipedia.org/wiki/Rust_Belt%20">Rust Belt</a>. However, I still value quality and the economics of a purchase over my family affiliations. Of course, this is a broader issue - many people favour historical affiliation / <a href="http://en.wikipedia.org/wiki/Brand_loyalty">brand loyalty</a> over critical thinking and this may never change, but Ballmer is the CEO of Microsoft!</p>
<p>Now Ford, GM, Chrysler are on the verge of bankruptcy, and while many factors contribute to their situation. I think most people agree that these automakers kept making poor decisions for short term revenue gains - they kept making bigger expensive, less efficient cars, they were inward focuses and failed to look at possible future scenarios (like a global economic recession, skyrocketing oil prices, doomsday, blah-blah-blah). Basically, the big three automakers have been out of touch with the rest of the world. People like me (and probably you too) have never owned a domestic car. For myself, imports offered better value for my money (better fuel efficiency, a higher resale value, and a longer life). In addition, imports felt safer, sturdier, and were more aesthetically pleasing. Imports offered quality over quantity, and they looked nice too -<strong> imports made me a happy satisfied consumer</strong>.</p>
<p>Like the big three automakers, Microsoft (or Ballmer at least) is out of touch with their community (their developers). For myself, the community oriented / collaborative communities outside Microsoft are continually drawing me in. The openness of these communities and their open solutions is one part of the interest, but I&#8217;m also growing tired of working in an ecosystem (and with developers) that literally lag years behind the rest of the software world. Down here in the trenches Microsoft centric developers bear a striking resemblance to the unionized American autoworkers - inflexible, arrogant, and inward focused.</p>
<p><strong>I want a development stack I can be proud of, that embraces quality over quantity, to work with developers that share my values, and an environment that offers more aesthetics. In short I want to be a happy satisfied developer.</strong></p>
<p>In all fairness, it&#8217;s great how Microsoft is opening up (i.e. IronRuby, IronPython, MVC, etc&#8230;), but there are already more open established and mature communities outside Microsoft.<strong> </strong>I also really like C#, WCF, ASP.NET MVC, and Server 2008, but it&#8217;s all the baggage associated with the Microsoft ecosystem. It&#8217;s also fair to mention that the <a href="http://altdotnet.org/">ALT.NET</a> community is making great strides, but it is fundamentally discouraging that ALT.NET had to be formed in the first place. I mean, where are all the ALT.Rails, ALT.Ruby, ALT.Linux, ALT.Java communities?!</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/11/24/passion-quality-over-quantity-domestic-failure-microsoft-ford-gm-chrysler/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Do Great Developers Cluster Away From Microsoft?</title>
		<link>http://adam.kahtava.com/journal/2008/11/22/do-great-developers-cluster-away-from-microsoft/</link>
		<comments>http://adam.kahtava.com/journal/2008/11/22/do-great-developers-cluster-away-from-microsoft/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 21:42:29 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f8c5550e-7ad4-4a90-9a72-01d880ee9926.aspx</guid>
		<description><![CDATA[According to popular developer consciousness:
good programmers tend to cluster in some organizations, and bad programmers tend to cluster in other organizations &#8230; (Demarco and Lister 1999). - Steve McConnell
Can we draw the corollary that:
Good programmers tend to cluster away from traditionally closed development ecosystems like Microsoft, and bad programmers tend to cluster toward Microsoft like [...]]]></description>
			<content:encoded><![CDATA[<p>According to popular developer consciousness:</p>
<blockquote><p>good programmers tend to cluster in some organizations, and bad programmers tend to cluster in other organizations &#8230; (Demarco and Lister 1999). - <a href="http://forums.construx.com/blogs/stevemcc/archive/2008/03/27/productivity-variations-among-software-developers-and-teams-the-origin-of-quot-10x-quot.aspx">Steve McConnell</a></p></blockquote>
<p>Can we draw the corollary that:</p>
<blockquote><p>Good programmers tend to cluster away from traditionally closed development ecosystems like Microsoft, and bad programmers tend to cluster toward Microsoft like ecosystems?</p></blockquote>
<p>Following Robert Glass&#8217;s train of thought:</p>
<blockquote><p>The most important factor in software work is not the tools and techniques used by the programmers, but rather the quality of the programmers themselves. - <a href="http://www.amazon.com/dp/0321117425/">Robert Glass, Facts and Fallacies of Software Engineering</a></p></blockquote>
<p>Could we conclude that:</p>
<blockquote><p><strong>Good programmers tend to realize that an investment in their personal development is more important than learning the latest tools? Are product / tool based ecosystems like Microsoft&#8217;s at direct odds with the core values of a good programmer?</strong></p></blockquote>
<p>My hunch is that exceptional developers are <a href="http://adam.kahtava.com/journal/2008/11/13/are-you-a-specialist-generalist-or-a-versatilist/">versatilists</a>. These developers cluster around organizations that embrace knowledge over tools, open technologies, open communities, and these great organizations also embrace <a href="http://adam.kahtava.com/journal/2008/10/30/vernacular-culture-and-heretics-humanity-the-zen-of-zen/">vernacular culture</a>. What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/11/22/do-great-developers-cluster-away-from-microsoft/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project Failure is not Personal Failure: Emotional Buy-in to Projects, Languages, and Frameworks is Bad</title>
		<link>http://adam.kahtava.com/journal/2008/10/23/project-failure-is-not-personal-failure-emotional-buy-in-to-projects-languages-and-frameworks-is-bad/</link>
		<comments>http://adam.kahtava.com/journal/2008/10/23/project-failure-is-not-personal-failure-emotional-buy-in-to-projects-languages-and-frameworks-is-bad/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 17:08:30 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,0e2d6e18-2d47-43e6-9ccc-a53613cd2368.aspx</guid>
		<description><![CDATA[I was at the point where I could visualize the project&#8217;s code, the team had gelled, and we only had a couple remaining issues. This was after almost a year of over time and personal sacrifices. From our perspective (the developers) everything was great. Then for reasons beyond our control, the project was canceled. I [...]]]></description>
			<content:encoded><![CDATA[<p>I was at the point where I could visualize the project&#8217;s code, the team had gelled, and we only had a couple remaining issues. This was after almost a year of over time and personal sacrifices. From our perspective (the developers) everything was great. Then for reasons beyond our control, the project was canceled. <strong>I was DEVASTATED!</strong> Somewhere over the course of this project I had lost my personal life and began equating my personal success to the project&#8217;s success. When the project came to a screeching halt, so did I.</p>
<p>Listening to Yegge, Spolsky, and Atwood really brought up this uncomfortable memory of projects past.</p>
<blockquote><p>[Yegge] <strong>some people &#8230; they can&#8217;t handle [a failed project]. They&#8217;re out on the ledge, you have to talk them down real slow, it&#8217;s usually more junior people.</strong> </p>
<p>[Spolsky] I don&#8217;t know about junior, but &#8230; that they identified with the project, and that is kind of important. &#8230; People are going to be &#8230; devoted to a project that they identify with.</p>
<p>[Yegge] &#8230; <strong>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 your project is going to get canceled or your favorite framework is going to be replaced. - Steve Yegge, Joel Spolsky, <a href="http://blog.stackoverflow.com/2008/10/podcast-25/">stackoverflow podcast #25</a></p></blockquote>
<p>I can certainly relate.</p>
<p>My experience was a lesson learned, which resulted in a couple personal changes:</p>
<ul>
<li> No overtime at the expense of personal life or prior commitments.</li>
<li> A quest for a more outward facing perspective on projects and the industry in general.</li>
<li> A need for remaining emotionally detached from the project - as well as the frameworks, technologies, and the languages that I use.</li>
<li> An aversion towards organizations that encourage the type of situation I had gotten into.</li>
<li> Skepticism towards company loyalty, brand loyalty, etc&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/10/23/project-failure-is-not-personal-failure-emotional-buy-in-to-projects-languages-and-frameworks-is-bad/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On Teams: Dysfunction</title>
		<link>http://adam.kahtava.com/journal/2008/10/19/on-teams-dysfunction/</link>
		<comments>http://adam.kahtava.com/journal/2008/10/19/on-teams-dysfunction/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 20:14:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,5b480492-5d16-41c3-97e7-9a84be016af1.aspx</guid>
		<description><![CDATA[One of the risks to a project&#8217;s success is a dysfunctional team. It&#8217;s common for team morale to fluctuate as a project moves through its life cycle - project politics, bureaucracy, challenging overtime demands, etc, can all take their toll on a team. A team under stress can take a couple of diverging roads - [...]]]></description>
			<content:encoded><![CDATA[<p>One of the risks to a project&#8217;s success is a dysfunctional team. It&#8217;s common for team morale to fluctuate as a project moves through its life cycle - project politics, bureaucracy, challenging overtime demands, etc, can all take their toll on a team. A team under stress can take a couple of diverging roads - from what I&#8217;ve experienced a team can rise to the challenge (like a family) and grow stronger, or digress into a winner-takes-all environment (like <a href="http://en.wikipedia.org/wiki/Survivor_%28TV_series%29">Survivor</a>).</p>
<p><strong>There is no &#8220;I&#8221; in &#8220;T-E-A-M&#8221;. </strong>A team falls apart when members begin participating in backstabbing, which often results in negative alliances being formed between members - while a sense of self preservation and distrust creeps around the otherwise neutral team members. Soon the team digresses into a group of individuals operating in silos. I don&#8217;t think it&#8217;s possible to put a finger on the catalyst for the entire process, but it could boil down to a combination of: an overly cynical team member, a preexisting alliance between team members, lack of leadership on the project, a team member with an unexplainable need for political control (perhaps lack of confidence in their abilities), a dysfunctional working environment, or human nature?&#8230;</p>
<blockquote><p>No individual is a success who hurts the team, and no individual is a failure who helps it. - <a href="http://www.amazon.com/Software-Project-Survival-Guide-Practices/dp/1572316217">Software Project Survival Guide</a> </p></blockquote>
<p><strong>How can we cope?</strong> Bottom line: <strong>RESPECT.</strong> Treat your team as family, recognize that everyone has different strengths and weaknesses. Don&#8217;t participate in backstabbing, be transparent and honest, if you have an issue with a team member then make it a point to discuss your concerns with that member. <strong>Anyone participating in backstabbing is hurting the team.</strong></p>
<blockquote><p>Nobody on the team should feel unappreciated or ignored. This ensures high level of motivation and encourages loyalty toward the team, and the goal of the project.  - <a href="http://en.wikipedia.org/wiki/Extreme_programming#Respect">Respect, Extreme Programming Values</a></p></blockquote>
<p>A project&#8217;s success hinges tightly on the team. Being a team player and having great interpersonal skills can be more important than technical skills - most people can rapidly learn new technical skills, but being able to function within a team might be an ingrained personality characteristic.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/10/19/on-teams-dysfunction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How To Display Your Amazon Reviews and Wish List (on your site) Using Amazon&#8217;s Web Services</title>
		<link>http://adam.kahtava.com/journal/2008/10/06/how-to-display-your-amazon-reviews-and-wish-list-on-your-site-using-amazons-web-services/</link>
		<comments>http://adam.kahtava.com/journal/2008/10/06/how-to-display-your-amazon-reviews-and-wish-list-on-your-site-using-amazons-web-services/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 22:55:43 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,e44d5916-5c12-4b66-a1a0-65bab52ed58c.aspx</guid>
		<description><![CDATA[
If you&#8217;ve ever landed on Amazon then you&#8217;re probably familiar with their reviews and wish lists. Amazon provides access to these items (and many-many more) through their extensive web services - the Amazon web services can be complex and overwhelming when all you want is a review list and a single user specific wish list. [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 0px 0px 10px 5px; float: right;"><img src="http://awsmedia.s3.amazonaws.com/logo_aws.gif" alt="" /></div>
<p>If you&#8217;ve ever landed on Amazon then you&#8217;re probably familiar with their <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/ref=cm_pdp_rev_all?ie=UTF8&amp;sort_by=MostRecentReview">reviews</a> and <a href="http://www.amazon.com/gp/registry/registry.html/ref=cm_pdp_wish_all_itms?ie=UTF8&amp;type=wishlist&amp;id=3JU6ASKNUS7B8">wish lists</a>. Amazon provides access to these items (and many-many more) through their extensive web services - the Amazon web services can be complex and overwhelming when all you want is a review list and a single user specific wish list. For this site I wanted to pull in my reviews and wish list - displaying them alongside my blog. <em>It&#8217;s fair to note, that user reviews are available via an <a href="http://www.amazon.com/rss/people/A2JM0EQJELFL69/reviews/ref=cm_pdp_rev_rss">RSS feed</a> (but this feed doesn&#8217;t include all the details I wanted) and the wish list page still doesn&#8217;t provide an RSS feed.</em> So a custom Amazon web service request was in order.</p>
<p><strong>Let me try to make this story short.</strong></p>
<p>If you want to request your reviews and your wish list you need the following:</p>
<ul>
<li> An Amazon Account: <a href="http://www.amazon.com/gp/css/homepage.html">http://www.amazon.com/gp/css/homepage.html</a> with at least a wish list or a review.</li>
<li> An Amazon Associates tag: <a href="https://affiliate-program.amazon.com/gp/associates/join/">https://affiliate-program.amazon.com/gp/associates/join/</a> (this will be your <strong>AssociatesTag</strong>).</li>
<li> An Amazon Web Service (AWS) access key: <a href="http://aws.amazon.com/">http://aws.amazon.com/</a> (this will be your <strong>AWSAccessKey</strong>).</li>
</ul>
<p>Once you have a wish list or review, you then need to:</p>
<ul>
<li> Get your <strong>CustomerId</strong> for the reviews. <em>I found my CustomerId by navigating to my reviews (<a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/">http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/</a>) then pulling out &#8216;A2JM0EQJELFL69&#8242; (the last element of the url).</em></li>
<li> Get your <strong>ListId</strong> for your wish list.  <em>I found my ListId by navigating to my wishlist (<a href="http://www.amazon.com/gp/registry/registry.html/?id=3JU6ASKNUS7B8">http://www.amazon.com/gp/registry/registry.html/?id=3JU6ASKNUS7B8</a>) then pulling out &#8216;3JU6ASKNUS7B8&#8242; (the identifier after id= from the url).</em></li>
</ul>
<p>Once you&#8217;ve collected all those bits, you need to:</p>
<ul>
<li> Checkout and download the <a href="http://code.google.com/p/adamdotcom-amazon/source/checkout">source code</a> for the project and build the assembly or download the <a href="http://adamdotcom-amazon.googlecode.com/files/AdamDotCom.Amazon.dll">pre-compiled assembly</a>.</li>
<li> Add the assembly reference to your project (remember, I&#8217;m assuming you&#8217;re using .NET).</li>
<li> Make a call to the application which will generate XML files containing your respective reviews and wish list.</li>
</ul>
<p>Setting up the call would look something like this:</p>
<pre><span style="font-size: 8pt; font-family: &quot;Courier New&quot;; color: #2b91af;">IAmazonRequest</span><span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"> amazonRequest = <span style="color: blue;">new</span> <span style="color: #2b91af;">AmazonRequest</span>()</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;">{</span>
<span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>AssociateTag = <span style="color: #a31515;">"adamkahtavaap-20"</span>,
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>AWSAccessKeyId = </span><span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span style="color: #a31515;">"1MRF________MR2"</span></span><span style="font-size: 8pt; font-family: &quot;Courier New&quot;;">,
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>CustomerId = <span style="color: #a31515;">"A2JM0EQJELFL69"</span>,
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>ListId = <span style="color: #a31515;">"3JU6ASKNUS7B8"</span></span>
<span style="font-size: 8pt; font-family: &quot;Courier New&quot;;">};</span>

<span style="font-size: 8pt; font-family: &quot;Courier New&quot;; color: #2b91af;">IFileParameters</span><span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"> fileParameters = <span style="color: blue;">new</span> <span style="color: #2b91af;">FileParameters</span>()</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;">{
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>ProductFileNameAndPath = <span style="color: #a31515;">@"Products.xml"</span>,
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>ReviewFileNameAndPath = <span style="color: #a31515;">@"Reviews.xml"</span>,
</span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"><span> </span>ErrorFileNameAndPath = <span style="color: #a31515;">@"Errors.xml"</span><span>
</span></span> <span style="font-size: 8pt; font-family: &quot;Courier New&quot;;">};</span>

<span style="font-size: 8pt; font-family: &quot;Courier New&quot;; color: #2b91af;">IAmazonApplication</span><span style="font-size: 8pt; font-family: &quot;Courier New&quot;;"> amazonApplication = <span style="color: blue;">new</span> <span style="color: #2b91af;">AmazonApplication</span>(amazonRequest, fileParameters);</span>

<span style="font-size: 8pt; line-height: 115%; font-family: &quot;Courier New&quot;;">amazonApplication.Save();</span></pre>
<p>And Viola!</p>
<p>If you&#8217;d like to provide some design guidance, fix a bug, or request a feature, then visit (or join) <a href="http://code.google.com/p/adamdotcom-amazon/">the project</a> on Google Code. <em> </em></p>
<p><em> </em></p>
<p><em> Alternatively, you might also be interested in the <a href="http://linqinaction.net/files/folders/linqinaction/entry1952.aspx">LINQ To Amazon</a> source featured in the book <a href="http://www.amazon.com/LINQ-Action-Fabrice-Marguerie/dp/1933988169">LINQ in Action</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/10/06/how-to-display-your-amazon-reviews-and-wish-list-on-your-site-using-amazons-web-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Three-step Sequence: Incorrect Assumptions and Experience</title>
		<link>http://adam.kahtava.com/journal/2008/09/30/the-three-step-sequence-incorrect-assumptions-and-experience/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/30/the-three-step-sequence-incorrect-assumptions-and-experience/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 16:39:12 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Book]]></category>

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,c3eab0c1-81c9-4243-9c94-95f697e0380b.aspx</guid>
		<description><![CDATA[the obvious &#8230; is never seen until someone expresses it simply. - Kahlil Gibran
The preface of Object Oriented Software Construction literally introduced me to the three-step sequence:
the well-known three-step sequence of reactions that meets the introduction of a new methodological principle:

(1) &#8220;it&#8217;s trivial&#8221;;
(2) &#8220;it cannot work&#8221;;
(3) &#8220;that&#8217;s how I did it all along anyway&#8221;.
(The order [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>the obvious &#8230; is never seen until someone expresses it simply. - Kahlil Gibran</p></blockquote>
<p>The preface of <a href="http://www.amazon.com/Object-Oriented-Software-Construction-Prentice-Hall-International/dp/0136291554">Object Oriented Software Construction</a> literally introduced me to the <em>three-step sequence</em>:</p>
<blockquote><p><em>the well-known three-step sequence of reactions that meets the introduction of a new methodological principle:<br />
</em></p>
<p>(1) <strong>&#8220;it&#8217;s trivial&#8221;</strong>;<br />
(2) <strong>&#8220;it cannot work&#8221;</strong>;<br />
(3) <strong>&#8220;that&#8217;s how I did it all along anyway&#8221;</strong>.</p>
<p><em>(The order may vary.) - Bertrand Meyer</em></p></blockquote>
<p>Naturally people consider themselves <em>smart</em>, which sometimes translates into <em>knowing everything</em>, and these three reactions are probably a manifestation of thinking you&#8217;re overly enlightened. If we put ego aside - along with our natural predisposition for being lazy (trying to avoiding learning new things) - we often change our views altogether.</p>
<p>Looking back at my technological naivety: I was once wrongly convinced that client-side languages would never work and server-side languages / frameworks would dominate (until I <em>really</em> learned JavaScript), I had also mistakenly assumed that <a href="http://adam.kahtava.com/journal/2006/07/19/quality-assurance-unit-testing-test-driven-development-tdd-write-the-test-first/">I was already doing TDD</a> (until being introduced to the concept of <a href="http://en.wikipedia.org/wiki/Mock_object">Mocking</a>), and I even thought that HTML table based design was the future (until I <em>really </em>learned CSS). With a little bit of knowledge and some experience I changed my views altogether.</p>
<p>Reflecting on these incorrect assumptions and decisions promotes growth - with every experience we grow. Which of my latest assumptions / reactions will change over time?</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/30/the-three-step-sequence-incorrect-assumptions-and-experience/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Transparency: Considerations For Choosing a JavaScript / AJAX Framework</title>
		<link>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 17:32:20 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,ecf3e641-c21d-4bb4-bfd4-0956c1cd3dce.aspx</guid>
		<description><![CDATA[A growing number of development teams are given the opportunity to choose their JavaScript / AJAX Frameworks. This choice is often thrown to the development team because the Architects are more concerned with the bigger picture, and the technical details are over the manager&#8217;s head. Letting the development team decide on the JavaScript / AJAX [...]]]></description>
			<content:encoded><![CDATA[<p>A growing number of development teams are given the opportunity to choose their JavaScript / AJAX Frameworks. This choice is often thrown to the development team because the Architects are more concerned with the bigger picture, and the technical details are over the manager&#8217;s head. <strong>Letting the development team decide on the JavaScript / AJAX framework produces some great benefits: it gels the team, fosters project buy-in, and creates project excitement. </strong></p>
<p>Now, developers can be pretty skeptical, and getting them to agree has been likened to <em><a href="http://www.amazon.com/Herding-Cats-Primer-Programmers-Lead/dp/1590590171">herding cats</a></em>, but a couple core considerations / values seem to surface when the decision is being made.</p>
<p><strong>Considerations for choosing a JavaScript / AJAX Framework:</strong></p>
<ul>
<li> <strong>Transparency </strong>- Who are the framework&#8217;s development team and why should we trust them? Do these developers blog? Attend conferences? Are they featured on podcasts / videos? Is there a high or low turnover within the team? What are their passions? Is this <em>just </em>a job, do they like what they&#8217;re doing, are they a cog on a wheel? Are they experts in their field?</li>
</ul>
<ul>
<li> <strong>Competency </strong>- Based on the information gathered in the consideration above (transparency), how competent do we feel the development team is?<strong></strong></li>
</ul>
<ul>
<li> <strong>Community Support</strong> - How well is the framework supported on forums and blogs? If something were to go wrong can we gain access to the framework&#8217;s development team? Are there widespread experts using this framework readily available?</li>
</ul>
<ul>
<li> <strong>Reputation</strong> - How popular is the framework in the industry? Who uses it? Are there any white papers, success stories, case studies available?</li>
</ul>
<p>One of the easiest ways for a developer to choose a framework is by looking at the developers that built it (and talking with those that are using it). As developers our day job will be stepping into someone else&#8217;s code for the duration of the project, working with a framework created by competent developers makes our jobs easy. Frameworks without transparency don&#8217;t allow us to gauge the competency of the developers or the framework.</p>
<p>Transparency is essential for JavaScript / AJAX Framework teams, JavaScript itself is open and transparent (not compiled yet), it follows that JavaScript / AJAX Framework along with their teams should also be transparent. <strong>When the decision for choosing a JavaScript / AJAX Framework is placed in the hands of developers the frameworks that don&#8217;t meet the above criteria sink to the bottom of the list.<br />
</strong></p>
<blockquote><p>The only way to succeed now is to be completely transparent, everything is exposed, everything you do - <a href="http://garyvaynerchuk.com/2008/09/23/my-web-20-keynote-in-nyc/">Gary Vaynerchuk</a> </p></blockquote>
<p><strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Everyone Is Special, I Wish I Was Special</title>
		<link>http://adam.kahtava.com/journal/2008/09/13/everyone-is-special-i-wish-i-was-special/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/13/everyone-is-special-i-wish-i-was-special/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 17:35:19 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,2814fc87-8767-4c39-8eee-015045fc09e3.aspx</guid>
		<description><![CDATA[I had x-ray vision as a child - that&#8217;s right, I could see through walls and presents. I was convinced I had super eyesight and my friends thought they had similar enhanced sensory powers - we thought we were super heroes.  In high school I was a wizard (one of a handful of computer enthusiasts).  [...]]]></description>
			<content:encoded><![CDATA[<p>I had x-ray vision as a child - that&#8217;s right, I could see through walls and presents. I was convinced I had super eyesight and my friends thought they had similar enhanced sensory powers - we thought we were super heroes.  In high school I was a wizard (one of a handful of computer enthusiasts).  University, College, and my first job were similar experiences - I felt special because most of my colleagues were fresh graduates void of the lifelong passion for computers.</p>
<p><strong>Through all these experiences I was convinced that I was unique.</strong> Then I started becoming part of the bigger conversation. While engaging online I began learning that there were thousands of people like me: weened on computers, interested in good software design, and passionate about what they do.</p>
<p><a href="http://imar.spaanjaars.com/">Imar Spaanjaars&#8217;</a> signature always reminded me of this lesson:</p>
<blockquote><p>Everyone is unique, except for me.
</p></blockquote>
<p>Yegge&#8217;s recent post brought up this thought again:</p>
<blockquote><p>people like to think they&#8217;re unique and special, and that their tastes aren&#8217;t necessarily widely shared by others. This is what drives fashion: the need to differentiate yourself from &#8220;the crowd&#8221;, by identifying with some smaller, cooler crowd. &#8230; <strong>The reality is that for any given dimension of your personality, there are oodles of people just like you.</strong> - <a href="http://steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html">Business Requirements are Bull****</a> </p></blockquote>
<p>David Heinemeier Hansson reiterates this:</p>
<blockquote><p>it&#8217;s somewhat counter intuitive &#8230; for a lot of developers &#8230;  it&#8217;s counter intuitive for humans in general to think they&#8217;re not that special, but when they do think they&#8217;re special &#8230; they kind of get these assumptions that they need very unique and special tools that will only work for them &#8230; <strong>We as programmers aren&#8217;t really unique or that special. </strong> - <a href="http://blip.tv/file/1163876/">David Heinemeier Hansson, 37signals: &#8220;Friday Keynote&#8221;</a></p></blockquote>
<p>Remember you&#8217;re not really special. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/13/everyone-is-special-i-wish-i-was-special/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Noisy Work Environments are Counterproductive, But Compensating With Music Negatively Effects Creativity</title>
		<link>http://adam.kahtava.com/journal/2008/09/06/noisy-work-environments-are-counterproductive-but-compensating-with-music-negatively-effects-creativity/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/06/noisy-work-environments-are-counterproductive-but-compensating-with-music-negatively-effects-creativity/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 18:15:44 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Creativity]]></category>

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,9f99174d-0316-4d46-b5fd-e3135c70c846.aspx</guid>
		<description><![CDATA[
Working in a noisy work environment and listening to music is counterproductive for intellectual demanding work. For example: we don&#8217;t write exams in busy cafeterias, or write resumes through loud movies, and Libraries are quiet for a reason. Noise; whether it be music or background noise does negatively affect your ability to get things done.
DeMarco [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 5px; float: right;"><a href="http://www.amazon.com/B000OMKR8E/"><img style="border: 0px none ;" src="http://ecx.images-amazon.com/images/I/412k1FkQuWL._SL500_AA280_.jpg" alt="" /></a></div>
<p>Working in a noisy work environment and listening to music is counterproductive for intellectual demanding work. For example: we don&#8217;t write exams in busy cafeterias, or write resumes through loud movies, and Libraries are quiet for a reason. Noise; whether it be music or background noise does negatively affect your ability to get things done.</p>
<p>DeMarco and Lister (in <a href="http://www.amazon.com/dp/0932633439/">Peopleware</a>) present the results of an interesting experiment:</p>
<blockquote><p>During the 1960s, researchers at Cornell University conducted a series of tests on the effects of working with music. &#8230; They put half of each group together in a silent room, and the other half of each group in a different room equipped with earphones and a musical selection.  Participants in both rooms were &#8230; given a programming problem &#8230;</p></blockquote>
<p>They discovered that the majority of the people working in the silent room could pick out a pattern in the programming problem and could come to a quick clever creative solution. Whereas the people working with music playing were able to solve the problem, but didn&#8217;t make the creative leap.</p>
<p>They go on to explain:</p>
<blockquote><p>Many of the everyday tasks performed by professional workers are done in the serial processing center of the left brain. Music will not interfere particularly with this work, since it&#8217;s in the brain&#8217;s holistic right side that digests music. But not all of the work is centered in the left brain. <strong>There is that occasional breakthrough that makes you say &#8220;Ahah!&#8221; and steers you toward an ingenious bypass that may save months or years of work. This creative leap involves right-brain function. If the right brain is busy listening [to music], the opportunity for a creative leap is lost.</strong></p></blockquote>
<p>In their book they also make the point that open space work environments and cubical farms are not conducive to knowledge work, and that all employees (or at least groups of employees) should have the ability to close their door. Great companies <span style="text-decoration: underline;">do</span> follow these guidelines, but many of the smaller companies or transitional companies (at least the ones I&#8217;ve worked in) tend to air on the dilbertesque side (the noisy cubical farms / open concept).</p>
<p>To compensate for the noise in the work place I&#8217;ve resorted to wearing noise canceling earphones without music. These earphones double as a metaphoric door - it indicates to those around me that I&#8217;m hard at work and not to be disturbed. Noise canceling earphones let me create my own personal audio walls, but eventually I become <em>the weird guy with the earphones that aren&#8217;t plugged into anything guy</em>.</p>
<p>As a lowly developers it&#8217;s hard to make the case to management for a quieter work environment (let alone an office with a door), but we can keep our eyes out for companies that share these values, start our own company, or take opportunities that let us work from home. In the meantime thank goodness for ear plugs (err.. I mean earphones).</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/06/noisy-work-environments-are-counterproductive-but-compensating-with-music-negatively-effects-creativity/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>The World is Messy and Complex: Why Should Software Be Different?</title>
		<link>http://adam.kahtava.com/journal/2008/07/27/the-world-is-messy-and-complex-why-should-software-be-different/</link>
		<comments>http://adam.kahtava.com/journal/2008/07/27/the-world-is-messy-and-complex-why-should-software-be-different/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 14:14:14 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,c74d6b91-cdd8-44f6-9d69-c70e10cddbf4.aspx</guid>
		<description><![CDATA[ 
 Politics, religion, famine, pollution, and relationships; these are parts of our world. I&#39;m messy, my hair falls out, and yours might too. The world is messy and complex, so what would make software different?
 During my first real job after graduating College / University, I was horrified by the state of my project&#39;s [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 5px; float: right;"><a href="http://www.flickr.com/photos/jacktwo/365115251/"><img src="http://farm1.static.flickr.com/147/365115251_b0e38afd10_m.jpg"></a> </div>
<p> Politics, religion, famine, pollution, and relationships; these are parts of our world. I&#39;m messy, my hair falls out, and yours might too. The world is messy and complex, so what would make software different?</p>
<p> During my first <i>real</i> job after graduating College / University, <b>I was horrified by the state of my project&#39;s source code</b>. The code was spaghetti; it looked like someone crammed a stack of poorly written technical manuals through a blender that funneled into our source code. Regions (#region) were running willy-nilly, negated values were passing conditions; delegates were calling properties which were in turn calling delegates which were creating infinite loops&#8230; SQL rows were being sent across TCP/IP, centralized build servers were taboo, unit testing and TDD was unheard of. Each of the members of our team were build / release masters, developers, and ninjas.&nbsp; Our job was to maintain this juggernaut and affirm the stakeholders that everything was OK.</p>
<p> <b>But were things really that bad?</b> Remember, I was a recent grad; I was used to creating pristine frameworks (like elevator simulators) crammed with design patterns and fascinating abstract data types. In a way, I was an architecture astronaut being rudely ejected into a toxic <a href="http://en.wikipedia.org/wiki/Tailing_ponds">tailings pond</a>. The courses I had taken in school, the projects I completed, the languages I used were a great start, but not a valid representation of the real world. In the academic world things were clean; out here (like the rest of the planet) everything is a mess.  </p>
<p> I started coming to the realization that, producing software is more about managing people than science, technology, or math. Mistakes and human flaws are the norm, software entropy is inevitable, and technical decisions are often based on nontechnical considerations: time constraints, politics, religion, and relationships rather than sound research and science.</p>
<p> <b>There is hope;</b> realize that you can&#39;t control everything, that the one-size-fits-all solution and silver bullets are myths. Then focus on what and how you can change yourself, your software, and your situation. Developing good software (like living a good life) is about making informed decisions, choosing opportunities that encourage growth, reducing complexity, and having a long term vision or goal. Today I still think software is messy, and I&#39;m still horrified by most source code, but abstractions, n-tiered design and testing sufficiently help me manage the chaos.</p>
<p> Science often exists in a pristine clean vacuum, whereas software deals primarily with people. Software is not a science, and humans (like software) are inherently messy and complex.<br /> </p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/07/27/the-world-is-messy-and-complex-why-should-software-be-different/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Joining The Dual Monitor Club: Getting a New Computer: The Ultimate Developer Rig</title>
		<link>http://adam.kahtava.com/journal/2008/06/23/joining-the-dual-monitor-club-getting-a-new-computer-the-ultimate-developer-rig/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/23/joining-the-dual-monitor-club-getting-a-new-computer-the-ultimate-developer-rig/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 17:17:08 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,da7b4fe1-5fbb-48ec-aef2-f756660e5cb6.aspx</guid>
		<description><![CDATA[
In this picture: My Charles Babbage mug, books: Domain Driven Design, the Ruby Programming Language, the Definitive Guide to JavaScript, my Evoluent VerticalMouse, and lots of Red Rain empties.
One of my biggest pet peeves is trying to efficiently complete development work on a slow machine. In my mind, trying to work quickly on a slow [...]]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #c8c8c8; margin: 5px; padding: 5px; float: right; width: 400px;"><img src="http://adam.kahtava.com/journal/images/blog/Adams-Desktop-Dual-Monitors.jpg" alt="" /><br />
<em>In this picture: My <a href="http://en.wikipedia.org/wiki/Charles_Babbage">Charles Babbage</a> mug, books: Domain Driven Design, the Ruby Programming Language, the Definitive Guide to JavaScript, my <a href="http://www.evoluent.com/vm3.html">Evoluent VerticalMouse</a>, and lots of Red Rain empties.</em></div>
<p>One of my biggest pet peeves is trying to efficiently complete development work on a slow machine. In my mind, <strong>trying to work quickly on a slow computer is like asking a marathon runner to wear <a href="http://en.wikipedia.org/wiki/Snowshoe">snowshoes</a> then demanding they WIN the marathon.</strong> What ensues, is painful for the runner, painful for all who watch, and reaching the end goal feels impossible - bottom line good equipment matters. However, many client&#8217;s overlook the relationship between <em>getting stuff done</em> and a slow machine, or they don&#8217;t care, or they can&#8217;t do anything about it.<em> </em></p>
<p><em> </em></p>
<p><em> Maybe they find it thrilling (in some sick way) to watch your soul fizzle away as you spend 300 minutes a day compiling your application (or running your tests). :)</em></p>
<p>In great organizations slow machines aren&#8217;t an issue. According to the <a href="http://www.codinghorror.com/blog/archives/000666.html">The Programmer&#8217;s Bill of Rights</a>: <em>&#8220;Every programmer shall have a fast PC&#8221;</em>, and from the <a href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel Test</a>: <em>&#8220;[Organizations should] use the best tools money can buy?&#8221;</em> <strong>But reality is often a different beast, and in my experience you have to make the changes you want (or <em>&#8220;be the change you want to see&#8230;&#8221; - <a href="http://en.wikipedia.org/wiki/Mahatma_Gandhi">Gandhi</a></em>). </strong></p>
<p><em>I&#8217;m sure in Silicon Valley, good computers would be mandatory for most organization, but I live in Canada - we suffer through black flies, mosquitoes, 8 months of winter, and organizations with poor resources. :) Did you know that Canada&#8217;s population is roughly equivalent to the population of the state of California alone!?</em></p>
<p>Anyhow, I started working from home full-time this year - up to this point most of my work has been done onsite using whatever machine the client provided (some with outdated hardware). <strong>My home desktop was a six year old PC that would make Frankenstein look sexy - it was a collection of old and new parts</strong>. I needed a new computer.<em> </em></p>
<p><em> </em></p>
<p>I based my specs on <a href="http://www.codinghorror.com/blog/">Jeff Atwood&#8217;s</a> and <a href="http://www.hanselman.com/blog/">Scott Hanselman&#8217;s</a> specs for the <a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart2.aspx">Ultimate Developer Rig</a>. The machine turned out to be economical, the prices have come down significantly since the initial post was published, and to top it all off, I was able to chop shop my old machine and sell every single part through eBay and Kijiji - for a surprisingly decent price too (who would have thought a 6 year old Sound blaster Audigy would sell for $50?).</p>
<p><strong>Contrasting my setups:</strong></p>
<table border="0">
<tbody>
<tr>
<td></td>
<td><strong>Then</strong></td>
<td><strong>Now</strong></td>
</tr>
<tr>
<td>Processors</td>
<td>Two 32bit AMD MP 1.2GHz</td>
<td>Quad Core 64bit 2.4GHz</td>
</tr>
<tr>
<td>RAM</td>
<td>3.5 GB</td>
<td>8 GB</td>
</tr>
<tr>
<td>Monitor(s)</td>
<td>A single 17&#8243;</td>
<td>Two <a href="http://www.amazon.com/dp/B000NBBWNU/">22&#8243; Samsung SyncMaster 226BWs</a></td>
</tr>
<tr>
<td>Personal Pain Points</td>
<td>Excruciatingly painful</td>
<td>Occasionally painful (only Vista induced)</td>
</tr>
</tbody>
</table>
<p>Working on my new machine is enjoyable. I find myself more productive without being distracted by the frustration of a slow machine, and having dual monitors also contributes to my productivity (<a href="http://www.codinghorror.com/blog/archives/001076.html">Does More Than One Monitor Improve Productivity?</a>). My favourite parts of the new setup are the monitors, the <a href="http://www.ergotron.com/Products/DeskMounts/tabid/71/ctl/Product/mid/396/PRDID/134/language/en-CA/default.aspx">Ergotron stand</a>, the speed, and the <a href="http://www.antec.com/us/productDetails.php?ProdID=81820">case</a>. You really get what you pay for with LCD monitors, the SyncMasters are easy on the eyes when compared to my old economic Acer, and the case is dead silent.</p>
<p><strong>In the future, if I&#8217;m provided with a substandard PC, you can expect to see me hauling my new machine into the office. :)</strong></p>
<p>Take a look at my old desktop setup in my older post: <a href="http://adam.kahtava.com/journal/2008/03/08/something-about-the-cobblers-children-having-no-shoes/">Something About the Cobbler&#8217;s Children Having No Shoes</a></p>
<p>Have you ever had to use an outdated machine as a developer? How does working on a slow machine effect your work? What are your thoughts on taking matters into your own hand (like purchasing your own computer to replace the slow one at work)? Have you ever installed additional resources in the computer you use at work?</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/23/joining-the-dual-monitor-club-getting-a-new-computer-the-ultimate-developer-rig/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>Necessary Skepticism: Skepticism is not Pessimism</title>
		<link>http://adam.kahtava.com/journal/2008/05/04/necessary-skepticism-skepticism-is-not-pessimism/</link>
		<comments>http://adam.kahtava.com/journal/2008/05/04/necessary-skepticism-skepticism-is-not-pessimism/#comments</comments>
		<pubDate>Sun, 04 May 2008 15:44:34 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,5fc57bdc-f172-4cd5-b934-b97430126aaa.aspx</guid>
		<description><![CDATA[In the software realm our opinions are often polarized (perceived in extremes) with no middle ground - you&#8217;re a pragmatist or an idealist, you&#8217;re a Windows or *nix person, &#8220;you&#8217;re either with us or against us&#8221;. This train of thought is referred to as Black-and-White Thinking, or All or Nothing Thinking. This thought process continually [...]]]></description>
			<content:encoded><![CDATA[<p>In the software realm our opinions are often polarized (perceived in extremes) with no middle ground - you&#8217;re a pragmatist or an idealist, you&#8217;re a Windows or *nix person, <a href="http://en.wikipedia.org/wiki/You%27re_either_with_us,_or_against_us"><em>&#8220;you&#8217;re either with us or against us&#8221;</em></a>. This train of thought is referred to as <a href="http://en.wikipedia.org/wiki/Black_and_white_thinking#Black_and_white_thinking"><em>Black-and-White Thinking</em></a>, or <em>All or Nothing Thinking</em>. This thought process continually manifests itself in the software realm for good reason - we&#8217;re under pressure to produce, but have limited time, and can&#8217;t exhaust all permutations or combinations of technological possibilities. So we develop coping skills, and make quick decisions (even if they are wrong). As IT professional we&#8217;re constantly in <em>The Fight or Flight</em> mentality:</p>
<blockquote><p>All or Nothing thinking &#8230; is part of the most primitive of human responses: The Fight or Flight Response. When faced with a life-threatening situation, we must make a snap decision and act on it. There is no time for &#8216;maybe this&#8217;, or &#8216;maybe that&#8217;. -<a href="http://www.clinical-depression.co.uk/Understanding_Depression/all_nothing.htm">All or Nothing Thinking</a></p></blockquote>
<p><strong>Some Polarized Views</strong></p>
<p>Views or labels that seem to be commonly applied to people, organizations, and people:</p>
<ul>
<li> A Pessimist or an Optimist</li>
<li> A Cynic or an Proponent</li>
<li> A Skeptic or a Dreamer</li>
<li> A Pragmatist or an Idealist</li>
<li> A <a href="http://en.wikipedia.org/wiki/Tigger">Tigger</a> or an <a href="http://en.wikipedia.org/wiki/Eeyore">Eeyore</a></li>
</ul>
<p>These labels are generally mutually exclusive - you&#8217;re usually labeled a Pessimist or an Optimist, but not both. Then there&#8217;s this general acceptance that Skeptics are Pessimists and these are <a href="http://dictionary.reference.com/browse/curmudgeon">Curmudgeons</a>, and Eeyores (but everything in moderation). Switching between views is healthy and advisable (be a Skeptic and an Optimist), because inherently <em>&#8220;[a]ll programmers are optimists&#8221;</em> (1) and too much Enthusiasm, and Optimism often results in Hype, and <em>&#8220;Hype is the plague on the house of software&#8221;</em> (2).</p>
<p><strong>Why not embrace all these views? Take on the role of a Skeptical Dreamer, then an Optimistic Cynic, or a Pragmatic Idealist. Let&#8217;s throw off these polarized thinking models and fill in the gray areas. As Fred Brooks once said: &#8220;Skepticism is not Pessimism&#8221;, and critical thinking is also not Skepticism.</strong></p>
<p><span style="font-size: xx-small;">(1) Fred Brooks, The Mythical Man-Month (2) Robert Glass, Facts and Fallacies of Software Engineering</span></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/05/04/necessary-skepticism-skepticism-is-not-pessimism/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>How To Choose a Good Technical Book</title>
		<link>http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 15:19:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Book]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,9ce19ba0-c8df-408f-aa49-cb62bb3992f3.aspx</guid>
		<description><![CDATA[The quality of technical books have wide variations between publishers and authors. While choosing a book based on the author is reliable, depending on a publisher or brand name is not reliable, and choosing a book based on advertisements is even less reliable. It makes sense to choose your books wisely since most technical books [...]]]></description>
			<content:encoded><![CDATA[<p>The quality of technical books have wide variations between publishers and authors. While choosing a book based on the author <u>is</u> reliable, depending on a publisher or brand name <u>is not</u> reliable, and choosing a book based on advertisements is even less reliable. It makes sense to choose your books wisely since most technical books live a short life (the duration of a single project), cost money, and require precious time to be read.  </p>
<p> <b>When choosing a book I follow this heuristic approach:</b> <br /> 
<ul>
<li> Ask experts in the field (friends, forums, newsgroups) for recommendations</li>
<li> Ask these experts to differentiate between the high level books and the books that take a technical deep dive.</li>
<li> Filter out (discard) the high level recommendations.</li>
<li> Filter out (discard) all recommendations that contain the following keywords in their title:</li>
<ul>
<li> <i>Cookbook</i> </li>
<li> <i>Problem - Design - Solution </i> </li>
<li> <i>Hacks</i> </li>
<li> <i>Tips</i> </li>
<li> <i>Learn X in 24 hours</i> </li>
</ul>
<li> Look for recognizable authors.</li>
<li> Cross reference these recommendations through Amazon&#39;s Reviews:</li>
<ul>
<li> Books with over 100 excellent ratings on Amazon are instant winners - the Amazon community is rarely misleading. </li>
<li> Books that haven&#39;t received more than 50 ratings should be considered with skepticism - visit a local book store and skim through the text in question before making the purchase.</li>
</ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The ASP.NET AJAX Learning Curve</title>
		<link>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 14:36:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,a8f6b8fe-dbc5-4963-a735-e92ad3b18d8b.aspx</guid>
		<description><![CDATA[The ASP.NET AJAX framework comes with a lot of baggage err&#8230; I mean&#8230; a huge learning curve when compared to other AJAX Frameworks like JQuery, YUI, Dojo, Prototype / Scriptaculous.
 Here&#39;s a running list of the technologies, and concepts you&#39;ll encounter when digging into ASP.NET AJAX: 

 ASP.NET 

 The Page Life Cycle
 The Control [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://en.wikipedia.org/wiki/ASP.NET_AJAX">ASP.NET AJAX</a> framework comes with a lot of baggage err&#8230; I mean&#8230; a huge learning curve when compared to other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX Frameworks</a> like <a href="http://jquery.com/">JQuery</a>, <a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://dojotoolkit.org/">Dojo</a>, <a href="http://www.prototypejs.org/">Prototype</a> / <a href="http://script.aculo.us/">Scriptaculous</a>.</p>
<p> Here&#39;s a running list of the technologies, and concepts you&#39;ll encounter when digging into ASP.NET AJAX:<br /> 
<ul>
<li> ASP.NET<img src="http://adam.kahtava.com/journal/images/blog/ajax_logo.png" style="float: right;"> </li>
<ul>
<li> The Page Life Cycle</li>
<li> The Control Life Cycle</li>
<li> Web Controls</li>
<li> User Controls</li>
<li> View State</li>
<li> Session State</li>
<li> Events </li>
</ul>
<li> .NET / Classical Language </li>
<ul>
<li> Interfaces</li>
<li> Inheritance</li>
<li> Delegates</li>
<li> Multicast Delegates</li>
<li> Assemblies</li>
<li> Properties (Get / Set)</li>
<li> Constructors</li>
</ul>
</ul>
<p> In addition to these, you also have the technologies universal to all JavaScript libraries:<br /> 
<ul>
<li> JavaScript:</li>
<ul>
<li> Closures</li>
<li> Object Literals</li>
<li> JSON</li>
<li> Events</li>
<li> DOM Manipulation</li>
<li> Prototypical Inheritance</li>
<li> Constructors</li>
<li> XMLHttpRequest </li>
</ul>
<li> Cascading Style Sheets (CSS):</li>
<li> Web Services</li>
</ul>
<p> The <a href="http://en.wikipedia.org/wiki/ASP.NET_AJAX">ASP.NET AJAX</a> Framework is more complex than other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a>, I&#39;m continually lost in it&#39;s ambiguity as it attempts to skirt around the JavaScript language - I think this learning curve (and all it&#39;s confusion) is precisely why <a href="http://en.wikipedia.org/wiki/Silverlight">Silverlight</a> has so much potential.  </p>
<p> I&#39;m still diving into the low-level details, but my first impressions of the ASP.NET AJAX Framework are:  <br /> 
<ul>
<li> Obscure, ambiguous, no clear vision - it offers multiple (resource intensive) ways to avoid writing JavaScript, but then requires that you write JavaScript anyways </li>
<li> Too server centric</li>
<li> Too heavy weight (I&#39;m not appreciating how they&#39;re trying to turning JavaScript into a Java, C#, .NET clone, the overhead within the browser for these conversions seems like a huge performance bottleneck)</li>
<li> Has the potential for poor performance  </li>
</ul>
<p> Most of the <u>other</u> AJAX libraries have been written with performance, browser responsiveness, and User Experience as their number one priorities - I&#39;m still not sure about ASP.NET AJAX.  </p>
<p> How many ways can we try to avoid writing JavaScript? If an AJAX library doesn&#39;t enhance the User Experience then why use it? Regardless, I&#39;m still digging deeper.<br /> </p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Founders aren&#8217;t Employees, but neither are Consultants</title>
		<link>http://adam.kahtava.com/journal/2008/04/01/founders-arent-employees-but-neither-are-consultants/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/01/founders-arent-employees-but-neither-are-consultants/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 23:39:30 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,febf2a86-8bc5-42d6-b870-f9921f3ac1fd.aspx</guid>
		<description><![CDATA[In You Weren&#8217;t Meant to Have a Boss, Paul Graham makes some clear distinctions between Founders and Employees. A similar Founder Vs Employee thread was presented in Joel Spolsky&#8217;s recent article How Hard Could It Be?: Lessons I Learned in the Army. Spolsky goes on to make the point that Employees do not have the [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.paulgraham.com/boss.html"><em>You Weren&#8217;t Meant to Have a Boss</em></a>, Paul Graham makes some clear distinctions between Founders and Employees. A similar Founder Vs Employee thread was presented in Joel Spolsky&#8217;s recent article <a href="http://www.inc.com/magazine/20080301/how-hard-could-it-be-lessons-i-learned-in-the-army.html?partner=fogcreek"><em>How Hard Could It Be?: Lessons I Learned in the Army</em></a>. Spolsky goes on to make the point that Employees do not have the same ambitions as Founders, and that Founders need to realize this dichotomy - that Employees are interested in <em>today</em> (short term) whereas Founders are focused on the long term.</p>
<blockquote><p>The great employees will be devoted, sure, and it&#8217;s completely reasonable to expect them to work their butts off. But unlike founders, employees are concerned about what their jobs are like today. They&#8217;re not as excited about making sacrifices for the long run. I can always tell the founders who haven&#8217;t figured this out yet, because they&#8217;re disappointed in all their employees, firing good people left and right and constantly asking, &#8220;Why hasn&#8217;t Joe (or Jane) gotten this work done yet? I could have finished it in one weekend!&#8221; - Joel Spolsky: <a href="http://www.inc.com/magazine/20080301/how-hard-could-it-be-lessons-i-learned-in-the-army.html?partner=fogcreek">How Hard Could It Be?: Lessons I Learned in the Army</a></p></blockquote>
<p>Both these articles highlight the differences between Employees and Founders, but what about Consultants?</p>
<p>Consultants can often fall under the full-time Employee umbrella, but probably have an even shorter term interest in their client. Part of a consultant&#8217;s job is to maintain objectivity, to distance themselves from becoming financially, emotionally, and personally invested in their client - objectivity is lost when an attachment or investment is made.</p>
<p>According to <a href="http://www.amazon.com/s?ie=UTF8&amp;tag=mozilla-20&amp;index=blended&amp;link%5Fcode=qs&amp;field-keywords=Janet%20Ruhl%20&amp;sourceid=Mozilla-search">Janet Ruhl</a> a couple of the biggest Gotchas in consultancy work can be:</p>
<ul>
<li>Investing in your client - purchasing shares in your client or agreeing to software royalties rather than a pay cheque.</li>
<li>Being manipulated into working for free.</li>
</ul>
<p>Consultants are kind of like Employees, but different. Consultants probably have an even shorter term interest in the company they work for then Employees do. I think it&#8217;s important to highlight these differences.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/01/founders-arent-employees-but-neither-are-consultants/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Namespacing Your JavaScript</title>
		<link>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 15:23:37 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,d9202683-be0a-49d2-8954-05f85a29c0cf.aspx</guid>
		<description><![CDATA[Namespacing your JavaScript is critical for sites that make heavy use of JavaScript, or sites that use any the JavaScript AJAX libraries (Scriptaculous, ASP.NET AJAX Client Side, YUI, JQuery, &#8230;). It&#8217;s also a great defensive programming technique - this is another post on JavaScript techniques that I&#8217;ve found useful.
Why Namespaces? Well&#8230; :) When a browser [...]]]></description>
			<content:encoded><![CDATA[<p>Namespacing your JavaScript is critical for sites that make heavy use of JavaScript, or sites that use any the JavaScript AJAX libraries (<a href="http://script.aculo.us/">Scriptaculous</a>, <a href="http://asp.net/ajax/documentation/live/ClientReference/">ASP.NET AJAX Client Side</a>, <a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://jquery.com/">JQuery</a>, &#8230;). It&#8217;s also a great defensive programming technique - this is another post on JavaScript techniques that I&#8217;ve found useful.</p>
<p><strong>Why Namespaces?</strong> Well&#8230; :) When a browser loads a document, it loads ALL the JavaScript into the browser. Objects that are not enclosed within a Namespace are Global, and <a href="http://www.nczonline.net/blog/2006/6/5/global_variables_are_evil">Global Variables are Evil</a> because they run the risk of interfering / overriding / clobbering previously defined objects (variables, functions, etc&#8230;). The JavaScript language, in its current form does not have native support for Namespacing . So, as pragmatic developers we realize the need to <em>&#8220;Program Into [Our] Language, Not In It&#8221; </em><em>- <a href="http://www.amazon.com/gp/product/0735619670?tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670">Steve McConnell, Code Complete 2nd Ed, Chapter 34.4</a></em>. In the JavaScript language we use Objects to achieve Namespacing - we&#8217;ll cover this closer to the end of this post.</p>
<blockquote><p>Don&#8217;t limit your programming thinking only to the concepts that are supported automatically by your language. The best programmers think of what they want to do, and then they assess how to accomplish their objectives &#8230; - Steve McConnell: <a href="http://www.amazon.com/gp/product/0735619670?tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670">Code Complete 2nd Ed, Chapter 34.4</a> </p></blockquote>
<p><strong>An example of when Namespaces could be used: </strong>Let&#8217;s say, we&#8217;re working on a team of 3 developers, each developer is working on a different widget / component for the same page. So inside our HTML / XHTML document we define and load three different JavaScript files and inside these files we have something like:<br />
In someObscureWidgetJavaScriptFile1.js have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span>(){ alert('hello world'); };</span></pre>
<p>In someOtherObscureJavaScriptFile2.js we have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> 'hello world';</span></pre>
<p>In someOtherObscureJavaScriptFile3.js we have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> { hello: 'hello', world: 'world' };</span></pre>
<p>All these JavaScript files get loaded into the browsers global calling object (window), and each assignment of <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">helloWorld </span>interferes with the previous. When we attempt to reference <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">helloWorld</span> we&#8217;ll be depending on the order in which the JavaScript files were loaded - if the first file was loaded we&#8217;ll be able to display the alert, if the later file was loaded first we&#8217;ll be able to reference a string, and so on.</p>
<p><strong>Back to the topic at hand, How do I create a Namespace in JavaScript.</strong><br />
<em>Note: this approach to Namespacing was recommended and referenced in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">JavaScript: The Definitive Guide by David Flanagan</a>, other methods of Namespacing can be found on the web (<a href="http://www.dustindiaz.com/namespace-your-javascript/">Namespacing your JavaScript</a> by Dustin Diaze outlines an alternate approach). For me, the following seems more intuitive, and is recommended in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">Flanagan&#8217;s</a> book - probably, the best JavaScript book written to date.</em></p>
<p><strong>Ceating a Namespace in JavaScript:</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;">// Create the namespace object. Error checking omitted here for brevity.</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 var</span> myNameSpace;
 <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (!myNameSpace) myNameSpace <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> {};
 myNameSpace.myPseudoClass <span style="color: Red; 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;">
 //JavaScript doesn't support classes,
 // so let's avoid confusing people and call this a Pseudo Class</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"> 

 // Don't stick anything into the namespace directly.</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // Instead we define and invoke an anonymous function to create a closure</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // that serves as our private namespace. This function will export its</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // public symbols from the closure into the myNameSpace object</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // Note that we use an unnamed function so we don't create any other</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // global symbols.</span>
 (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span>() { <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// Begin anonymous function definition</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"> 

   // Nested functions create symbols within the closure</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 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: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span> displayMyMessage() { alert(myMessage); }

 </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;">// Local variable are symbols within the closure.</span> <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;">  </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;">// This one will remain private within the closure</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 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: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">var</span> myMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> 'Hello World';

 </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;">// This function can refer to the variable with a simple name</span> <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;">  </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;">// instead of having to qualify it with a namespace</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 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: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span> getMyMessage() { <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> myMessage; }

 </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;">// Now that we've defined the properties we want in our private</span> <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;">  </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;">// closure, we can export the public ones to the public namespace</span> <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;">  </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;">// and leave the private ones hidden here.</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 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: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">var</span> ns <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> myNameSpace.myPseudoClass;
 </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;"> ns.displayMyMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> displayMyMessage;
 </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;"> ns.getMyMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> getMyMessage;

 })(); <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// End anonymous function definition and invoke it</span></span></pre>
<p>Then outside our namespace we can invoke our methods like this: <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">myNameSpace.myPseudoClass.displayMyMessage();</span></p>
<p>Read Chapter 10, Modules and Namespaces in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">JavaScript: The Definitive Guide</a> for a deeper dive into Namespaces and Modules in JavaScript!</p>
<p>If you&#8217;re still not convinced you need Namespaces and are interested in reading more about the issues surounding Global Data, then you may be interested in reading Chapter 13.3 (Global Data) in Code Complete.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inter / Cross Browser Window Communication Using JavaScript</title>
		<link>http://adam.kahtava.com/journal/2008/03/11/inter-cross-browser-window-communication-using-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/11/inter-cross-browser-window-communication-using-javascript/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 15:45:20 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Firebug]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,a83e7e46-a822-4f70-9c3a-a7ad377c3670.aspx</guid>
		<description><![CDATA[A quick search on the internet for &#8220;Inter Browser Window Communication Using JavaScript&#8221; reveals many outdated search results recommending questionable techniques. In the past I&#8217;ve fallen prey to many of these ill-advised suggestions. So&#8230; I thought, I&#8217;d start a small series on JavaScript techniques that I&#8217;ve found useful.
This post covers Inter / Cross Browser Window [...]]]></description>
			<content:encoded><![CDATA[<p>A quick search on the internet for <em>&#8220;Inter Browser Window Communication Using JavaScript&#8221;</em> reveals many outdated search results recommending questionable techniques. In the past I&#8217;ve fallen prey to many of these ill-advised suggestions. So&#8230; I thought, I&#8217;d start a small series on JavaScript techniques that I&#8217;ve found useful.</p>
<p><strong>This post covers Inter / Cross Browser Window Communications using JavaScript.</strong></p>
<p>A common scenario in web applications is: <strong>to have Page A open Page B , then have Page A communicate with Page B or vise versa.</strong></p>
<p>One of the techniques floating around the internet suggests that you use Cookies and a JavaScript setTimeout function that listens for the presence of a cookie. So essentially Page A sets a cookie and Page B listens for this cookie and acts on it.</p>
<p>A alternate solution might be to use the JavaScript Browser <a href="http://developer.mozilla.org/en/docs/DOM:window.open">window.open</a> and <a href="http://developer.mozilla.org/en/docs/DOM:window.opener">window.opener</a> methods. Using these two methods we can achieve inter / cross browser window communication as long as the <a href="http://www.mozilla.org/projects/security/components/same-origin.html">Same Origin Policy</a> is withheld - a similar approach can be taken for frame and iframe communication.<br />
<strong><br />
An example:</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;">// myNewWindow stores the reference to the newly </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;">
//   </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;">created window, </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;">this provides a handle for defining </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;">
//   and calling methods in the New Window </span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
var</span> myNewWindow <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> <span style="font-size: x-small;"><strong>window.open</strong></span>('about:blank');
<span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
// Let us call the alert method in our New Window </span><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
//   from this window (the Original Window) </span>
myNewWindow.alert('Hello From Original Window');
<span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
// Let us call an alert method in our Original Window </span><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
//   from our New Window. So.. Lets use a timer </span>
myNewWindow.setTimeout(
 '<span style="font-size: x-small;"><strong>window.opener</strong></span>.alert(\'Hello From The New Window\')', 100);</span></pre>
<p>Click <a href="javascript: (function(){ var myNewWindow = window.open('about:blank'); myNewWindow.alert('Hello From Original Window'); myNewWindow.setTimeout('window.opener.alert(\'Hello From The New Window\');', 1000); })();">here</a> to run this code live in your browser window using a Bookmarklet, or copy the above code into your Firebug <a href="http://www.getfirebug.com/cl.html">Command Line Console</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/11/inter-cross-browser-window-communication-using-javascript/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>
		<item>
		<title>On Teams: Thoughts, and Quotes related to Team Work</title>
		<link>http://adam.kahtava.com/journal/2008/01/31/on-teams-thoughts-and-quotes-related-to-team-work/</link>
		<comments>http://adam.kahtava.com/journal/2008/01/31/on-teams-thoughts-and-quotes-related-to-team-work/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 00:39:22 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,0735f2c6-9627-4e59-a5aa-45298b697929.aspx</guid>
		<description><![CDATA[Team work and interpersonal skills are absolutely essential for the present day knowledge worker (software developers, and the like). If you don&#8217;t like working in teams, don&#8217;t know how to work in a team, then you may not be able to find work.
In the larger software community, most agree that:
programming is a social activity, &#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Team work and interpersonal skills are absolutely essential for the present day knowledge worker (software developers, and the like). If you don&#8217;t like working in teams, don&#8217;t know how to work in a team, then you may not be able to find work.</p>
<p>In the larger software community, most agree that:</p>
<blockquote><p>programming is a social activity, &#8230; being the lone wolf &#8230; is not what we do anymore - <a href="http://video.yahoo.com/video/play?vid=529579">Douglas Crockford</a></p></blockquote>
<p>And most of us have come to understand that:</p>
<blockquote><p>Team dynamics; how well a team works together has a bigger impact on a project than the developer&#8217;s individual capabilities. [And that no] individual is a success who hurts the team, and no individual is a failure who helps it. - <a href="http://www.amazon.com/Software-Project-Survival-Guide-Practices/dp/1572316217">Software Project Survival Guide</a></p></blockquote>
<p>So, it should come as no surprise when large companies that depends almost entirely on team work, lists <strong>Team working and interpersonal skills</strong> as the <strong>VERY</strong> most important business skill. - <a href="http://news.bbc.co.uk/2/hi/business/7143417.stm">Computer knowledge &#8216;undervalued&#8217;</a></p>
<p>However; it&#8217;s often hard for the those in management to understand that you can&#8217;t force people into a team environment - let alone change or mold them. So, if someone doesn&#8217;t like working on teams, has never worked on a team, or doesn&#8217;t agree with your existing team&#8217;s cultural views, then you should ask why. Because:</p>
<blockquote><p>the people that work for you through whatever period will be more or less the same at the end as they were at the beginning.  If they&#8217;re not right for the job from the start, they never will be. - <a href="http://www.amazon.com/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439">Peopleware: Productive Projects and Teams</a></p></blockquote>
<p>In reality, we have very little influence on our team members, poorly matched cultural values will likely result in poorly functioning teams, which in turn negatively results the projects success. Joel Spolsky takes this train of thought a little further and suggests that:</p>
<blockquote><p>it is much, much better to reject a good candidate than to accept a bad candidate. A bad candidate will cost a lot of money and effort - <a href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html">The Guerrilla Guide to Interviewing (version 3.0)</a> </p></blockquote>
<p>However; most organizations don&#8217;t have the exposure that Spolsky does, and can hardly find candidates period - let alone the very best candidates. Often in the real world, the only chance you&#8217;ll have to guide (influence) any team of developers (or anyone), is to lead by example. Jeff Atwood offers some great advice: </p>
<blockquote><p>Cajoling and berating your coworkers into compliance isn&#8217;t an effective motivational technique for software developers, at least not in my experience. If you want to pull your team up to a higher level of engineering, you need a leader, not an enforcer. The goal isn&#8217;t to brainwash everyone you work with, but to negotiate &#8230; So much of leadership is learning to give a damn about other people, something that us programmers are notoriously bad at. We may love our machines and our code, but our teammates prove much more complicated. - <a href="http://www.codinghorror.com/blog/archives/000933.html">Leading by Example</a></p></blockquote>
<p>Team work and interpersonal skills are more important than technical skills. The ability to work in a team is absolutely mandatory for today&#8217;s software developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/01/31/on-teams-thoughts-and-quotes-related-to-team-work/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How Well Do You Know JavaScript?</title>
		<link>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 19:09:19 +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[DOM]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b8b02f0d-1ed8-445a-a698-28458ef98622.aspx</guid>
		<description><![CDATA[
JavaScript is probably the world&#8217;s most popular and misunderstood programming languages and for good reason.
When a developer claims to know JavaScript this generally equates to one or all of the following:

 &#8220;I know what JavaScript is, I can learn JavaScript in 30 minutes&#8220;
 &#8220;JavaScript is for kids, it&#8217;s a toy language, it&#8217;s easy&#8221;
 &#8220;I just [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://www.flickr.com/photos/matthiasorfield/368716706/"><img src="http://farm1.static.flickr.com/98/368716706_d8c474a12c_m.jpg" alt="" /></a></div>
<p>JavaScript is probably the world&#8217;s most popular and misunderstood programming languages and for good reason.<br />
When a developer claims to <em>know</em> JavaScript this generally equates to one or all of the following:</p>
<ul>
<li> <em>&#8220;I know what JavaScript is, </em><em>I can learn JavaScript in 30 minutes</em><em>&#8220;</em></li>
<li> <em>&#8220;JavaScript is for kids, it&#8217;s a toy language, it&#8217;s easy&#8221;</em></li>
<li> <em>&#8220;I just copy and paste my JavaScript snippets / scripts from the internet&#8221;</em></li>
<li> <em>&#8220;JavaScript is just another programming language like C++, C#, VB.NET, or Java&#8221;</em></li>
</ul>
<p>If thoughts similar to these have crossed your mind when sizing up your JavaScript knowledge, then you probably don&#8217;t know JavaScript.</p>
<p>I would argue that if you&#8217;ve never programmed in a <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming language</a> (like: <a href="http://en.wikipedia.org/wiki/LISP">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Scheme">Scheme</a>, <a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language">F#</a>), never read a <a href="http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/"><strong><span style="text-decoration: underline;"><em>GOOD</em></span></strong></a> book on JavaScript, or never watched a video on JavaScript, then you probably don&#8217;t understand JavaScript at all. JavaScript is starkly different than any other mainstream programming language.</p>
<p>When it comes to JavaScript, if you don&#8217;t understand the fundamentals then you&#8217;re only punishing yourself.</p>
<p><strong>Here are some things every JavaScript developer should probably understand:</strong></p>
<ul>
<li> <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, <a href="http://en.wikipedia.org/wiki/JavaScript#History_and_naming">Mocha</a>, <a href="http://en.wikipedia.org/wiki/Livescript">LiveScript</a>, <a href="http://en.wikipedia.org/wiki/JScript">JScript</a>, and <a href="http://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a> are all essentially the same.</li>
<li> JavaScript is a prototypically inherited (<a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototype-based programming</a>) language which is very different than the classically inherited (<a href="http://en.wikipedia.org/wiki/Class-based_programming">class-based programming</a>) languages like C++, Java, and most of the .NET languages - you know the difference between a prototype-based programming and class-based programming language.</li>
<li> JavaScript is a loosely typed language - you know the difference between <a href="http://en.wikipedia.org/wiki/Strongly-typed_programming_language">strongly-typed programming</a> languages and <a href="http://en.wikipedia.org/wiki/Weak_typing">weak-typed</a> or loosely typed languages.</li>
<li> JavaScript is a functional <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambda</a> language - you understand lambdas and that functions in JavaScript can be lambdas.</li>
<li> JavaScript functions can be defined inside functions, inside functions, inside functions, and so on - you can demonstrate this.</li>
<li> JavaScript uses function scope, has no curly brace <em>&#8216;{}&#8217;</em> block scope - you understand that this is common attribute of most functional programming languages.</li>
<li> JavaScript has no private, public, protected assessors, no classes, no enums, no structs - you understand that all these language features can be achieved through objects and function closures.</li>
<li> JavaScript is classless, but instead it uses objects as general containers.</li>
<li> JavaScript makes use of garbage collection.</li>
<li> JavaScript uses truthy and falsy values - you understand which values are truth and falsy.</li>
<li> JavaScript makes use of the <em>&#8216;nan&#8217;</em> (not a number) and <em>&#8216;undefined&#8217;</em> values - you understand the difference between these values.</li>
<li> JavaScript has pretty good debuggers - you understand 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> You appreciate recursion, and understand that recursion is a useful technique in JavaScript.</li>
<li> You understand that JavaScript Namespaces should be used - you understand the importance of namespaces, and know how to create one (<a href="http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/">Namespacing Your JavaScript</a>).</li>
<li> You know how to avoid the <a href="http://www.dynamicsitesolutions.com/javascript/mistakes/">JavaScript pseudo-protocol</a> (<em>&lt;a href=&#8221;Javascript:alert(&#8217;hello&#8217;);&#8221;</em>), and appreciate avoiding it.</li>
<li> You know how to avoid embedding DOM Level 0 JavaScript events (<em>&lt;a onclick=&#8221;alert(&#8217;hello&#8217;);&#8221;</em>) in your mark-up / document structure, and appreciate this technique.</li>
<li> You know that JavaScript can make use of two different event models (<a href="http://www.quirksmode.org/js/events_order.html">event capturing and bubbling</a>), but we should only ever make use of bubbling.</li>
<li> You understand what <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> is and how it&#8217;s used.</li>
<li> You know how to keep you JavaScript, CSS, document structure separate, and appreciate non obtrusive JavaScript.</li>
</ul>
<p>If any of these points seem foreign, then it may be time to learn JavaScript. With all the hype and buzz around Web 2.0 and AJAX it could be a great way to augment your career while broadening your programming language vocabulary.</p>
<p><strong>Great resources for learning more about JavaScript:</strong></p>
<p>Videos:</p>
<ul>
<li> <em>The JavaScript Programming Language</em>: <a href="http://video.yahoo.com/video/play?vid=111593">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111594">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111595">Part 3</a>, <a href="http://video.yahoo.com/video/play?vid=111596">Part 4</a></li>
<li> <em>An Inconvenient API: The Theory of the DOM</em>: <a href="http://video.yahoo.com/video/play?vid=111582">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111583">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111584">Part 3</a></li>
<li> <em>Advanced JavaScript:</em> <a href="http://video.yahoo.com/video/play?vid=111585">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111586">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111587">Part 3</a></li>
<li> <em>JavaScript: The Good Stuff</em>: <a href="http://video.yahoo.com/video/play?vid=630959">Link</a></li>
<li> All these videos are available on the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a> - all the videos are great, watch them all!</li>
</ul>
<p>Books:</p>
<ul>
<li> <a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/1565923928/?tag=adamkahtavaap-20&amp;creativeASIN=1565923928">JavaScript: The Definitive Guide by David Flanagan</a></li>
<li> <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742?tag=adamkahtavaap-20&amp;creativeASIN=0596517742">JavaScript: The Good Parts by Douglas Crockford</a></li>
</ul>
<p>Links:</p>
<ul>
<li> <a href="http://developer.mozilla.org/en/docs/A_re-introduction_to_JavaScript">MDC: A re-introduction to JavaScript</a></li>
<li> <a href="http://javascript.crockford.com/code.html">Code Conventions for the JavaScript Programming Language</a></li>
<li> <a href="http://javascript.crockford.com/javascript.html">JavaScript: The World&#8217;s Most Misunderstood Programming Language</a></li>
<li> <a href="http://www.odetocode.com/Articles/473.aspx">What ASP.NET Developers Should Know About JavaScript</a></li>
<li> <a href="http://thinkingandmaking.com/entries/63">Best Practices: Implementing JavaScript for rich internet applications</a></li>
<li> <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">The seven rules of Unobtrusive JavaScript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roles: Questioning My Identity in the Software Realm</title>
		<link>http://adam.kahtava.com/journal/2007/12/08/roles-questioning-my-identity-in-the-software-realm/</link>
		<comments>http://adam.kahtava.com/journal/2007/12/08/roles-questioning-my-identity-in-the-software-realm/#comments</comments>
		<pubDate>Sat, 08 Dec 2007 19:21:48 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Interview]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,dbdf9219-1933-429d-bdb2-aea89045dbed.aspx</guid>
		<description><![CDATA[For the past couple months I&#39;ve been drinking in (watching) the videos on the Yahoo UI Theater. After watching Peter-Paul Koch&#39;s (PPK of Quirksmode) video: Fronteers: Guild of Front-End Developers, I&#39;ve been questioning my place in the software sphere. PPK makes the point that organizations should have clearly defined &#8220;front-end engineer&#8221; roles for maintaining standard [...]]]></description>
			<content:encoded><![CDATA[<p>For the past couple months I&#39;ve been drinking in (watching) the videos on the <a href="http://developer.yahoo.com/yui/theater/">Yahoo UI Theater</a>. After watching Peter-Paul Koch&#39;s (PPK of <a href="http://www.quirksmode.org/">Quirksmode</a>) video: <i><a href="http://video.yahoo.com/video/play?vid=1333726">Fronteers: Guild of Front-End Developers</a></i>, I&#39;ve been questioning my place in the software sphere. PPK makes the point that organizations should have clearly defined <i>&#8220;front-end engineer&#8221;</i> roles for maintaining standard compliant sites, maintaining conceptual integrity of the product / web application, and so on. This is a common train of thought, in the <a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201835959">Mythical Man-Month (1975)</a>, Fred Brooks suggests that a software team should be run like a surgical team where specialized roles like the surgeon, nurse, aesthetician, and so on be delegated and adhered to throughout the duration of the project. Most organizations don&#39;t have these roles defined, but that&#39;s another story.<br /> <br />
<blockquote> <object height="323" width="512"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.0.45"><param name="allowFullScreen" value="true"><param name="flashVars" value="id=4609563&amp;vid=1333726&amp;lang=en-US&amp;intl=us&amp;thumbUrl=http://us.i1.yimg.com/us.yimg.com/i/us/sch/cn/v/v3/w839/1333726_320_240.jpeg"><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.0.45" type="application/x-shockwave-flash" allowfullscreen="true" flashvars="id=4609563&amp;vid=1333726&amp;lang=en-US&amp;intl=us&amp;thumbUrl=http://us.i1.yimg.com/us.yimg.com/i/us/sch/cn/v/v3/w839/1333726_320_240.jpeg" height="323" width="512"> </object> <br /> <i>Above: PPK&#39;s Video from the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a>.</i></p></blockquote>
<p> The categorization of roles and topic of role is common in most companies and often discussed during interviews; most interviewers or companies want to know what position you play and how you&#39;ll fit into their organization. The interview question is generally <a href="http://en.wikipedia.org/wiki/Mutually_exclusive">mutually exclusive</a>, your choices could be: a Generalist, a Specialist, a Software Architect, a Business Logic Developer, a SOA Developer, a Database Analyst / Programmer, a Graphic Designer, a Web Developer, a Business Analyst, and so on&#8230; However; everytime I answer this question I can never respond with an answer that I&#39;m satisfied with, I always feel as though I&#39;m pigeonholing myself into some stereotype or category. From my experience some of the stereotypes associated with roles are: &#8220;<i>Web Designers&#8221;</i>: artsy, can&#39;t really grasp difficult problems, <i>&#8220;Generalist&#8221;</i>: technically competent, doesn&#39;t understand good user interfaces, often doesn&#39;t understand the big picture, and so on. It&#39;s kind of like someone asking: <i>&#8220;what kind of music you listen to?&#8221;</i>, but only letting you choose a single genre, then having someone psycho analyze you based on your genre selection - speaking of which, here&#39;s a link that already does this (kind of): <a href="http://quizfarm.com/test.php?q_id=43274">Which genre of music fits you</a>.  </p>
<p> This all brings up the question of identity. What am I, what is my role, what single role do I feel fits my skills and experience? Perhaps I&#39;ll start labeling myself as an information technology (IT) addict. :) I love, eat, dream, breath, drink technology. I have an obsession with the Software Development Lifecycle, I always have a couple IT related books on the go, I listen to IT related podcasts while commuting, I like writing code, I write code after work, I write code on the weekends, I contribute to online forums, I edit IT books, I like using Test Driven Development, I like front end work, I like back end work, I like it all.  <br /> 
</p>
<p> <hints id="hah_hints"> <span id="hah_hint_26" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 8px; left: 474px;">26</span><span id="hah_hint_27" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 28px; left: 235px;">27</span><span id="hah_hint_28" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 28px; left: 359px;">28</span><span id="hah_hint_29" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 108px; left: 423px;">29</span><span id="hah_hint_30" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 188px; left: 327px;">30</span><span id="hah_hint_31" name="hah_hint" style="border: 1px solid buttonshadow; padding: 0px 3px; z-index: 500; font-family: helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: x-small; line-height: normal; font-size-adjust: none; font-stretch: normal; color: buttontext; background-color: buttonface; -moz-border-radius-topleft: 0.3em; -moz-border-radius-topright: 0.3em; -moz-border-radius-bottomright: 0.3em; -moz-border-radius-bottomleft: 0.3em; position: absolute; display: none; top: 368px; left: 582px;">31</span> </hints></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/12/08/roles-questioning-my-identity-in-the-software-realm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alberta TechFest 2007 was a success : My highlights</title>
		<link>http://adam.kahtava.com/journal/2007/11/12/alberta-techfest-2007-was-a-success-my-highlights/</link>
		<comments>http://adam.kahtava.com/journal/2007/11/12/alberta-techfest-2007-was-a-success-my-highlights/#comments</comments>
		<pubDate>Mon, 12 Nov 2007 16:33:43 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

		<category><![CDATA[Code Camp]]></category>

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

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

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,4cf5f476-1491-4a57-bcb4-a554fd0827b6.aspx</guid>
		<description><![CDATA[This past weekend I attended the Alberta TechFest (an event put on by Calgary .Net User Group). TechFest resembled a code camp, but provides more seminars / sessions geared at a higher level. The sessions were geared towards: project management, the big picture of the Agile process, open source alternatives, as well as some in [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend I attended the <a href="http://www.albertatechfest.com/">Alberta TechFest</a> (an event put on by <a href="http://www.calgaryug.net/dnn/">Calgary .Net User Group</a>). TechFest resembled a <a href="http://calgarycodecamp.com/portal/">code camp</a>, but provides more seminars / sessions geared at a higher level. The sessions were geared towards: project management, the big picture of the Agile process, open source alternatives, as well as some in depth (show me the code type) presentations on <a href="http://en.wikipedia.org/wiki/Mock_object">Mock objects</a> (using <a href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a>), Microsoft&#8217;s new <a href="http://windowsclient.net/Acropolis/">Acropolis</a> framework, Test Driven Development (TDD), and Refactoring.</p>
<p><strong>My highlights:</strong></p>
<ul>
<li> The session on <em>Agile Project Planning With User Storie</em>s, and <em>Refactoring Automated Unit Tests Using Test Smells and Patterns</em> presented by Gerard Meszaros. I&#8217;ve been on a couple projects that could be characterized as <a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html">&#8220;Bad Agile&#8221;</a>, so Gerard&#8217;s presentation hit many chords, one of the comments he made really stuck out. He said something like: <em>&#8220;it&#8217;s not about the Agile process, it&#8217;s about the results, it&#8217;s about delivering&#8230;don&#8217;t be dogmatic&#8221;</em>. Sure it&#8217;s obvious, but it&#8217;s nice to hear it from someone else.  I&#8217;m currently in the process of purchasing Gerard&#8217;s book: <em><a href="http://www.amazon.com/dp/0131495054">xUnit Test Patterns: Refactoring Test Code</a></em>.</li>
<li> <em><a href="http://en.wikipedia.org/wiki/Mock_object">Mock objects </a> with <a href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a></em> was another great session (by <a href="http://shane.jscconsulting.ca">Shane Courtrille</a>). I&#8217;ve been using Rhino Mocks for a couple months now, but there&#8217;s always so much to learn from someone with more experience.</li>
</ul>
<p>I&#8217;m trying to make it a point to attend more of these events in an effort to <a href="http://adam.kahtava.com/journal/2007/03/04/community-keeps-us-grounded-expand-your-community/">expand my community</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/11/12/alberta-techfest-2007-was-a-success-my-highlights/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Bad Case of Information Fatigue Syndrome (IFS): Just Living the High-tech Illusion</title>
		<link>http://adam.kahtava.com/journal/2007/10/06/a-bad-case-of-information-fatigue-syndrome-ifs-just-living-the-high-tech-illusion/</link>
		<comments>http://adam.kahtava.com/journal/2007/10/06/a-bad-case-of-information-fatigue-syndrome-ifs-just-living-the-high-tech-illusion/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 03:08:11 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,ab454b3a-8180-4199-a8e0-1b2d852fe971.aspx</guid>
		<description><![CDATA[Whether on a forum thread, in a blog comment, or at work. Information Fatigue Syndrome (IFS) is a prevalent issue in the IT world.
IFS can be described as:
the weariness and stress that results from having to deal with excessive amounts of information - according to the IEEE Spectrum&#8217;s (Aug &#8216;07), Technically Speaking article. 
I think most [...]]]></description>
			<content:encoded><![CDATA[<p>Whether on a forum thread, in a blog comment, or at work. <a href="http://www.wordspy.com/words/informationfatiguesyndrome.asp">Information Fatigue Syndrome (IFS)</a> is a prevalent issue in the IT world.</p>
<p>IFS can be described as:</p>
<blockquote><p>the weariness and stress that results from having to deal with excessive amounts of information - according to the <a href="http://spectrum.ieee.org/aug07/magazineindex">IEEE Spectrum&#8217;s (Aug &#8216;07)</a>, Technically Speaking article. </p></blockquote>
<p>I think most developers / IT workers have experienced some IFS. An example of IFS might be: the calm, quiet developer who suddenly starts spewing obscenities and smashing their hands through the keyboard, or perhaps the forum poster who asks a simple question, then counteracts every suggestion you provide, and finally attempts to assault you online.</p>
<p>On a daily basis I have to remind myself that: <strong><br />
</strong></p>
<ul>
<li> <strong>Technology can be complex, but it&#8217;s not impossible</strong></li>
<li> <strong>Nothings perfect</strong></li>
<li> <strong>There are no silver bullets</strong></li>
<li> <strong>We&#8217;re just living the high-tech illusion. </strong></li>
</ul>
<p>Now let&#8217;s move on.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/10/06/a-bad-case-of-information-fatigue-syndrome-ifs-just-living-the-high-tech-illusion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notes on &#8220;The Hidden Cost of Turnover&#8221; from &#8220;Peopleware: Productivity Projects and Teams&#8221;</title>
		<link>http://adam.kahtava.com/journal/2007/05/06/notes-on-the-hidden-cost-of-turnover-from-peopleware-productivity-projects-and-teams/</link>
		<comments>http://adam.kahtava.com/journal/2007/05/06/notes-on-the-hidden-cost-of-turnover-from-peopleware-productivity-projects-and-teams/#comments</comments>
		<pubDate>Mon, 07 May 2007 01:25:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,6cabeca9-6bae-4daf-8386-f3b4fbfd3d99.aspx</guid>
		<description><![CDATA[Notes about employee retention from Peopleware by Tom DeMarco &#38; Timothy Lister and The Best Software Writing I by Joel Spolsky.
In the mid 80&#8217;s DeMarco and Lister found that the &#8220;average employee longevity [was] from fifteen to thirty-six months&#8221;, that&#8217;s about one to three years, and that the &#8220;total cost of replacing each person is [...]]]></description>
			<content:encoded><![CDATA[<p>Notes about employee retention from <a href="http://www.amazon.com/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439">Peopleware</a> by Tom DeMarco &amp; Timothy Lister and <a href="http://www.amazon.com/Best-Software-Writing-Selected-Introduced/dp/1590595009/">The Best Software Writing I</a> by Joel Spolsky.</p>
<p>In the mid 80&#8217;s DeMarco and Lister found that the <em>&#8220;average employee longevity [was] from fifteen to thirty-six months&#8221;</em>, that&#8217;s about one to three years, and that the <em>&#8220;total cost of replacing each person is the equivalent to four-and-a-half to five months&#8221;</em>. Joel Spolsky in <em>The Best Software Writing I</em>, mentions that <em>&#8220;Recruiting and training a new employee is usually estimated to cost 12 months&#8217; salary, total.&#8221;</em> Joel goes on to say that the industry standard for turnover is somewhere around 5%. So accordingly, if you worked at a company with 100 people you&#8217;d normally expect to loose 5 employees every year. Anything above 5% and you&#8217;re probably working in an environment with high turnover.</p>
<p>DeMarco and Lister point out that, companies with low employee retention rates often enter into a cycle with negative financial implications and <em>&#8220;an ugly invisible cost&#8221;</em>, because <em>&#8220;turnover [produces] turnover&#8221;</em>.</p>
<p>This <em>&#8220;ugly invisible cost&#8221;</em> often manifests itself as:</p>
<ul>
<li> Short-term viewpoints, a passing through mentality, degraded moral</li>
<li> Inexperienced management, early promotion, a top heavy organizational structure</li>
<li> A feeling of disposability, workers are treated as interchangeable parts, a degraded sense of loyalty</li>
<li> An undesirable work environment</li>
<li> A low employee retention rate</li>
<li> And the cycle continues</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/05/06/notes-on-the-hidden-cost-of-turnover-from-peopleware-productivity-projects-and-teams/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notes on Software Estimation: Demystifying the Black Art</title>
		<link>http://adam.kahtava.com/journal/2006/10/23/notes-on-software-estimation-demystifying-the-black-art/</link>
		<comments>http://adam.kahtava.com/journal/2006/10/23/notes-on-software-estimation-demystifying-the-black-art/#comments</comments>
		<pubDate>Mon, 23 Oct 2006 20:31:43 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,c727d7e6-09eb-4ca8-a43d-e43e5aeccc25.aspx</guid>
		<description><![CDATA[I started reading Steve McConnell&#8217;s latest book (Software Estimation: Demystifying the Black Art), as the first chapter comes to a close McConnell points out that companies with higher Capability Maturity Model (CMM) levels have a much higher rate of project success _ higher CMM levels are usually associated with mature companies that use historical data [...]]]></description>
			<content:encoded><![CDATA[<p>I started reading <a href="http://www.amazon.com/exec/obidos/search-handle-url/index=books&amp;field-author-exact=Steve%20McConnell&amp;rank=-relevance%2C%2Bavailability%2C-daterank/002-5104531-3620816">Steve McConnell&#8217;s</a> latest book (<a href="http://www.amazon.com/gp/product/0735605351?ie=UTF8&amp;tag=adamkahtavaap-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0735605351">Software Estimation: Demystifying the Black Art</a>), as the first chapter comes to a close McConnell points out that companies with higher <a href="http://en.wikipedia.org/wiki/Capability_Maturity_Model">Capability Maturity Model (CMM) levels</a> have a much higher rate of project success _ higher CMM levels are usually associated with mature companies that use historical data for project estimates, it&#8217;s interesting to note that these companies often work within a common domain. I found Steve&#8217;s little point quite intuitive, and thought it flowed nicely with Fact 17 from <a href="http://www.amazon.com/exec/obidos/search-handle-url/index=books&amp;field-author-exact=Robert%20L.%20Glass&amp;rank=-relevance%2C%2Bavailability%2C-daterank/002-5104531-3620816">Robert L. Glass&#8217;s</a> book titled <a href="http://www.amazon.com/gp/product/0321117425?ie=UTF8&amp;tag=adamkahtavaap-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0321117425">Facts and Fallacies of Software Engineering</a>.</p>
<p><strong>Fact 17</strong></p>
<blockquote><p>Reuse-in-the-large works best in families of related systems and thus is domain-dependent. This narrows the potential applicability of reuse-in-the-large.</p></blockquote>
<p>It makes perfect sense that companies working within a common domain make use of reuse-in-the-large and often make better project estimations.</p>
<p>On a similar note I found the <a href="http://en.wikipedia.org/wiki/Capability_Maturity_Model#Level_1_-_Initial">Level 1</a> definition of a CMM from Wikipedia quite amusing.</p>
<blockquote><p>Level 1 software project success depends on having quality people.</p></blockquote>
<p><strong>Related posts:</strong><br />
<a href="http://adam.kahtava.com/journal/2006/10/22/notes-on-software-reuse-from-the-book-titled-facts-and-fallacies-of-software-engineering/">Notes on Software Reuse from the book titled &#8220;Facts and Fallacies of Software Engineering&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/10/23/notes-on-software-estimation-demystifying-the-black-art/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notes on Software Reuse from the book titled &#8220;Facts and Fallacies of Software Engineering&#8221;</title>
		<link>http://adam.kahtava.com/journal/2006/10/22/notes-on-software-reuse-from-the-book-titled-facts-and-fallacies-of-software-engineering/</link>
		<comments>http://adam.kahtava.com/journal/2006/10/22/notes-on-software-reuse-from-the-book-titled-facts-and-fallacies-of-software-engineering/#comments</comments>
		<pubDate>Sun, 22 Oct 2006 19:47:00 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,e2504853-1546-418a-8b61-4bcfd3424397.aspx</guid>
		<description><![CDATA[The following has been taken from the book Facts and Fallacies of Software Engineering by Robert L. Glass.
Fact 15
Reuse-in-the-small (libraries of subroutines) began nearly 50 years ago and is a well-solved problem. 
Discussion:
There is a tendency in the computing world to assume that any good idea that comes along must be a new idea. &#8230; there [...]]]></description>
			<content:encoded><![CDATA[<p>The following has been taken from the book <a href="http://www.amazon.com/gp/product/0321117425?ie=UTF8&amp;tag=adamkahtavaap-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0321117425">Facts and Fallacies of Software Engineering</a> by <a href="http://www.amazon.com/exec/obidos/search-handle-url/index=books&amp;field-author-exact=Robert%20L.%20Glass&amp;rank=-relevance%2C%2Bavailability%2C-daterank/002-5104531-3620816">Robert L. Glass</a>.</p>
<p><strong>Fact 15</strong></p>
<blockquote><p>Reuse-in-the-small (libraries of subroutines) began nearly 50 years ago and is a well-solved problem. </p>
<p><strong>Discussion:</strong><br />
There is a tendency in the computing world to assume that any good idea that comes along must be a new idea. &#8230; there is enormous (and often hyped) enthusiasm for this concept, an enthusiasm that would be more realistic if people understood its history and its failure to grow over the years.</p></blockquote>
<p><strong>Fact 16</strong></p>
<blockquote><p>Reuse-in-the-large (components) remains a mostly unsolved problem, even though everyone agrees it is important and desirable. </p>
<p><strong>Discussion:</strong><br />
&#8230; we solved the reuse-in-the-small problem as far back as more than 40-something years ago. But the reuse-in-the-large problem has remained unsolved over those same intervening years.</p></blockquote>
<p><strong>Fact 17</strong></p>
<blockquote><p>Reuse-in-the-large works best in families of related systems and thus is domain-dependent. This narrows the potential applicability of reuse-in-the-large. </p></blockquote>
<p><strong>Fact 18</strong></p>
<blockquote><p>There are two &#8220;rules of three&#8221; in reuse: (a) It is three times as difficult to build reusable components as single use components, and (b) a reusable component should be tried out in three different applications before it will be sufficiently general to accept into a reuse library. </p></blockquote>
<p><strong>Related links:</strong><br />
Read the entire chapter on Reuse <a href="http://www.informit.com/articles/printerfriendly.asp?p=30091&amp;rl=1">here.</a><br />
Learn more about this book on <a href="http://www.amazon.com/gp/product/0321117425?ie=UTF8&amp;tag=adamkahtavaap-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0321117425">Amazon</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/10/22/notes-on-software-reuse-from-the-book-titled-facts-and-fallacies-of-software-engineering/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Computers in Japan: Advanced Technological Literacy does not imply Computer Literacy</title>
		<link>http://adam.kahtava.com/journal/2006/09/07/computers-in-japan-advanced-technological-literacy-does-not-imply-computer-literacy/</link>
		<comments>http://adam.kahtava.com/journal/2006/09/07/computers-in-japan-advanced-technological-literacy-does-not-imply-computer-literacy/#comments</comments>
		<pubDate>Thu, 07 Sep 2006 19:38:52 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,e92c6084-f4f1-4a08-960a-60fb0ea0df84.aspx</guid>
		<description><![CDATA[Despite being known for their advance electronics, robots, bullet trains (Shikansen), their nation wide Vehicle Information and Communication System (VICS), and being known as one of the most technologically advanced countries in the world, Japan and the Japanese people do not use computers as much as their Western (North American) counterparts.
This computer phenomenon was riveting [...]]]></description>
			<content:encoded><![CDATA[<p>Despite being known for their advance electronics, robots, <a href="http://en.wikipedia.org/wiki/Bullet_trains">bullet trains (Shikansen)</a>, their nation wide <a href="http://www.vics.or.jp/english/index.html">Vehicle Information and Communication System (VICS)</a>, and being known as one of the most technologically advanced countries in the world, <a href="http://en.wikipedia.org/wiki/Japan">Japan</a> and the Japanese people do not use computers as much as their Western (North American) counterparts.<br />
This computer phenomenon was riveting as I lived, worked, and traveled through Asia. Here&#8217;s the situation as I perceived it.</p>
<p><a href="http://en.wikipedia.org/wiki/Personal_computers">Personal computers (PCs)</a> and <a href="http://en.wikipedia.org/wiki/Operating_systems">operating systems (OSs)</a> were developed in the Western world in the English language. In the early 90s the standards for <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> version 1.0 were set to facilitate the development of multilingual systems. Microsoft&#8217;s Windows 3.1J (3.1 in the Japanese language) was released in 1993. Windows 95 and NT supported the basics of the Japanese language, and Windows NT (1993) was the first Microsoft OS to use Unicode internally. By the time a Japanese version of Windows was available the West had already been using Windows 1 - 3.1x and a couple other OSs - Japan was already well behind the Western PC wave.</p>
<div style="float: right; text-align: center;"><img src="http://adam.kahtava.com/journal/images/blog/Japan_TechLiteracy_Bamboo.jpg" alt="" /><br />
Image taken from <a href="http://photos.kahtava.com">Flickr</a></div>
<p>The names of people, places and even <a href="http://en.wikipedia.org/wiki/Sushi">sushi</a> could not be expressed using the early versions of Unicode. The <a href="http://en.wikipedia.org/wiki/Japanese_language">Japanese language</a> is written with three types of glyphs (<a href="http://en.wikipedia.org/wiki/Kanji">Kanji</a>, <a href="http://en.wikipedia.org/wiki/Hiragana">Hiragana</a>, and <a href="http://en.wikipedia.org/wiki/Katakana">Katakana</a>) and uses a Latin based language (<a href="http://en.wikipedia.org/wiki/Romaji">Romaji</a>), and western style numerals. Kanji (an ancient Chinese based language) is said to have about 50,000 characters _ for basic literacy you&#8217;ll need to know over 2,000 different Kanji characters. Katakana and Hiragana are each composed of about 46 basic characters. Romanji is similar to the English alphabet with 26 characters. With the addition of the western style numerals, symbols, punctuation, uppercase, lowercase, etc&#8230; there is an overwhelming number of characters. The Unicode standards were not able to support this sophisticated collection of characters, making PCs inadequate for government, business, and even personal use - subsequently slowing the use of PCs in Japan.</p>
<p>Unicode has come a long way since it was first introducted. Today most Japanese computer users have an English based keyboard and use Romanji - a phonetic equivalence to some Kanji, Hiragana, and Katakana glyphs - to select various glyphs, issues commands, write documents, and control their computer. As a phonetic equivalent Romanji has a number of it&#8217;s own translation issues. For example: Salary man is pronounced more like Sarary man, Orange is pronounced like Orangy, Adam is sometimes pronounced Adamu. This is just another contributor to the slow adoption of the PC.</p>
<p>A country in isolation; not only is Japan geographically isolated from the rest of Asia, but in 1641 Japan isolated themselves from the outside world for 213 years (until 1853). Anyone entering or leaving the country faced the death penalty - this time period is known as <a href="http://en.wikipedia.org/wiki/Sakoku">Sakoku</a>. The effects of isolation have played a significant role in Japanese society and business. Japan still prides itself in being self sufficient and often (understandably) displays <a href="http://en.wikipedia.org/wiki/Anti-globalization">anti-globalization</a> / <a href="http://en.wikipedia.org/wiki/Not_Invented_Here">Not Invented Here (NIH)</a> tendencies - these dispositions can also be attributed to the slow adoption of PCs in Japan.</p>
<div style="float: right; text-align: center;"><img src="http://adam.kahtava.com/journal/images/blog/Japan_TechLiteracy_Lady.jpg" alt="" /><br />
Image taken from <a href="http://photos.kahtava.com">Flickr</a></div>
<p>A sophisticated and complex social structure; Japan has roughly the same land mass as the state of California (US), with four times the population of California, but only 1/4 of Japan is inhabitable - the remainder of land is mountainous or volcanic. To compensate for the minimal space and large population the Japanese have developed a very sophisticated social structure over the past couple thousand years. This social structure is based on community and respect - giving up most respect to deceased ancestors and the elderly. Most people try to maintain harmony within their community. From my observations people shy from criticizing and most decisions must be discussed with all affected parties. Similarly many companies are still somewhat based on the <a href="http://en.wikipedia.org/wiki/Feudal_system">feudal system</a> where positions are heriditary - Presidents, CEOs, etc&#8230; are born into their respective positions rather than being selected for their experience or skills. It&#8217;s also fair to mention that most Jobs are for life - having multiple jobs is a sign of weakness - and as an employee you are expected to put the requirements of the company over any of your personal needs. A white-collar worker (<a href="http://en.wikipedia.org/wiki/Salaryman">Salaryman</a>) often works absurd hours (unproductively) due to the cultural tradition of not leaving work before colleauges, and I&#8217;ve been told that some companies even have burial grounds for their employees. In these existing structures, almost all Japanese people have a job or a distinct place within society. The introduction of the PCs and the leaps in efficiency and productivity that follow would lead to many layoffs and disruptions within these otherwise harmonious structures.</p>
<p>Links of further interest:</p>
<ul>
<li>Japanese Unicode issues: <a href="http://en.wikipedia.org/wiki/Unicode#Issues">Wikipedia: Unicode Issues</a></li>
<li><a href="http://en.wikipedia.org/wiki/Economy_of_Japan">Wikipedia: The Economy of Japan</a></li>
<li><em>&#8220;Japanese workers are renowned for working excessive hours, partly due to the cultural tradition of not leaving work before colleagues, regardless of the actual amount of work.&#8221;</em> <a href="http://news.bbc.co.uk/2/hi/business/5063670.stm">Read more&#8230;</a></li>
<li><a href="http://www.vsuccess.com/japanesecomputing.html">Japanese Computing: A Short Introduction</a></li>
<li><a href="http://www.cjmag.co.jp/magazine/issues/1995/jun95/06japos.html">Stratagies for the Japanese OS Market</a></li>
<li><a href="http://tronweb.super-nova.co.jp/characcodehist.html">A Brief History of Character Codes</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/09/07/computers-in-japan-advanced-technological-literacy-does-not-imply-computer-literacy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quality Assurance: Unit Testing: Test Driven Development (&#8221;TDD&#8221;): &#8220;Write the test first&#8221;</title>
		<link>http://adam.kahtava.com/journal/2006/07/19/quality-assurance-unit-testing-test-driven-development-tdd-write-the-test-first/</link>
		<comments>http://adam.kahtava.com/journal/2006/07/19/quality-assurance-unit-testing-test-driven-development-tdd-write-the-test-first/#comments</comments>
		<pubDate>Thu, 20 Jul 2006 02:00:29 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Quality Assurance]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,6b0c63fc-fd6b-4fe2-ad6c-c81b1e067061.aspx</guid>
		<description><![CDATA[The quality assurance (QA) activities in software development generally include: defect tracking, Unit Testing, source-code tracing, technical reviews, integration testing, and system testing. Out of these activities: Unit Testing, source-code tracing, and integration testing are informally left to the developer. Out of these three developer specific activities, Unit Testing seems to be the most overlooked [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://en.wikipedia.org/wiki/Quality_assurance">quality assurance (QA)</a> activities in software development generally include: defect tracking, <a href="http://en.wikipedia.org/wiki/Unit_testing">Unit Testing</a>, source-code tracing, technical reviews, integration testing, and system testing. Out of these activities: Unit Testing, source-code tracing, and integration testing are informally left to the developer. Out of these three developer specific activities, Unit Testing seems to be the most overlooked and misunderstood activity with the greatest potential for improving the development process (improving quality, efficiency, etc&#8230;).</p>
<blockquote><p>The procedure [for Unit Testing] is to write test cases for all functions and methods so that whenever a change causes a regression, it can be quickly identified and fixed. - <a href="http://en.wikipedia.org/wiki/Unit_testing">Wikipedia: Unit_testing</a></p></blockquote>
<p>By writing good unit tests and employing a good Unit Testing framework you can significantly improve your software development cycle. By writing unit tests you decrease your dependency on a debugger, decrease source-code tracing (debugger walkthroughs), and so on. And by employing a good Unit Testing framework you can begin to lay the scaffolding for other forms of developer specific testing (integration, system testing, and even GUI testing). Unit Testing also contributes to better documentation - if a developer doesn&#8217;t understand the purpose of a component they can now read an additional piece of documentation, the unit tests. Unit Testing and Unit Testing frameworks can bring a team of developers to the same level - the capabilities within a team vary by developer. By using the same underlying framework, by identifying general areas that always need Unit Testing we develop a heuristic approach to testing and with that, test patterns, and a new vocabulary to assist with inter developer communication - <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29">design patterns</a> accomplish a similar goal. Marc Clifton has a tutorial on <a href="http://www.codeproject.com/gen/design/autp5.asp">Unit Test Patterns</a>.</p>
<p>Unit Testing has its flaws just like any other technique or methodology - there are no silver bullets. Unit Testing is contingent on GOOD unit tests - it&#8217;s just as easy to write bad code that works, as it is to write bad unit tests that pass (work). Unit Testing won&#8217;t catch every error, but that&#8217;s the reality of writing programs, it&#8217;s also why we have a large number of software testing (QA) activities - writing software that is 100% bug free is impossible. These are just a couple issues with Unit Testing.</p>
<blockquote><p>[Test-Driven Development is] a computer programming technique that involves repeatedly first writing a test case and then implementing only the code necessary to pass the test. The goal of test-driven development is to achieve rapid feedback. - <a href="http://en.wikipedia.org/wiki/Test-driven_development">Wikipedia: Test-Driven Development</a></p></blockquote>
<p>The <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development (TDD)</a> programming technique is fundamental to many of the <a href="http://en.wikipedia.org/wiki/Agile_methodology">Agile methodologies</a> - particularly the <a href="http://en.wikipedia.org/wiki/Extreme_Programming">Extreme Programming (XP) methodology</a>. The TDD approach uses Unit Testing as a process for designing and testing software. The core idea behind TDD is to have the developer <em>&#8220;write the test first&#8221;</em> then write the code to pass the test. The technique forces the developer to <em>&#8220;thinking before acting&#8221;</em> which is really a <em>&#8220;best practice&#8221;</em> advisable for everyone - I would hope that <em>&#8220;thinking before acting&#8221;</em> is practiced informally by most experienced developers, but that&#8217;s often not the reality. Other programming techniques that revolve around the<em> &#8220;thinking before acting&#8221; </em>idea include: the Pseudocode Programming Process (PPP), and the <a href="http://en.wikipedia.org/wiki/Program_Design_Language">Program Design Language (PDL)</a> Both the PPP and the PDL have gained exposure through Steve McConnell&#8217;s book Code Complete.</p>
<p>The mature unit testing frameworks that have gained popularity through the TDD / XP community are important; unit testing through these frameworks will compliment any quality assurance plan and improve any development process.</p>
<p>For more information on Unit Testing and TDD see the following:</p>
<ul>
<li>ScottD&#8217;s Musings: <a href="http://weblogs.asp.net/scottdockendorf/archive/2004/10/06/238811.aspx">My Uber-Test-Driven Development (&#8221;TDD&#8221;) Links Listing</a></li>
<li><a href="http://www.agiledata.org/essays/tdd.html">Introduction to Test Driven Development (TDD)</a></li>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development</a></li>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/Unit_testing">Unit Testing</a></li>
<li>Marc Clifton&#8217;s Advanced Unit Testing Tutorials (See my previous post: <a href="http://adam.kahtava.com/journal/2006/07/17/quality-assurance-advanced-unit-testing-nunit/">Advanced Unit Testing: NUnit)</a></li>
<li>Kent Beck: <a href="http://www.amazon.com/gp/product/0321146530/sr=8-1/qid=1153359888/ref=pd_bbs_1/104-6645831-9321522?ie=UTF8">Test Driven Development: By Example</a> (a great book)</li>
<li>Construx: <a href="http://www.construx.com/training/courses/DeveloperTestingBC.php">Developer Testing Boot Camp</a> (a course)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/07/19/quality-assurance-unit-testing-test-driven-development-tdd-write-the-test-first/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quality Assurance: Advanced Unit Testing: NUnit</title>
		<link>http://adam.kahtava.com/journal/2006/07/17/quality-assurance-advanced-unit-testing-nunit/</link>
		<comments>http://adam.kahtava.com/journal/2006/07/17/quality-assurance-advanced-unit-testing-nunit/#comments</comments>
		<pubDate>Tue, 18 Jul 2006 06:22:05 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

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

		<category><![CDATA[Quality Assurance]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,06a8aa8f-cae2-4110-801a-5201bce3de75.aspx</guid>
		<description><![CDATA[Marc Clifton has a great five part series on Advance Unit Testing. Throughout these articles Marc builds a Unit Testing framework based on the NUnit framework - NUnit is a Unit Testing framework for Microsoft .NET, it&#8217;s very similar to the JUnit framework for Java. Marc explores Unit Testing, the interworkings of Unit Testing frameworks, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.marcclifton.com/">Marc Clifton</a> has a great five part series on Advance Unit Testing. Throughout these articles Marc builds a <a href="http://en.wikipedia.org/wiki/Unit_test">Unit Testing</a> framework based on the <a href="http://en.wikipedia.org/wiki/NUnit">NUnit</a> framework - NUnit is a Unit Testing framework for Microsoft .NET, it&#8217;s very similar to the <a href="http://en.wikipedia.org/wiki/JUnit">JUnit</a> framework for Java. Marc explores Unit Testing, the interworkings of Unit Testing frameworks, and the <a href="http://en.wikipedia.org/wiki/Extreme_Programming">XP</a> methodology.<br />
Don&#8217;t be intimidated by the number or size of these articles - most of the content is source code.</p>
<ul>
<li><a href="http://www.codeproject.com/csharp/autp1.asp">Part I:</a> Introduction to unit testing and a case study taking the XP process up to the point of writing some unit tests</li>
<li><a href="http://www.codeproject.com/csharp/autp2.asp">Part II</a>: Implementation of an NUnit look-alike and developing the case study further with real tests and real code</li>
<li><a href="http://www.codeproject.com/csharp/autp3.asp">Part III</a>: Implementation of NUnit extensions, revising and progressing with the case study</li>
<li><a href="http://www.codeproject.com/csharp/autp4.asp">Part IV</a>: Using reflection to create unit tests that are script based instead of code based, and the impact of that on the case study</li>
<li><a href="http://www.codeproject.com/gen/design/autp5.asp">Part V</a>: Unit Test Patterns</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/07/17/quality-assurance-advanced-unit-testing-nunit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Computers &#8220;merely wires and lights in a box.&#8221;</title>
		<link>http://adam.kahtava.com/journal/2006/07/10/computers-merely-wires-and-lights-in-a-box/</link>
		<comments>http://adam.kahtava.com/journal/2006/07/10/computers-merely-wires-and-lights-in-a-box/#comments</comments>
		<pubDate>Tue, 11 Jul 2006 01:01:35 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f99721c0-d358-4b59-a4fa-bb815540a67d.aspx</guid>
		<description><![CDATA[[The computer] can teach, it can illuminate; yes, and it can even inspire. But it can do so only to the extent that humans are determined to use it to those ends. Otherwise it is merely wires and lights in a box. - Edward R. Murrow 
The dwindling interest in computer related professions and the growing demand [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>[The computer] can teach, it can illuminate; yes, and it can even inspire. But it can do so only to the extent that humans are determined to use it to those ends. Otherwise it is merely wires and lights in a box. -<a href="http://www.museum.tv/archives/etv/M/htmlM/murrowedwar/murrowedwar.htm"> Edward R. Murrow </a></p></blockquote>
<p>The dwindling interest in computer related professions and the growing demand for these professionals are continually in the news. Governments, teacher associations, and corporations are all taking initiatives, but the problem - as many have pointed out - is much larger lying in a deeper social and cultural context.</p>
<p>In the 50s Edward R. Murrow gave a speech where he criticized television and radio for becoming a form of entertainment akin to show business. Like other intellectuals of the time, Murrow was concerned that the informative, and educational qualities of TV and Radio were being lost. He suggested that the shift from information to entertainment would deeply affect our future, our society, &#8220;our culture, and our heritage&#8221; (Edward R. Murrow). Now, today TV and Radio is show business (Hollywood), and computers are an entertainment medium rivaling the TV. <strong>Today the computer is facing a paradigm shift similar to the shift TV and Radio underwent in the 50s. </strong></p>
<p><strong>Computers are a form of entertainment</strong> for most of the younger generation. This younger generation (coined <a href="http://en.wikipedia.org/wiki/Generation_Y">Generation Y,</a> the <a href="http://en.wikipedia.org/wiki/Google_generation">Google Generation</a>, etc&#8230;), have been weaned on robust operating systems, complex (mostly mature) software, the internet, and a popular consciousness (pop culture) that discourages intellectual careers. Not to mention; they&#8217;ve grown up in an era of overly complex entertainment and Hollywood. Many of today&#8217;s adolescents spend hours listening to music, loading mp3 players, playing games, surfing through web logs, chatting on Instant Messengers, and so on. The underlying technologies facilitating their entertainment are often perceived as magic, like <em>&#8220;wires and lights in a box&#8221;</em> (Edward R. Murrow). Michael Bishop put it well: <em>&#8220;With the same passion that young people enjoy the music players and computer games which the industry develops, they need to realize that their own future lies in creating the software and the applications that enable those experiences.&#8221;</em> As Michael points out, we need passion for computers and technology, but in order to inspire passion we need to spark an interest, work against the popular consciousness, and so on. <img style="width: 300px; float: right;" src="http://wip.warnerbros.com/goodnightgoodluck/img/wallpapers/gngl_wall1_1024.jpg" alt="" /></p>
<p><strong>Sparking an interest</strong>; what we&#8217;ve been striving for in the software industry is now coming back to haunt us, we&#8217;ve successfully insulated the user from many of the complexities surrounding software. We&#8217;ve been so successful in abstracted and layered our systems that no one really sees what goes on beneath and as a result most people don&#8217;t care. Perhaps the passion for computing and technology could be rekindled if every adolescent were required to use applications like mIRC rather than programs like MSN. mIRC (as many know) is a simple chat application that gently exposes the complexities of the internet, and the world of programming  / scripting.</p>
<p>It&#8217;s encouraging to see initiative being taken by corporations, teachers, and governments. I think the most successful initiatives will be at the grassroots level; professionals talking with adolescents, parents (computer professionals) inspiring their children and extended family.</p>
<p>Anyhow; these thoughts are somewhat incomplete and were initially inspired by the movie <a href="http://wip.warnerbros.com/goodnightgoodluck/index1.html">&#8220;Good Night, And Good Luck&#8221;</a> - a film depicting <a href="http://www.museum.tv/archives/etv/M/htmlM/murrowedwar/murrowedwar.htm">Edward R. Murrow</a>.<br />
It&#8217;s an excellent movie.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/07/10/computers-merely-wires-and-lights-in-a-box/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;The only thing consistent about the software industry is inconsistency&#8221;</title>
		<link>http://adam.kahtava.com/journal/2006/06/19/the-only-thing-consistent-about-the-software-industry-is-inconsistency/</link>
		<comments>http://adam.kahtava.com/journal/2006/06/19/the-only-thing-consistent-about-the-software-industry-is-inconsistency/#comments</comments>
		<pubDate>Tue, 20 Jun 2006 06:44:52 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,422be882-5cb4-45ae-ae4d-859aa3990c7d.aspx</guid>
		<description><![CDATA[&#8220;The only thing consistent about the software industry is inconsistency&#8221;; I believe this is a derivation of Horace Smith&#39;s original quote: &#8220;Inconsistency is the only thing in which men are consistent&#8221;. 
 The inconsistent nature of the software industry becomes so repetitious that it eventually becomes consistent. Popular languages, databases, technologies, methodologies, paradigms, and hyped [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;The only thing consistent about the software industry is inconsistency&#8221;; I believe this is a derivation of Horace Smith&#39;s original quote: &#8220;Inconsistency is the only thing in which men are consistent&#8221;. </p>
<p> The inconsistent nature of the software industry becomes so repetitious that it eventually becomes consistent. Popular languages, databases, technologies, methodologies, paradigms, and hyped products are always shifting - it&#39;s been called innovation, evolution, and many other things.</p>
<p> This statement can be applied to any subject and I recall first hearing it while employed as a private contractor the phrase was something like: &#8220;The only thing consistent about the contracting industry is inconsistency&#8221;.  <br /> <hints id="hah_hints"> </hints></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/06/19/the-only-thing-consistent-about-the-software-industry-is-inconsistency/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Sapir_Whorf hypothesis: Code Complete / Wikipedia</title>
		<link>http://adam.kahtava.com/journal/2006/06/07/the-sapirwhorf-hypothesis-code-complete-wikipedia/</link>
		<comments>http://adam.kahtava.com/journal/2006/06/07/the-sapirwhorf-hypothesis-code-complete-wikipedia/#comments</comments>
		<pubDate>Thu, 08 Jun 2006 06:46:47 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[Musings]]></category>

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,59f059c5-49de-4d75-b627-3a512fc1910d.aspx</guid>
		<description><![CDATA[The Sapir-Whorf hypothesis says that your ability to think a thought depends on knowing words capable of expressing the thought. If you don&#8217;t know the words, you can&#8217;t express the thought, and you might not even be able to formulate it (Whorf 1956). - (Steve McConnell, Code Complete 2nd Edition)

As McConnell pointed out, this hypothesis applies [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The Sapir-Whorf hypothesis says that your ability to think a thought depends on knowing words capable of expressing the thought. If you don&#8217;t know the words, you can&#8217;t express the thought, and you might not even be able to formulate it (Whorf 1956). - (Steve McConnell, Code Complete 2nd Edition)</p></blockquote>
<div class="itemBody">
<p>As McConnell pointed out, this hypothesis applies nicely to the Software Engineering realm. Your ability to be a successful Software Engineer depends on your Software Engineering vocabulary (Metaphors, Abstractions, Design Patterns, Programming Languages, and so on). <em>&#8220;If you don&#8217;t know the&#8221;</em> concepts you certainly won&#8217;t be able to express a coherent / feasible solution, <em>&#8220;and you might not even be able to formulate&#8221;</em> any solution at all.</p>
<p>The original Sapir_Whorf hypothesis:</p>
<blockquote><p>We dissect nature along lines laid down by our native languages. The categories and types that we isolate from the world of phenomena we do not find there because they stare every observer in the face; on the contrary, the world is presented in a kaleidoscopic flux of impressions which has to be organized by our minds-and this means largely by the linguistic systems in our minds. We cut nature up, organize it into concepts, and ascribe significances as we do, largely because we are parties to an agreement to organize it in this way - an agreement that holds throughout our speech community and is codified in the patterns of our language&#8230; all observers are not led by the same physical evidence to the same picture of the universe, unless their linguistic backgrounds are similar, or can in some way be calibrated.   - (Sapir_Whorf. Language, Thought and Reality pp. 212_214).</p></blockquote>
<p>Read more <a href="http://en.wikipedia.org/wiki/Sapir–Whorf_hypothesis">here (Wikipedia)</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/06/07/the-sapirwhorf-hypothesis-code-complete-wikipedia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Journals / blogs / weblogs for ASP.NET 2.0</title>
		<link>http://adam.kahtava.com/journal/2006/05/31/journals-blogs-weblogs-for-aspnet-20/</link>
		<comments>http://adam.kahtava.com/journal/2006/05/31/journals-blogs-weblogs-for-aspnet-20/#comments</comments>
		<pubDate>Thu, 01 Jun 2006 06:50:21 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[ASP.NET]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,6d5d7efb-3918-415d-8944-fff4815cd079.aspx</guid>
		<description><![CDATA[My brief search for an economical (ASP.NET 2.0) journal (weblog) revealed a couple popular options: dasBlog, Community Server 2.0, Drupal, and .Text.
Community Server 2.0 had a couple flavors ranging from: a free (restricted) Express edition, through to an Enterprise edition.
After struggling with Community Server documentation and already being weary of &#8220;free&#8221; editions - as they [...]]]></description>
			<content:encoded><![CDATA[<p>My brief search for an economical (ASP.NET 2.0) journal (weblog) revealed a couple popular options: <a href="http://www.dasblog.info/">dasBlog</a>, <a href="http://communityserver.com/">Community Server 2.0</a>, <a href="http://drupal.org/">Drupal</a>, and .Text.</p>
<p>Community Server 2.0 had a couple flavors ranging from: a free (restricted) Express edition, through to an Enterprise edition.<br />
After struggling with Community Server documentation and already being weary of &#8220;free&#8221; editions - as they usually have a catch somewhere - I moved onto the next option.</p>
<p>dasBlog a free, BSD-licensed weblog engine for the .NET Framework. I downloaded compiled and installed dasBlog, it worked, and met my requirements . Now - thanks to the dasBlog contributors - I can move on.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/05/31/journals-blogs-weblogs-for-aspnet-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The ASP.NET 2.0 Global Application Class, Access Routines and the Global.asax file.</title>
		<link>http://adam.kahtava.com/journal/2006/05/30/the-aspnet-20-global-application-class-access-routines-and-the-globalasax-file/</link>
		<comments>http://adam.kahtava.com/journal/2006/05/30/the-aspnet-20-global-application-class-access-routines-and-the-globalasax-file/#comments</comments>
		<pubDate>Wed, 31 May 2006 06:52:27 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

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

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b822b32c-c76b-4bc4-9f77-bfa73d045a74.aspx</guid>
		<description><![CDATA[The Global Application Class has changed in ASP.NET 2.0. When adding a Global Application Class to a project, Visual Studio no longer generates a code-behind file.

 The result as Ross Nelson points out is two fold: there is no class in the Global.asax, and without the class there is no &#8220;easy&#8221; way to reference Global [...]]]></description>
			<content:encoded><![CDATA[<p>The Global Application Class has changed in ASP.NET 2.0. When adding a Global Application Class to a project, Visual Studio no longer generates a code-behind file.
<div class="itemBody">
<p> The result as <a href="http://rossnelson.blogspot.com">Ross Nelson</a> points out is two fold: there is no class in the Global.asax, and without the class there is no &#8220;easy&#8221; way to reference Global routines / objects. </p>
<p> I&#39;ve long been a fan of wrapping application globals into Access Routines, creating one static instance of the class, then accessing these routines through the Global class. </p>
<p> Ross has an excellent solution to this problem: <a href="http://rossnelson.blogspot.com/2005/11/fixing-globalasax-in-aspnet-20.html">(Fixing the Global.asax in ASP.NET 2.0)</a>.</p></div>
<p> For a summarized (distilled) version of Ross&#39;s article view: <a href="http://adam.kahtava.com/journal/2006/06/20/distilled-fixing-the-globalasax-in-aspnet-20/">Distilled: Fixing the Global.asax in ASP.NET 2.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/05/30/the-aspnet-20-global-application-class-access-routines-and-the-globalasax-file/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
