<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Becoming A Better Developer</title>
        <link>http://geekswithblogs.net/coredump/category/6973.aspx</link>
        <description>Becoming A Better Developer</description>
        <language>en-US</language>
        <copyright>Russell Ball</copyright>
        <managingEditor>rt_ball@yahoo.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Are You Mocking My Code?</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/12/19/117831.aspx</link>
            <description>&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;I've been playing around with mock objects using Rhino.Mocks for the last few months, but today was the first time that I had an unfettered coding win and became a true convert. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;I was introduced to NUnit about five years ago from a co-worker (thanks Dewayne) and gradually became a true &lt;/font&gt;&lt;font size="2"&gt;&lt;img width="251" vspace="10" hspace="10" height="166" align="right" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/58880aca9487_1547/image.png" alt="" /&gt;&lt;/font&gt;&lt;font size="2"&gt;believer. Unfortunately, I was a late-bloomer in the area of mocking, so by the time I finished my last big project I had left a suite of about 500 database driven tests that took almost 2 hours to run and were a maintenance nightmare. The vast majority of my unit testing efforts revolved around SQL initialization and cleanup scripts that massaged the database into just the state I needed for each tests case scenario. &lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;Although this approach definitely made me a wizard when it came debugging data-related production issue quickly, it was too high of price to pay for the benefits I was receiving. Although I remember thinking in the beginning that this "realistic" approach to testing was much more valuable than the "fake" tests that didn't hit the database, by the end of the process I was no longer so sure. I still believed in the value of unit testing, but I knew there had to be a better way of doing it. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;During my stint as an architect, I read enough about mocking to know that it was a good idea in theory, but of course I had little opportunity to put that theory to the test. Now that I am a code monkey again, I can say with certainty that mocking is an absolutely essential aspect of Test Driven Development and not simply a "nice-to have" supplemental activity like I assumed before.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;strong&gt;Why is Mocking Critical?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ol style="font-family: Arial;"&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;It makes debugging easier - &lt;/strong&gt;When a database driven test fails, the problem could be anywhere and in my experience it is most often related to a problem with the initialization script (i.e. accidental order-based test dependencies). This often led me to ignore test failures when I was pressed for time because I knew that it was likely just another false alarm. However, when a test that uses mock objects fails, I am not only fairly certain that it is a problem with the code rather than the test, but I also know exactly where the problem is because I've guaranteed the behavior of every piece of code except the part that I am trying to test. &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;It makes writing tests faster and easier&lt;/strong&gt; - One of the biggest barriers to adoption for TDD for most developers continues to be the perception that it takes too long. I can give a dozen reasons why that perception is wrong, but in the end I think it is more productive to simply find ways to shorten that process. That is exactly what mocking does. Writing out a series of Expect.Call() statements is an order of magnitude faster than trying to write data manipulation statements.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;It makes tests execute faster -&lt;/strong&gt; Don't underestimate the power of fast feedback. Even if you are not a die-hard continuous integration practitioner, you have to admit that the longer your tests take to run the less likely you and other developers will be to actually run them. Even if you do religiously run them at night, the longer feedback cycle dramatically decreases one of the main benefits of TDD, which is the increased coding speed that comes from test-backed confidence and not having to waste time on excessive analysis and fretting about possible unknown collateral damaged. &lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;strong&gt;What does Mocking Require?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ol style="font-family: Arial;"&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;Interface Based Programming&lt;/strong&gt; - If you use Rhino.Mocks, then every class that you mock must implement an interface. With the help of ReSharper, interfaces can be created from an existing class and propagated to the rest of your codebase with just a few keystrokes. This alone makes the price of ReSharper worth it if you are going to start using mocking in a Legacy system that was designed without using interfaces. &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;Dependency Injection&lt;/strong&gt; - One of the first stumbling blocks I ran into came from complex collaborations from objects that weren't able to be mocked because they were created inside of methods. You can quickly get around this with a little refactoring by making collaborating objects private member variables and then adding a constructor overload to expose them during testing. It is usually a relatively fast and low-risk design change to make.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;Identifying Code Seams&lt;/strong&gt; - If you find yourself getting frustrated and beginning to think that you are stuck in a code base that is impossible to mock, then stop and read the book &lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052"&gt;Working Effectively With Legacy Code&lt;/a&gt; by Michael Feathers. I'm about a quarter of the way through this right now and it is one of the most helpful tech books I've ever read. The author is fearless and infinitely resourceful when it comes to getting code of any language and any quality under test. In fact, many of his examples are in C++ and even C, so that means that you have no excuses when it comes to your own project. He gives lots of practical advice on how to find the "seams", which are the easiest and most cost-effective places to modify code so that you can begin to mock it.&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;strong&gt;A Practical Example?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;Here is an MbUnit test that I wrote today before I tackled a production bug that was assigned to me. It mocks the IPaymentTypeItem, which has read-only properties and thus is normally only allowed to be populated from the database. The Expect.Calls() are just done for the methods and properties calls that are actually made on the object in the piece of code I am testing. You can get a full tutorial with better explanations of the API calls &lt;a href="http://ayende.com/projects/rhino-mocks.aspx"&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;div style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; font-size: 8pt; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: Arial; background-color: rgb(244, 244, 244);"&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; [RowTest]&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt; [Row(&lt;span style="color: rgb(0, 96, 128);"&gt;"%B409999999999999^Russ's Coffee Emporium^09011211000019900000000?;"&lt;/span&gt;,&lt;span style="color: rgb(0, 96, 128);"&gt;"409999999999999"&lt;/span&gt;)]&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt; [Row(&lt;span style="color: rgb(0, 96, 128);"&gt;";4409999999999999=090112110000199?"&lt;/span&gt;,&lt;span style="color: rgb(0, 96, 128);"&gt;"409999999999999"&lt;/span&gt;)]            &lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Should_Load_Correctly_With_Partial_Track(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; trackData, &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; expCardNumber)&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt; {&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;     MockRepository mocks = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; MockRepository();&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     IPaymentTypeItem payment = (IPaymentTypeItem) mocks.DynamicMock(&lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt; (IPaymentTypeItem));&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;     Expect.Call(payment.BinFirstDigit).Return(expCardNumber.substring(0,1));&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt;     Expect.Call(payment.IsCreditCard).Return(&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;);&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  10:&lt;/span&gt;     Expect.Call(payment.PaymentTypeValue).Return(PaymentType.VisaCard);&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  11:&lt;/span&gt;     mocks.ReplayAll();&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  12:&lt;/span&gt;     FinancialCardEncoding encoding = FinancialCardEncoding.CreateCardEncoding(trackData,payment,&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;);                &lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  13:&lt;/span&gt;     Assert.AreEqual(0,encoding.Errors.Count);&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  14:&lt;/span&gt;     Assert.AreEqual(expCardNumber,encoding.PrimaryAccountNumber);&lt;/font&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; background-color: white;"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  15:&lt;/span&gt;     mocks.VerifyAll();&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;Rhino.Mocks is certainly not the only mocking framework out there, but so far I like it because it takes a strongly typed approach rather than relying on strings which means I get to use intellisense. Whatever framework you do choose, I highly recommend that you take the time to learn it well and incorporate it thoroughly into your development as soon as possible.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117831"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117831" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/117831.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/12/19/117831.aspx</guid>
            <pubDate>Wed, 19 Dec 2007 06:12:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/117831.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/12/19/117831.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/117831.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/117831.aspx</trackback:ping>
        </item>
        <item>
            <title>Where Do Experts Come From?</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx</link>
            <description>&lt;font size="2" style="font-family: Arial;"&gt;&lt;span style="font-size: 9pt; color: rgb(51, 48, 45);"&gt;Don't get excited. This is not a geek version of the "Birds and the Bees" talk. &lt;br /&gt;
&lt;br /&gt;
I just finished reading another excellent scientific paper called &lt;a href="http://scientificamerican.com/article.cfm?articleID=00010347-101C-14C1-8F9E83414B7F4945"&gt;The Expert Mind&lt;/a&gt;, which I discovered through one of &lt;a href="http://codebetter.com/blogs/jean-paul_boodhoo/archive/2007/11/16/the-expert-mind.aspx"&gt;Jean-Paul Boodhoo's posts&lt;/a&gt;. The article examines the question of whether experts are born or made and offers some interesting insights into what it means to be an expert and the best ways to become one.&lt;br /&gt;
&lt;br /&gt;
As you probably guessed from my recent &lt;a href="http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx"&gt;"Is that Juice On Your Face?"&lt;/a&gt; post, I am fascinated by the question of competence and what leads some people to attain it while others, like the Juice Bank Robber,  ...well...er...don't attain it. &lt;span style="font-weight: bold;"&gt;I often marvel at how some developers who are relatively inexperienced and have only average intelligence are able to attain a high level of knowledge and expertise that surpasses battle-worn industry veterans and off-the-chart mensa types&lt;/span&gt;. This article not only attempts to explain this mystery, but it does so through one of&lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/29/115717.aspx"&gt; my favorite hobbies, Chess&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;img vspace="10" hspace="10" align="right" alt="" src="http://farm3.static.flickr.com/2308/2064376503_717f437d1c.jpg?v=0" /&gt;If you've ever seen exhibitions by Grand-Masters who play against scores of opponents simultaneously while blind-folded, it is easy to dismiss such people as talented freaks of nature with computer-like powers of analysis and photographic memories rather than view them as merely experts in their field who have trained themselves through long and intense study. &lt;br /&gt;
&lt;br /&gt;
However, recent studies show that chess masters have only average&lt;/span&gt;&lt;span style="font-size: 9pt;"&gt; abilities when it comes to memory and visual-spatial analysis. For example, despite having almost perfect recall for board positions related to actual games&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: rgb(51, 48, 45);"&gt;, the recall of grand masters turned out to be no better than average players when the pieces were arranged randomly on the board in unrealistic scenarios.&lt;br /&gt;
&lt;br /&gt;
Based on evidence like this, the authors conclude that &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;experts rely not so much on an intrinsically stronger power of analysis as on a store of structured knowledge, which takes an enormous amount of time and effort to attain&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;What appears to make much more difference than experience or talent is what the authors call &lt;span style="font-weight: bold;"&gt;"effortful study", which entails continually tackling challenges that lie just beyond one's competence.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font size="2"&gt;It turns out that what differentiates an expert from a novice isn't that experts alone know how to engage in effortful study, but it is that experts continue to utilize this technique long after a novice stops. &lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt; &lt;/font&gt;
&lt;div style="margin-left: 40px; font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;font size="2" style="font-style: italic;"&gt;Even the novice engages in effortful study at first, which is why beginners so often improve rapidly in playing golf, say, or in driving a car. But having reached an acceptable performance--for instance, keeping up with one's golf buddies or passing a driver's exam--most people relax. Their performance then becomes automatic and therefore impervious to further improvement. In contrast, experts-in-training keep the lid of their mind's box open all the time, so that they can inspect, criticize and augment its contents and thereby approach the standard set by leaders in their fields.&lt;/font&gt;&lt;br /&gt;
&lt;font size="2"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;font size="2" style="font-family: Arial;"&gt;&lt;font size="2"&gt;Thus it appears that &lt;strong&gt;motivation is a more important factor than innate ability in  the development of expertise&lt;/strong&gt;. If you truly want to become an expert, then you have to resist the pull of complacency and constantly approach your field with the same passion, curiosity, and effortful study that you did when you first started.&lt;br /&gt;
&lt;br /&gt;
So if being an expert appeals to you (which it probably does if you're bothering to read professional blogs), then you have to start by asking yourself one question. &lt;strong&gt;Can you honestly say that you are still improving rapidly because you approach software development with "effortful study" or is your progress occurring at a snail's pace because you are stuck in that complacent stage?&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;a href="http://programming.reddit.com/submit?url=http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx&amp;amp;title=Where+Do+Experts+Come+From%3F%0D%0A"&gt;&lt;img alt="add to Reddit" src="http://webhelperbrowser.com/i/reddit.gif" /&gt;&lt;/a&gt; &lt;a href="http://digg.com/submit?phase=2&amp;amp;url=http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx"&gt;&lt;img alt="digg it" src="http://webhelperbrowser.com/i/digg.gif" /&gt;&lt;/a&gt; &lt;a href="http://del.icio.us/post?url=http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx&amp;amp;title=Where+Do+Experts+Come+From%3F%0D%0A"&gt;&lt;img alt="add to del.icio.us" src="http://webhelperbrowser.com/i/delicious.gif" /&gt;&lt;/a&gt; &lt;a href="http://technorati.com/faves?sub=addfavbtn&amp;amp;add=http://geekswithblogs.net/coredump"&gt;&lt;img src="http://static.technorati.com/pix/fave/btn-fave2.png" alt="Add to Technorati Favorites" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117112"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117112" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/117112.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx</guid>
            <pubDate>Mon, 26 Nov 2007 05:45:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/117112.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/11/25/117112.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/117112.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/117112.aspx</trackback:ping>
        </item>
        <item>
            <title>Is That Juice On Your Face?</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx</link>
            <description>&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;A psychology study entitled  &lt;/span&gt;&lt;a style="font-family: Arial;" href="http://www.apa.org/journals/features/psp7761121.pdf"&gt;Unskilled And Unaware of It: How Difficulties in Recognizing One's Own Incompetence Leads To Inflated Self-Assessments&lt;/a&gt;&lt;span style="font-family: Arial;"&gt; opens with the following amusing anecdote:&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;/font&gt;
&lt;div style="margin-left: 40px; font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;span style="font-style: italic;"&gt;In 1995, McArthur Wheeler walked into two Pittsburgh banks&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;and robbed them in broad daylight, with no visible attempt at&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;disguise. He was arrested later that night, less than an hour after&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;videotapes of him taken from surveillance cameras were broadcast&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;on the 11 o'clock news. When police later showed him the surveillance&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;tapes, Mr. Wheeler stared in incredulity. "But I wore the&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;juice," he mumbled. Apparently, Mr. Wheeler was under the&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;impression that rubbing one's face with lemon juice rendered it&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;invisible to videotape cameras (Fuocco, 1996).&lt;/span&gt;&lt;br /&gt;
&lt;/font&gt;         &lt;/div&gt;
&lt;font size="2"&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; The paper then goes on to describe the results of four studies which led researchers to conclude the following:&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;/font&gt;
&lt;ol style="font-family: Arial;"&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;span style="font-weight: bold;"&gt;Incompetent people will tend to grossly overestimate their skills and abilities. &lt;/span&gt;A part of the study, the subjects were given various tests and then asked to predict their scores and relative rankings. People in the bottom quartile overestimated their performance by an average of 45-50% while people in the top quartile actually underestimated their skills.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;span style="font-weight: bold;"&gt;Incompetent individuals fail to gain insight into their own incompetence by observing the behavior of other people&lt;/span&gt;. After being allowed to review the test results of their peers, the estimates of the bottom quartile actually worsened while the estimates of the top quartile improved. This led researches to conclude that the mis-calibration of the incompetent stems from an error about the self, whereas the mis-calibration of the highly competent stems from an error about others.&lt;br /&gt;
    &lt;/font&gt;     &lt;/li&gt;
    &lt;li style="font-weight: bold;"&gt;&lt;font size="2"&gt;The way to make incompetent individuals realize their own incompetence is to make them competent. &lt;span style="font-weight: normal;"&gt;In the last study, researches found that the estimation skills of the bottom quartile dramatically improved if they were given training in the domain knowledge of the test. Not only did their scores improve, but they finally became aware of their short-comings relative to their peers and revised their prior estimates downward.&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;This leads me to the following thoughts:&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;/font&gt;
&lt;ol style="font-family: Arial;"&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;span style="font-weight: bold;"&gt;If you really did have juice on your face, you're probably wouldn't know it.&lt;/span&gt; This is a sobering thought. As Darwin said, "&lt;span style="font-style: italic;"&gt;ignorance more frequently begets confidence than does knowledge&lt;/span&gt;"&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;In other words, if you are feeling particularly confident, then it is a good sign that you have some more learning to do.&lt;br /&gt;
    &lt;/font&gt;     &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;&lt;span style="font-weight: bold;"&gt;The best way to ensure there is not juice on your face is to constantly seek feedback and learn: &lt;/span&gt;I like to think of this as a Continuous Integration for the mind. In order to become competent, I need to constantly feed new ideas and skills to my mental compiler and then unit-test them through rigorous community and peer feedback. &lt;br /&gt;
    &lt;/font&gt;     &lt;/li&gt;
&lt;/ol&gt;
&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt; As a side observation, I couldn't help but be impressed with the rigor with which these studies were conducted. It made me realize that there is a close correlation between proving a scientific hypothesis and debugging software. It is one thing to think you know the cause of an observed phenomena or an erratic, opaque bug, but it takes carefully planned and executed tests in order to adequately prove it.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-weight: bold; font-family: Arial;"&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p&gt; &lt;a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?t=Is+That+Juice+On+Your+Face%3F&amp;amp;u=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx"&gt;&lt;img alt="add to YahooMyWeb" src="http://webhelperbrowser.com/i/yahooMyWeb.gif" /&gt;&lt;/a&gt; &lt;a href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://geekswithblogs.net/coredump/archive2007/11/20/116982.aspx&amp;amp;new_comment=Is+That+Juice+On+Your+Face%3F&amp;amp;new_link_other=webhelperbrowser.com&amp;amp;linktype=Science/Technology"&gt;&lt;img alt="add to Fark" src="http://webhelperbrowser.com/i/fark.gif" /&gt;&lt;/a&gt; &lt;a href="http://reddit.com/submit?url=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx&amp;amp;title=Is+That+Juice+On+Your+Face%3F"&gt;&lt;img alt="add to Reddit" src="http://webhelperbrowser.com/i/reddit.gif" /&gt;&lt;/a&gt; &lt;a href="http://www.furl.net/storeIt.jsp?t=Is+That+Juice+On+Your+Face%3F&amp;amp;u=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx"&gt;&lt;img alt="add to Furl" src="http://webhelperbrowser.com/i/furl.gif" /&gt;&lt;/a&gt; &lt;a href="http://www.blinklist.com/index.php?action=Blink/addblink.php&amp;amp;Description=Is+That+Juice+On+Your+Face%3F&amp;amp;Url=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx&amp;amp;Title=Is+That+Juice+On+Your+Face%3F"&gt;&lt;img alt="add to blinklist" src="http://webhelperbrowser.com/i/blinklist.gif" /&gt;&lt;/a&gt; &lt;a href="http://digg.com/submit?phase=2&amp;amp;url=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx"&gt;&lt;img alt="digg it" src="http://webhelperbrowser.com/i/digg.gif" /&gt;&lt;/a&gt; &lt;a href="http://del.icio.us/post?url=http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx&amp;amp;title=Is+That+Juice+On+Your+Face%3F"&gt;&lt;img alt="add to del.icio.us" src="http://webhelperbrowser.com/i/delicious.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116982"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116982" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/116982.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx</guid>
            <pubDate>Tue, 20 Nov 2007 06:42:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/116982.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/11/20/116982.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/116982.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/116982.aspx</trackback:ping>
        </item>
        <item>
            <title>Still an Open Source Virgin</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/11/06/116639.aspx</link>
            <description>&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;I was setting up Cruise Control the other day and trying to figure out why it wasn't working on a certain source control folder. I noticed a strange error in the cruise control log about there being an invalid character in the path, so I decided to take advantage of the fact that it is an open source project and download the source code so I could step through it in the debugger and see what the exact problem was. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;It wasn't long before I discovered the source of the error, which was a newline character embedded in the source control folder name. Since I am a vocal Visual Source Safe hater, I naturally assumed that the problem had to do with VSS data being corrupted so I scheduled some VSS maintenance and called it a day.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;img vspace="10" hspace="10" alt="" src="http://farm3.static.flickr.com/2153/1876577543_72bb52ec53.jpg?v=0" style="font-family: Arial;" /&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;When VSS analyzer did not fix the problem, I took a closer look and realized that I had unfairly blamed VSS and the real problem was a bug in the Cruise Control code that parses out the output from the VSS command line tool (thank god PowerShell eliminates the need for much of this parsing voodoo). If the folder path in VSS is too long, then the command output wraps and Cruise Control incorrectly inserts a newline character inside the folder path.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;The problem was easy enough to fix by stripping out the rogue newline character, so I recompiled Cruise Control, replaced the problem dll, and all was well in the world.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;At that point, it occurred to me that other people must be running into this problem, so I decided to try being a good open source citizen for once and submit the bug fix. I had never tried this before, so I read the &lt;/span&gt;&lt;a href="http://cruisecontrol.sourceforge.net/contributions.html" style="font-family: Arial;"&gt;contribution procedures&lt;/a&gt;&lt;span style="font-family: Arial;"&gt; posted on the home page and followed their polite suggestions. I created a diff file of my fix, wrote up a detailed description of the problem, and even found a unit test that someone had commented out that failed under the current code base and worked with my fix.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;I was just about ready to submit a JIRA ticket in their &lt;/span&gt;&lt;a href="http://jira.public.thoughtworks.org/browse/CC" style="font-family: Arial;"&gt;bug tracking system&lt;/a&gt;&lt;span style="font-family: Arial;"&gt;, when it occurred to me that I should probably browse the current VSS tickets first. It turns out that my issue was not only recorded in the system, but had just been marked as resolved by someone else the week before. Doh! I guess I should have tried that first, huh?&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;img vspace="10" hspace="10" src="http://farm3.static.flickr.com/2296/1877474870_1f41ab6666.jpg?v=0" alt="" style="font-family: Arial;" /&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;Oh well, at least I got practice going through the procedure for being an open source contributor. There are still an lots of open tickets for the current Cruise Control release, so perhaps I'll grab one of them while I have everything already set up. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt;After all, I don't want to be an open source virgin forever.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116639"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116639" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/116639.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/11/06/116639.aspx</guid>
            <pubDate>Tue, 06 Nov 2007 14:10:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/116639.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/11/06/116639.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/116639.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/116639.aspx</trackback:ping>
        </item>
        <item>
            <title>Hello, My Name is Russell Ball and I'm a Goaloholic</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/11/05/116588.aspx</link>
            <description>&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;I seem to have kicked into a professional goal setting mode lately and fixated on a number of ambitious goals, such as publishing technical articles, speaking at major conferences, and creating my own version 1.0 software. Although I feel invigorated by the challenge posed by these new goals, I also have the nagging feeling that I am making a mistake by going down this road. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; Don't get me wrong, it is not that I am morally opposed to having goals. On the contrary, my personality thrives on them. I get a thrill from breaking my own self-imposed boundaries whenever I latch on to goals that seem well out of my reach. I like strategically planning out how to achieve a goal and then carefully charting my progress towards the finish line. The satisfaction I feel right after accomplishing a goal is down right addictive. Mostly, I suppose that I like the structure that having goals provides my life. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; Unfortunately, I have been on the achievement roller coaster enough times in my life to realize that the psychological rush that follows attaining a goal is relatively fleeting compared with the sense of disappointment that usually follows. I often cope with this uncomfortable feeling by immediately distracting myself with an even more challenging goal. Sometimes, however, I fall prey to a deep sense of disillusionment and can't help feeling like I have just wasted precious time valuing something that ultimately doesn't matter.&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; So what is a goaloholic like me supposed to do? &lt;br /&gt;
&lt;br /&gt;
It is not as simple as going cold turkey. Whenever I try to swear off goals, I usually get bored and nagged by the feeling that I am wasting my potential and dulling my senses. This somehow feels like an even worse sin than my goal addiction, so I inevitably get back on the goal bandwagon. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; Is there no middle ground between these two extremes?&lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; The one thing that does seem to help me in times like this is to remember back to a lecture that I heard in college on &lt;/span&gt;&lt;a style="font-family: Arial;" href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;flow&lt;/a&gt;&lt;span style="font-family: Arial;"&gt;. Flow is a mental state of hyper concentration that highly skilled individuals who are doing highly challenging work can attain. Athletes sometimes refer to this mental state as being 'in the zone'. &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; When you are experiencing flow, then you are so absorbed in the task at hand that you get a distorted sense of time so that you are likely to suddenly look up from what you are doing and be surprised that hours rather than minutes have passed. &lt;br /&gt;
&lt;br /&gt;
When you experience flow, the activity itself is intrinsically rewarding, so your actions seem effortless. This zen-like &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;focus on the present moment offers a stark contrast to the darker side of achievement, where the focus is completely future oriented and on the end result rather than the process. &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt; &lt;/span&gt;&lt;br style="font-family: Arial;" /&gt;
&lt;br style="font-family: Arial;" /&gt;
&lt;span style="font-family: Arial;"&gt; I occasionally experience flow while programming, but would like to experience it much more frequently. &lt;br /&gt;
&lt;br /&gt;
Ironically, since a prerequisite for experiencing flow is both a high degree of skill and a high degree of challenge, most of my current goals can actually help me achieve this coveted mental state. However, elevating the experience of flow over the achievement of goals somehow makes my goals seem much more palatable. They are now merely laying the groundwork for a more substantive and longer lasting experience rather than being the ultimate prize.&lt;br /&gt;
&lt;br /&gt;
Has anyone else experienced flow? Has this experience been substantive enough for you to be a primary motivating force in working towards excellence or are there other more compelling reasons that drive you to excel?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Preemptive P.S&lt;/span&gt;. - While having women swoon and throw panties at you is certainly a compelling and motivating force, it is probably not a legitimate expectation for anyone other than &lt;a href="http://graysmatter.codivation.com/"&gt;Justice Gray&lt;/a&gt;.&lt;br style="font-family: Arial;" /&gt;
&lt;/span&gt; &lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116588"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116588" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/116588.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/11/05/116588.aspx</guid>
            <pubDate>Mon, 05 Nov 2007 06:00:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/116588.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/11/05/116588.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/116588.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/116588.aspx</trackback:ping>
        </item>
        <item>
            <title>Two Month Progress Report on Being a Better Developer</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/09/19/115453.aspx</link>
            <description>&lt;font size="2"&gt;&lt;span style="font-family: Arial;"&gt;It's been two months since I set out on my &lt;/span&gt;&lt;a href="http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx" style="font-family: Arial;"&gt;6 month self-improvement plan&lt;/a&gt;&lt;span style="font-family: Arial;"&gt; to being a better developer. During my last &lt;/span&gt;&lt;a href="http://geekswithblogs.net/coredump/archive/2007/08/14/114673.aspx" style="font-family: Arial;"&gt;one month update&lt;/a&gt;&lt;span style="font-family: Arial;"&gt;, I set out some specific goals for month two that involved learning about Resharper, NDepend, F#, the Windsor Container, and the ROTOR codebase and then writing some blog posts about my efforts. How did I do this last month? &lt;/span&gt;&lt;/font&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;First, I accomplished one major thing that wasn't even on my radar screen when I came up with my goal list. I &lt;a href="http://geekswithblogs.net/coredump/archive/2007/08/28/115040.aspx"&gt;resigned my position as an architect&lt;/a&gt; and took a job closer to home as a &lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/11/115266.aspx"&gt;C# developer&lt;/a&gt;. I think it finally occurred to me that if I was on the right career path, then I would have written a post about being a better architect rather than one about being a better developer. Certainly, the most important step to becoming a better developer is to actually spend the majority of your time developing, which was something I was doing less and less of at my old job. I also think that it is important to challenge your biases by periodically exposing yourself to new languages, processes, and problem domains. In that sense, I think my decision to leave my comfort zone in a VB.NET shop in the banking industry and switch to a C# shop in the retail industry will do more to make me a better developer than all my original goals put together. That being said, how many of my original goals did I manage to accomplish? &lt;br /&gt;
&lt;/font&gt; &lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;I do feel pretty good about the amount of time I spent on my tool goals this month. With Resharper, I actually took the bold step of shelling out my own money for a personal license so that I could use it at home and on my new job (ok, I was spoiled as far as licensing goes in my old job). I also wrote a few posts sharing some learning resources I used, expressing my desire to be a &lt;a href="http://geekswithblogs.net/coredump/archive/2007/08/30/115079.aspx"&gt;Resharper Jedi&lt;/a&gt;, and singing the praises of the &lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/10/115259.aspx"&gt;unit test runner&lt;/a&gt;. For NDepend, I mused on its proper place in the ever &lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/17/115409.aspx"&gt;elusive quest for code quality&lt;/a&gt;, shared my experiences with &lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/18/115428.aspx"&gt;analyzing WatiN&lt;/a&gt;, and explained some of the basics of CQL. &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;I also made satisfactory progress on my code reading goal, although I didn't do it with ROTOR like I originally planned. I did actually download ROTOR, but once I realized that the codebase was in C++ and thought about the fact that I should probably be spending my time looking at C# code because of my new job, I opted to spend time digging into WatiN instead. I wrote some general thoughts on &lt;a href="http://geekswithblogs.net/coredump/archive/2007/09/06/115181.aspx"&gt;exploring a new code base&lt;/a&gt; and shared some setup notes that gave me trouble when first trying to build the project.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;&lt;img width="100" height="125" align="right" src="http://www.manning.com/black/black_cover150.jpg" alt="" /&gt;My non-MS goals did not go nearly as well. After successfully registering for the ALT.NET conference, I decided to swap out my F# goal for my Ruby on Rails goal in this category. I did get a few chapters read in &lt;a href="http://www.manning.com/black/"&gt;Ruby For Rails&lt;/a&gt; by David Black, but I'm still making my way through the basics and haven't reached any epiphany moments yet that were worth writing about.  &lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;I got nothing at all done on my Windsor goal and did not make any contributions or opening inquiries into an open source project yet. I think I am going to wait until I figure out which tools I will be using extensively in my new job before committing to an open source.&lt;/font&gt;&lt;/p&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;So what's on my agenda for the next month?&lt;/font&gt;&lt;/p&gt;
&lt;ol style="font-family: Arial;"&gt;
    &lt;li&gt;&lt;font size="2"&gt;Tools: Regulator, MBUnit, and more on NDepend&lt;br /&gt;
    &lt;/font&gt;          &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Code Reading: Rhino.Mocks&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Non-MS: Ruby on Rails&lt;br /&gt;
    &lt;/font&gt;          &lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Higher on the Abstraction Stack: NHibernate&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;Once again, I will aim to write at least one post on each of the topics in the next month. Hopefully, I will attain all of my goals this time around.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115453"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115453" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/115453.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/09/19/115453.aspx</guid>
            <pubDate>Wed, 19 Sep 2007 13:25:57 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/115453.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/09/19/115453.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/115453.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/115453.aspx</trackback:ping>
        </item>
        <item>
            <title>Adventures in Open Source: Spelunking WatiN</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/09/06/115181.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Participating in the open source community and becoming an avid code reader were two themes in my &lt;/font&gt;&lt;a href="http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx"&gt;&lt;font size="2"&gt;six month roadmap&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; to becoming a better developer. I made progress in both of these areas in the last few days by downloading and exploring the source code for &lt;/font&gt;&lt;a href="http://watin.sourceforge.net/"&gt;&lt;font size="2"&gt;WatiN&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, an open source library that I have &lt;/font&gt;&lt;a href="http://geekswithblogs.net/coredump/archive/2007/08/31/115104.aspx"&gt;&lt;font size="2"&gt;used recently&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; for creating automated web tests. I still have quite a bit more exploring to do before I'll fully grok how WatiN works, but I thought I would share a few of the code reading techniques that I've been finding helpful.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;My preferred starting place on any new project that has good unit test coverage is to pick some unit tests for common scenarios and then run them through the debugger. I chose the Google() test from the IETest class in the WatiN test project because I had done the equivalent in my own test code when first learning how to use the library. As a side note, this was the first time that I've used the Resharper test runner and I was duly impressed (I'll wait until the next post to share my thoughts on how it compares to other test runners).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;img alt="" src="http://farm2.static.flickr.com/1300/1317703345_bf9762c071.jpg?v=0" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;img vspace="10" hspace="10" align="right" alt="" src="http://farm2.static.flickr.com/1357/1334305242_b8b37a5953.jpg?v=0" /&gt;Once I get a feel for the style and basic flow of the code through some of the common usage paths, I then find it helpful to use Resharper's Type Hierarchy window and VS's Class Diagram to explore the inheritance hierarchies. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The Type Hierarchy window window in Resharper works well when I am in the middle of examining code and want to know more about the classes being used. Several other options under Resharper's Go To menu, such as Usage, Inheritor, and Base also work well for this type of exploration.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;img vspace="10" hspace="10" align="left" alt="" src="http://farm2.static.flickr.com/1421/1334344236_f06db4471c.jpg?v=0" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;Finally, at some point I usually want to understand the big picture and see how all of the classes relate to each other. In this scenario, the View Class Diagram in the Visual Studio Team Edition really shines. It is especially nice&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; since you can adjust the level of detail you see and then simply jump back into code by double clicking on a class whenever you are interested in a particular member.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;font size="2"&gt;&lt;strong&gt;Here are a few setup notes to keep in mind if you decide to download and build WatiN yourself:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;font size="2"&gt;
    &lt;div&gt;&lt;font size="2"&gt;I downloaded the &lt;a href="http://downloads.sourceforge.net/watin/WatiN-1.1.2.4000-net-2.0.zip?"&gt;2.0 zip file&lt;/a&gt; that contains the source, but &lt;/font&gt;&lt;/div&gt;
    &lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;the solution file that comes with it appears to still be in a 1.1 format because it prompts you to upgrade the project when you open it in VS2005. &lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;
    &lt;div&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;You will then get a compile error that the name '&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;isSTA does not exist in the current context' because the required conditional compilation symbol is not set in the solution.&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;You will need to add 'NET20' to the Conditional Compilation Symbols field on the build tab under the project properties.&lt;/font&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;font size="2"&gt;In order to get the Test project to compile, you will need to &lt;a href="http://ayende.com/projects/rhino-mocks/downloads.aspx"&gt;download&lt;/a&gt; the Rhino.Mocks dll and fix the missing reference.&lt;/font&gt;&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;font size="2"&gt;
    &lt;div&gt;&lt;font size="2"&gt;Depending on which test runner you use, you may find that the majority of tests fail due to the apartmentState not being set to STA, which can be fixed with a &lt;a href="http://watin.sourceforge.net/apartmentstateinfo.html"&gt;&lt;font size="2"&gt;config file change&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;.The Apartment Thread needs to be set to STA &lt;/font&gt;because WatiN uses COM interop with Internet Explorer.&lt;/font&gt;&lt;/div&gt;
    &lt;/font&gt;&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;font size="2"&gt;
    &lt;div&gt; &lt;/div&gt;
    &lt;/font&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;If you try to download and upgrade the 1.1 version, the project will have an invalid reference to Interop.SHDocVw because VS2005 has a different wrapper around IE than VS2003. In this case, you'll need to manually remove the invalid reference and add a reference to ShDocVw.dll from the System32 directory.&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font size="2"&gt;Happy spelunking!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115181"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=115181" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/115181.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/09/06/115181.aspx</guid>
            <pubDate>Thu, 06 Sep 2007 06:32:34 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/115181.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/09/06/115181.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/115181.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/115181.aspx</trackback:ping>
        </item>
        <item>
            <title>One Month Progress Report on Being a Better Developer</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/08/14/114673.aspx</link>
            <description>&lt;p style="font-family: Arial;"&gt;&lt;font size="2"&gt;One month ago, I joined the epic struggle of &lt;a href="http://graysmatter.codivation.com/"&gt;Justice Gray&lt;/a&gt; (a.k.a. "Justin the Metrosexual") to "&lt;a href="http://graysmatter.codivation.com/HowIAmBecomingABetterDeveloperPart1OfInfinity.aspx"&gt;change the world&lt;/a&gt;" by publically sharing my &lt;a href="http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx"&gt;roadmap to becoming a better developer&lt;/a&gt;. Justice's own dubious plan involved reading one developer book a week for six months while presumably trying to prevent his brains ooze out of multiple orifices, a truly remarkable feat that should not to be attempted by anyone who has legitimate fears of losing cerebral tissue in a horribly sticky, uncomfortable manner.&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="line-height: normal; font-family: Arial;" class="MsoNormal"&gt;&lt;font size="2"&gt;Because misery loves company, he also started a mad game of tag with the aim of tricking as many other developers as possible into publically agreeing to give up their own free time in the name of becoming even geekier. I personally think that this whole idea was simply a plot hatched by Justice with the aim of diverting otherwise virile programmers away from the limited female population that will have anything to do with geeks in the first place, thereby improving his own otherwise meager odds. I mean come on...have you seen his &lt;a href="http://graysmatter.codivation.com/themes/Justice/images/justice2007blog.jpg"&gt;picture&lt;/a&gt;? He obviously needs all the help he can get...:-)&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="line-height: normal; font-family: Arial;" class="MsoNormal"&gt;&lt;font size="2"&gt;In commemoration of my own one month anniversary of having succumbed to this evil plot, I feel compelled to provide a progress report. So far, I have made modest gains in exploring non-traditional MS technologies by working my way through various tutorials on &lt;a href="http://geekswithblogs.net/coredump/archive/2007/08/07/114461.aspx"&gt;Boo&lt;/a&gt; and the Windsor Container. I also inched my way closer to the open source world by familiarizing myself with the &lt;a href="http://geekswithblogs.net/coredump/archive/2007/07/26/114207.aspx"&gt;PoweShell Community Extensions&lt;/a&gt; and kick-started my goal of become an avid code reader by downloading and perusing the code in the SubText project. As far as tools are concerned, I spent several hours puzzling over the various graphical reports of NDepend trying to figure out the ins-and-outs of cyclomatic complexity. Not a bad start, but time is dwindling away and I'm not quite as far along the path as I had originally envisioned.&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="font-size: 9pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="line-height: normal; font-family: Arial;" class="MsoNormal"&gt;&lt;font size="2"&gt;In the spirit of holding myself accountable through public humiliation, I am going to try to increase my pace a little by committing to more concrete goals for next 30 days. Since I shy away from writing a blog post on a technical topic until I reach a certain level of understanding (it's all relative of course), I am going to commit to writing at least one blog post on each of the following goal-related topics during the next month:&lt;/font&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li style="font-family: Arial;"&gt;
    &lt;div&gt;&lt;font size="2"&gt;Tools: &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt; and &lt;a href="http://www.jetbrains.com/resharper/"&gt;Resharper&lt;/a&gt;&lt;/font&gt; &lt;/div&gt;
    &lt;/li&gt;
    &lt;li style="font-family: Arial;"&gt;
    &lt;div&gt;&lt;font size="2"&gt;Expand OOP/MS horizons: &lt;a href="http://www.castleproject.org/container/gettingstarted/index.html"&gt;Windsor Container&lt;/a&gt; and &lt;a href="http://research.microsoft.com/fsharp/fsharp.aspx"&gt;F#&lt;/a&gt;  &lt;/font&gt;&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div&gt;&lt;font size="2"&gt;Code Reading: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&amp;amp;displaylang=en"&gt;Rotor&lt;/a&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif';"&gt; &lt;/span&gt;&lt;span style="font-size: 9pt; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
    &lt;/li&gt;
&lt;/ol&gt;
&lt;p style="line-height: normal;" class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span style="font-size: 10pt; font-family: 'Times New Roman','serif';"&gt;&lt;font size="2" face="Arial"&gt;I am&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;also going to take a baby-step into the open source world by writing a personal email to Keith Hill offering my humble services on the PSCX project. If he is smart, he'll say no, but at least I will have made an effort&lt;/font&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;Until next month, may you have success in achieving your own developer goals while still managing to stake your claim on the geek-loving female of your choice.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;P.S. - I recommend that you immediately delete any email or blog post that contains the word "Tag". No good can come of it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114673"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114673" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/114673.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/08/14/114673.aspx</guid>
            <pubDate>Wed, 15 Aug 2007 01:04:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/114673.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/08/14/114673.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/114673.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/114673.aspx</trackback:ping>
        </item>
        <item>
            <title>My Six Month Roadmap to Becoming a Better Developer </title>
            <link>http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;I just heard about &lt;/font&gt;&lt;a href="http://graysmatter.codivation.com/HowIAmBecomingABetterDeveloperPart1OfInfinity.aspx"&gt;&lt;font size="2"&gt;Justice Gray&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;'s blog challenge from the latest episode of &lt;/font&gt;&lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast72BeABetterDeveloperInSixMonths.aspx"&gt;&lt;font size="2"&gt;Hanselminutes&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; while running today. Although I think his plan to read one developer book a week for the next six months is rather insane, I agree with the premise that setting specific goals publicly is probably the best way to hold yourself accountable. Here are my goals for the next 6 months:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Add Tools to my Developer Toolbox&lt;/u&gt; - My productivity and troubleshooting skills would plummet if I were to suddenly stop using utilities like FileMon, RegMon, Fiddler, ProcessExplorer, TestDriven.NET, MSBuild, SQLPrompt, SQL Profiler, WinKey, and Lutz's Reflector. In the next six months I am going to learn to use &lt;/font&gt;&lt;a href="http://www.jetbrains.com/resharper/"&gt;&lt;font size="2"&gt;Resharper&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;a href="http://www.ndepend.com/"&gt;&lt;font size="2"&gt;NDepend&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, Roy Osherove's &lt;/font&gt;&lt;a href="http://tools.osherove.com/CoolTools/Regulator/tabid/185/Default.aspx"&gt;&lt;font size="2"&gt;Regulator&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, and a good packet sniffer (not sure which one yet).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Become an Avid Code Reader&lt;/u&gt; - Writers are commonly given the advice to read good books in order to become a better writer and I think the same holds true for developers and code. Unfortunately, it is easy to get caught up in only writing code or only reading a small subset of internal code that you are stuck supporting. I have my eye on several open source projects that I'd like to spelunk in the near future, including the &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&amp;amp;displaylang=en"&gt;&lt;font size="2"&gt;Rotor&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; implementation of the .NET framework, SubText, DasBlog, RSS Bandit, NHibernate, Rhino.Mocks, and WatiN. I also plan to use Reflector more often to decompile .NET assemblies and figure out how .NET framework and how other third party, non-open source .NET utilities work.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step outside of my MS-OOP comfort zone&lt;/u&gt; - My big goal is to get through the &lt;/font&gt;&lt;a href="http://www.manning.com/black/"&gt;&lt;font size="2"&gt;Ruby For Rails&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; book that has been sitting on my shelf for the last six months so I can see why there are so many Ruby fanatics and why dynamic languages in general are becoming so popular that even Microsoft has jumped on the bandwagon (Lamda Expressions, the DLR, IronPython, IronRuby, etc.). I am also interested in learning more about the various &lt;/font&gt;&lt;a href="http://www.castleproject.org/"&gt;&lt;font size="2"&gt;Castle&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; projects, especially the Windsor Container which is supposed to help enforce the IoC (Inversion of Control) design principle that helps remove complexity and increase testability by parameterizing embedded dependencies. I would also like to install Ubuntu on a VM so I can see what the Linux OS looks like these days as well as make my way through an &lt;/font&gt;&lt;a href="http://research.microsoft.com/fsharp/fsharp.aspx"&gt;&lt;font size="2"&gt;F#&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; tutorial so I can break away from my OOP bias and understand the functional language perspective. Finally, I want to experiment with &lt;a href="http://boo.codehaus.org/"&gt;Boo&lt;/a&gt;, a CLI language that is a hybrid of Python, Ruby, and C#.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Become a Better Developer Community Citizen&lt;/u&gt;-  I've already taken steps in that direction this year by becoming more tuned in to the blogger community, starting this blog, attending local .NET user group meetings, and even agreeing to speak on Powershell at the next Topeka .NET User Group meeting. What I would really like to do in the next six months is to start contributing code to an open source project. I'm open to suggestions at this point...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Push Myself Lower and Higher on the Abstraction Stack&lt;/u&gt; - From a productivity standpoint, I think it is crucial at this evolutionary stage of the software industry to figure out ways to avoid writing tedious boilerplate and plumbing code by utilizing higher level abstraction tools as much as possible such as code generators (&lt;a href="http://www.codesmithtools.com/"&gt;CodeSmith&lt;/a&gt;) and ORM tools (&lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;). Conversely, I also plan on filling in some gaps in my own understanding by dropping lower on the abstraction stack and finishing a MASM Assembler tutorial I downloaded a while ago.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;I am not going to create a firm schedule for these goals like Justice Gray did because I am much more productive when I let natural curiosity determine the sequence of learning. However, I am going to commit to writing at least one post on each of the following topics over the next 6 months:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font size="2"&gt;Resharper &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;NDepend &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Regulator &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Packet Sniffer &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Impressions on the source code from at least one open source project &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Ruby On Rails &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;F# &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Ubuntu &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Anouncement of which open source project I joined &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;NHibernate &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Windsor Container &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;CodeSmith &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font size="2"&gt;Assembly &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font size="2"&gt;Whew, maybe I should have just agreed to read one book week too...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113943"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113943" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/113943.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx</guid>
            <pubDate>Sun, 15 Jul 2007 14:52:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/113943.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/07/15/113943.aspx#feedback</comments>
            <slash:comments>13</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/113943.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/113943.aspx</trackback:ping>
        </item>
        <item>
            <title>Informavore Trap # 2: Information Junk Food</title>
            <link>http://geekswithblogs.net/coredump/archive/2007/07/05/113716.aspx</link>
            <description>&lt;div&gt;&lt;font size="2"&gt;This is a follow-up to my &lt;/font&gt;&lt;a href="http://geekswithblogs.net/coredump/archive/2007/06/25/113449.aspx"&gt;&lt;font size="2"&gt;original post&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; about cognitive traps that hinder learning and stunt professional growth. Information junk food refers to any information gathering activity that prematurely satisfies your hunger to learn and provides fleeting emotional pleasure in lieu of actual intellectual nourishment. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;strong&gt;&lt;font size="2"&gt;Some information junk foods to avoid:&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;Fattening Abstractions &lt;/u&gt;- There is great power in naming things, which is why it is an integral part of nearly all creation stories (i.e. Adam naming all the animals in the Christian Bible). Unfortunately, learning acronyms, buzzwords, and high level abstractions often fools us into thinking we know more than we really do. This is why I've interviewed candidates who could talk for hours on end about service oriented architecture, but failed miserably when it came to a simple &lt;/font&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;&lt;font size="2"&gt;fizzbuzz&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; programming test. &lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;br /&gt;
High Calorie Public Opinions&lt;/u&gt; - The blogosphere is full of brilliant people who passionately articulate their beliefs. Unfortunately, the human need to fit into a community (open source, java, ruby, agile, alt.net) often trumps the desire to keep an open mind. While the person who originally formed the opinion derived great value from the decision making process, the casual reader who easily adopts opinions like a new piece of trendy clothing gains nothing but unfounded and potentially misapplied biases.&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;br /&gt;
Sugary old Habits&lt;/u&gt; - Paradoxically, the better you become at something, the more difficult it can be to learn new things. Once a habit becomes second nature, we forget that there are other alternatives and that we probably made our original choice at at a time in our careers when we knew less than we do now. This human propensity to stick with things that are comfortable and have worked well in the past is why the most experienced people in our profession are so often dismissed as irrelevant rather than respected.&lt;/font&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size="2"&gt;Some Healthy Alternatives:&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;Just one more block&lt;/u&gt; - The most helpful habit I've adopted while running is to respond to my first impulse to stop running with the mantra, "just one more block". I think this also works well with learning. The next time you feel the urge to fall back on that same worn-out API or unproductive GUI-oriented approach, discipline yourself to take a minute and learn just one new method or one new keyboard shortcut. The investment will pay great dividends down the road.&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;br /&gt;
Empty your Cup&lt;/u&gt; - This is a phrase that I remember from some zen book that I read in high school. The idea is that in order to learn something more deeply, you often have to intentionally forget what you already know so that you can approach things with fresh eyes. The next time you catch yourself dismissing a learning opportunity because it pertains to something you think you already know or have a strong opinion about, pretend that you are a newbie and see if you can glean an new tidbit or perspective.&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;br /&gt;
Bite your tongue&lt;/u&gt; - Every once in a while, I'll catch myself talking about or recommending a technology or tools that I've only read about but never used. I am now trying to get into the habit of not letting myself talk about anything unless I've at least downloaded the technology and done a proof of concept for myself. For me, this serves as extra motivation to take the next step in learning.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;font size="2"&gt;
&lt;div&gt;&lt;br /&gt;
&lt;u&gt;Approach documentation like a scientist&lt;/u&gt; - Treat techniques you read about like an hypothesis that you must scientifically prove with a unit test before you can confirm that it is true. I've caught myself several times regurgitating something I've read that I thought was very straight-forward only to discover later that I've slightly misinterpreted how it works. Documentation and resource sites are subject to the same ambiguousness and misinterpretation as requirements. Don't trust your understanding until you've seen it with your own eyes.&lt;/div&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113716"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113716" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/coredump/aggbug/113716.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Russell Ball</dc:creator>
            <guid>http://geekswithblogs.net/coredump/archive/2007/07/05/113716.aspx</guid>
            <pubDate>Fri, 06 Jul 2007 03:16:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/coredump/comments/113716.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/coredump/archive/2007/07/05/113716.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/coredump/comments/commentRss/113716.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/coredump/services/trackbacks/113716.aspx</trackback:ping>
        </item>
    </channel>
</rss>