<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Developing UX &#187; Microsoft</title>
	<atom:link href="http://developingux.com/topic/microsoft/feed/" rel="self" type="application/rss+xml" />
	<link>http://developingux.com</link>
	<description>Caleb Jenkins on Silverlight &#124; .NET &#124; Design &#124; Development &#124; Architecture &#124; Community</description>
	<lastBuildDate>Thu, 11 Mar 2010 00:45:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
	<item>
		<title>Practice Software Patterns &#8211; Component Patterns</title>
		<link>http://developingux.com/2010/03/10/practice-software-patterns/</link>
		<comments>http://developingux.com/2010/03/10/practice-software-patterns/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 23:46:39 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[10-practices]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[software patterns]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=917</guid>
		<description><![CDATA[
			
				
			
		This post is the 6th in a series that started with the 10 practices that every developer needs to start right now
 The first time that someone taught me about Software Design Patterns it went something like this:

Them: “… and so that is the pattern.” 
Me: “That’s it” 
Them: “Well, yeah.” 
Me: “But that’s how I’ve always [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F03%2F10%2Fpractice-software-patterns%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F03%2F10%2Fpractice-software-patterns%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p>This post is the 6th in a <a href="http://developingux.com/topic/10-developement-practices/">series</a> that started with the <a href="http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/">10 practices that every developer needs to start right now</a></p>
<p><a href="http://developingux.com/wp-content/uploads/2010/03/image.png"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="534" height="268" /></a> The first time that someone taught me about Software Design Patterns it went something like this:</p>
<ul style="list-style-type: none">
<li>Them: “… and so that is the pattern.” </li>
<li>Me: “That’s it” </li>
<li>Them: “Well, yeah.” </li>
<li>Me: “But that’s how I’ve always done that.” </li>
<li>Them: “Well, then you’ve always been following that pattern” </li>
</ul>
<p>I find that is how a lot of people react when they first learn about patterns. “So a pattern is just giving a name to good software development” Well, yes and no. On the one hand – yes, a <strong>software pattern is recognizing common software challenges and the approaches that have worked in the past to over come those challenges</strong> – and naming it. On the other hand, don’t underestimate the power of giving something a name.</p>
<p><span id="more-917"></span></p>
<h3>Vocabulary</h3>
<p>There is power in a common vocabulary. Think about it, every profession has one. From the dentist that cleans your teeth to the short order cook at Denny’s; from the mechanic that works on your car to the contractor that built your house. Every profession has it’s own vocabulary that gives people a fast and efficient way to communicate.</p>
<p>So that instead of taking time to walk through all of the details of your architecture and application design, you can have a conversation that goes something like this “We’re writing a facade layer here, and utilizing a DI container to act as our Abstract Factory, accessing our persistence layer with a repository pattern utilizing Interception for logging and MVVM to composite all of our UI.”</p>
<p>OK, so I know that there were a lot of buzz words thrown in there, but I hope you’re getting the point &#8211; a lot can be communicated in a couple of sentences.</p>
<h3>Patterns</h3>
<p>Let’s face it – there is more to learn than any of us has time for. Patterns are like that. There’s a pattern for everything &#8211; like a bad Apple commercial, there’s a <em>pattern</em> for that. The important part is not learning every pattern under the sun – but learning the common patterns for the common challenges is where you’ll get the most bang for your buck.</p>
<h4>Component Patterns</h4>
<p>Strategy | Factory | Abstract Factory – all related.</p>
<p><strong>Factory.</strong> The goal of a factory pattern is to conceal the creation of an object from the consumers of the object. This is especially important for complex objects that take a lot of dependencies or configurations when you create them. Instead of repeating the set up code through out your application you move it to one place (the factory) and then call that from your code.</p>
<p><strong>take this (slightly contrived) code example…</strong></p>
<p><code> </code></p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
            SqlCommand cmd = new SqlCommand();

            SqlParameter parm1 = new SqlParameter();
            parm1.Direction = ParameterDirection.Input;
            parm1.ParameterName = &amp;amp;amp;amp;amp;quot;Id&amp;amp;amp;amp;amp;quot;;
            parm1.Value = 5;
            cmd.Parameters.Add(parm1);

            SqlParameter parm2 = new SqlParameter();
            parm2.Direction = ParameterDirection.Input;
            parm2.ParameterName = &amp;amp;amp;amp;amp;quot;State&amp;amp;amp;amp;amp;quot;;
            parm2.Value = &amp;amp;amp;amp;amp;quot;TX&amp;amp;amp;amp;amp;quot;;
            cmd.Parameters.Add(parm2);

            // etc...
       </pre></pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p>It would be much nicer to implement a reusable method as so&#8230;</p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
      SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(getInParm(&amp;amp;amp;amp;amp;quot;Id&amp;amp;amp;amp;amp;quot;, 5));
            cmd.Parameters.Add(getInParm(&amp;amp;amp;amp;amp;quot;State&amp;amp;amp;amp;amp;quot;, &amp;amp;amp;amp;amp;quot;TX&amp;amp;amp;amp;amp;quot;));

            // etc...
        }

        SqlParameter getInParm(string name, object value)
        {
            SqlParameter parm = new SqlParameter();
            parm.Direction = ParameterDirection.Input;
            parm.ParameterName = name;
            parm.Value = value;
            return parm;
        }

       </pre></pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p>This probably seems like an obvious and simple example (because it is), but the point is that not all patterns are ground breaking or earth shattering, just simple approaches to make your code more usable, maintainable and testable.</p>
<p><strong>Abstract Factory.</strong> If you set up your factory to return an Interface instead of a concrete class then it is an abstract factory. This is especially useful when you want to return different implementations in different scenarios. For example, you might have an IDataLayer and in some cases you want to return a fake version for testing, or perhaps you need a local storage version for offline scenarios etc.. moving the creation of your data layer, it’s configuration and set up to a factory would make a lot of sense. By the way, this is also a text book definition of Object Oriented Polymorphism – the same interface with different behaviors with various implementations. And that brings us to the Strategy Pattern.</p>
<p>Take our example above, if we were to move that bit of code in to a shared data access helper class, we might want to consider a more generic approach.</p>
<p><code> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code>
<pre><pre class="brush: csharp;">
      IDbDataParameter getInParm(string name, object value)
       </pre></pre>
<pre> </pre>
<p> </code></p>
<p><code> </code></p>
<p> </p>
<p><code> </code></p>
<p><code> </code></p>
<p><strong>Strategy Pattern.</strong> The original goal of the strategy pattern was the grouping various algorithms in to common interfaces. So, for example, working with <a href="http://en.wikipedia.org/wiki/Data_Encryption_Standard">DES</a>, <a href="http://en.wikipedia.org/wiki/Triple_DES">Triple DES</a> or <a href="http://en.wikipedia.org/wiki/Blowfish_(cipher)">Blowfish</a> encryption shouldn’t be any different than driving a V8 is different from driving a 4 cylinder car – what’s under the hood (the implementation) doesn’t matter as long as you know hot to use the steering wheel and pedals (Interface). No code examples here. Go take a look at encryption in .NET, or the common approaches that ADO uses for data access. Also, hang on, we’ll go in deeper to code examples in just a bit when we talk about composition over inheritance (which is closely related to Strategy Pattern)</p>
<p><strong>Up next:</strong> UI Patterns for Testability, Maintainability and Extensibility!</p>
<p>(Followed by Composition over Inheritance)</p>
<h4><span style="font-size: xx-small;">Images Credit: </span><a href="http://www.flickr.com/photos/webtreatsetc/4229661317/sizes/o/"><span style="font-size: xx-small;">http://www.flickr.com/photos/webtreatsetc/4229661317/sizes/o/</span></a></h4>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/03/10/practice-software-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft MVP Summit &#8211; 2010</title>
		<link>http://developingux.com/2010/02/21/microsoft-mvp-summit-2010/</link>
		<comments>http://developingux.com/2010/02/21/microsoft-mvp-summit-2010/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 05:02:28 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[mvpsummit]]></category>
		<category><![CDATA[seattle]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=873</guid>
		<description><![CDATA[
			
				
			
		
Last week I had the privilege of attending Microsoft’s Global MVP Summit in Bellevue Washington. While I can’t talk about most of what was covered (NDA) I wanted to mention two projects that I learned about while there and mention some of my thoughts from the event.

First, check out these two Silverlight projects on Codeplex.


The [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F02%2F21%2Fmicrosoft-mvp-summit-2010%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F02%2F21%2Fmicrosoft-mvp-summit-2010%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image21.png" border="0" alt="image" width="535" height="318" /></p>
<p>Last week I had the privilege of attending Microsoft’s <a href="http://www.mvpsummit2010.com/">Global MVP Summit</a> in Bellevue Washington. While I can’t talk about most of what was covered (<a href="http://en.wikipedia.org/wiki/Non-disclosure_agreement">NDA</a>) I wanted to mention two projects that I learned about while there and mention some of my thoughts from the event.</p>
<p><span id="more-873"></span></p>
<p>First, check out these two <a href="http://silverlight.net/">Silverlight</a> projects on <a href="https://www.codeplex.com/">Codeplex</a>.</p>
<ul>
<li>
<p>The <a href="http://silverlighthvp.codeplex.com/">Silverlight Hyper Video Player</a> <br />On Thursday, <a href="http://blogs.silverlight.net/blogs/jesseliberty/">Jessie Liberty</a> presented on this <a href="http://silverlighthvp.codeplex.com/">project</a> that he’s been leading. I actually got to see a preview of this project last year with one of the developers, but they weren’t sure back then if they were going to be able to release this project as <a href="http://en.wikipedia.org/wiki/Open_source_software">OSS</a> or not. Glad to see that it was! Go check out the project, it’s a great Silverlight project demonstrating <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> in Silverlight as well as using the new features of <a href="http://www.codeplex.com/MEF">MEF</a> for <a href="http://en.wikipedia.org/wiki/Object_composition">composition</a> that are built in <a href="http://silverlight.net/getstarted/silverlight-4-beta/">Silverlight 4</a>.</p>
</li>
<li>The <a href="http://silverlightugstarter.codeplex.com/">Silverlight User Group Website Starter Kit</a> <br />A friend of mine, <a href="http://www.community-credit.com/AboutUs.aspx">David Silverlight</a>, brought this <a href="http://silverlightugstarter.codeplex.com/">project</a> to my attention. I love this idea! He and a talented group of developers and designers are working on this project to give user groups a great starting point and some excellent features to leverage. I’ve actually been added to <a href="http://silverlightugstarter.codeplex.com/team/view">the team</a> and hope that I’ll be able to provide add to the final result!</li>
</ul>
<h3><img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image22.png" border="0" alt="image" width="223" height="308" align="left" />Final thoughts</h3>
<p>There are multiple reasons that Microsoft organizes and hosts the MVP Summit. Part of it is developer satisfaction and to show appreciation for the work that MVP’s do around the world. MVP’s attend to gain insights in to Microsoft’s direction, network with product teams and gain a deeper understanding of the products that they work with day in and day out.</p>
<p>The last reason that I want to mention is to give the MVP’s a chance to provide input back in to the products that Microsoft is building, to be able to tell the product teams what they are doing right, what they are doing wrong, and help prioritize the features that the product teams should be working on.</p>
<p>This was my fourth Summit to attend, and <strong>the first time that I really saw this last point taken to heart</strong> across the board from multiple teams. I was really excited by the feedback that the product teams were actively soliciting from the MVP’s. I consistently saw and participated in agile techniques like <a href="http://en.wikipedia.org/wiki/Dotmocracy">dot voting</a> and <a href="http://buyafeature.com/">buy a feature</a> around broad functionality, specific features and general direction for the product teams. It was very refreshing and opened up a ton of conversations that probably wouldn’t have happened otherwise. Thanks Microsoft!</p>
<p> </p>
<p><span style="font-size: xx-small;">Microsoft Campus Photo Credit: </span><a href="http://denisgobo.blogspot.com/2010/02/recap-of-mvp-summit-2010.html"><span style="font-size: xx-small;">Denis Gobo</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/02/21/microsoft-mvp-summit-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SOLID: Software that works.</title>
		<link>http://developingux.com/2010/02/09/solid-development/</link>
		<comments>http://developingux.com/2010/02/09/solid-development/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 06:06:04 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[dependencyinjection]]></category>
		<category><![CDATA[developer practices]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[solid]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=809</guid>
		<description><![CDATA[
			
				
			
		This post is a part of a series that I started with &#8220;10 Practices that Every Developer Needs to Start Right Now&#8220;.
Update: This post was picked up by DZone, go vote it up!

Ok, before you dig in to the post, let’s get two things out of the way first.  1.Go read the authority on SOLID [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F02%2F09%2Fsolid-development%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F02%2F09%2Fsolid-development%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p>This post is a part of a <a href="http://developingux.com/topic/10-developement-practices/">series</a> that I started with &#8220;<a href="http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/">10 Practices that Every Developer Needs to Start Right Now</a>&#8220;.</p>
<p><strong>Update</strong>: This post was picked up by DZone, <a href="http://dotnet.dzone.com/news/solid-software-works">go vote it up</a>!</p>
<p><a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="solid_thumb" src="http://developingux.com/wp-content/uploads/2010/02/solid_thumb.jpg" border="0" alt="solid_thumb" width="511" height="409" /></a></p>
<p>Ok, before you dig in to the post, let’s get two things out of the way first.  1.Go read the authority on <a href="http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID principles</a> from the man himself, <a href="http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">Uncle Bob Martin</a>.  2nd.Go get the very cool <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Inspirational SOLID</a> images from the guys over at Los Techies. They released them under a Creative Commons License which I think is pretty cool! Alright, got that out of the way? Good. Let’s get started.</p>
<p>Few things have come a long OO history that resonate so well with so many developers than the SOLID principle. One of the reasons they resonate with so many developers is because they communicate several practices that many developers have been doing all along. The beauty and power of the SOLID principals in in there ability to communicate, what I call <a href="http://developingux.com/2009/09/14/dependency-injection-on-microsoft-arcast-tv/">code architecture</a>, in such a memorable and practical way.</p>
<p>Like any good thing, however, taken to an extreme can become a hindrance on any project. So, I’m going to tackle these principals like I tackle everything in this series… give you my take on it. So here you go: SOLID according to Caleb.</p>
<p><span id="more-809"></span></p>
<p>[SOLID Motivational Posters, by <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Derick Bailey</a>, is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>. <a href="http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx">Get them here</a>.]</p>
<p><a name="srp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/SingleResponsibilityPrinciple2_5F00_71060858.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image8.png" border="0" alt="image" width="511" height="185" /></a></p>
<h3>S – Single Responsibility Principal <a href="#srp">#</a></h3>
<p>&#8220;There should never be more than one reason for a class to change.&#8221; — Robert Martin, SRP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p>
<p><strong>Abuse</strong>: I’ve seen this taken to an extreme. I’ve seen good clean readable code turned in to multiple classes (even multiple projects) to break up “responsibility”. The end result was much harder to maintain and even harder to read.</p>
<p><strong>Applied</strong>: “One reason to change” does not mean that every class has one and only one thing (that would be called a method), it does mean that you should focus on the area (or areas) of responsibility that a class should have and then stick with those boundaries. <a href="http://en.wikipedia.org/wiki/Code_bloat">Code bloat</a> (overly large classes with overly large methods) is a real <a href="http://en.wikipedia.org/wiki/Code_smell">code smell</a> that you need to watch out for. The more things that a class is responsible for, the more likely you’ll have to change it and the harder it will be to test.</p>
<p>Your code should be broken in to manageable pieces, reduce any unnecessary couplings… Practice writing Libraries not Frameworks.</p>
<p> </p>
<p><a name="ocp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/OpenClosedPrinciple2_5F00_2C596E17.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image14.png" border="0" alt="image" width="511" height="247" /></a></p>
<h3>O – Open Closed Principle <a href="#ocp">#</a></h3>
<p>&#8220;Software entities should be open for extension, but closed for modification.&#8221; — Robert Martin paraphrasing Bertrand Meyer, OCP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p>
<p><strong>Abuses</strong> – I’ve worked on code bases that were so extensible, so configurable, so full of <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">AOP</a> indirection and configuration that following the flow of what they were actually doing was almost impossible.</p>
<p><strong>Applied </strong>– Code is going to change, that’s a part of life. The Open Closed Principal is more about reducing how often you have to change your code and in how many places. In other words: Code to Interfaces and maintain your abstraction boundaries.</p>
<p>I recently worked with a <a href="http://msdn.microsoft.com/en-in/data/cc298428(en-us).aspx">Linq to SQL</a> project where the <a href="http://msdn.microsoft.com/en-in/library/system.data.linq.datacontext(en-us).aspx">Data Context</a> object was being passed around through out all of the layers in the application. That meant that most of the application was impossible to unit test and if I were to change a column or table in the database I would have to go through the entire code base and find all of the places that broke. We fixed that by creating a specific data interface that all interactions had to go through, only passing domain objects (<a href="http://en.wikipedia.org/wiki/Data_Transfer_Object">DTO</a> Models). We kept the DB Context in the Data Layer implementation where it was super useful, but no longer forced us to recompile the entire source for simple data changes. I like how approach that Jeffery Palermo described and an <a href="http://jeffreypalermo.com/blog/the-onion-architecture-part-1/">Onion Architecture</a>.</p>
<p>I also worked on another project where 8 layers of abstract classes were used to distinguish between three different types of physical devices… any change in the application behavior had to be propagated across all of the implementations. We fixed that by concealing the device differences behind a single command interface that was then injected in to the application “behaviors” via an abstract factory.</p>
<h4>What did you just say?</h4>
<p>So in other words… imagine having three different devices (blue, red, green) that all needed to be turned on (behavior), but the command to turn on each was different and defined by the manufacture… the code *might* look like this:</p>
<pre><a href="http://developingux.com/wp-content/uploads/2010/02/image1.png"><img style="border-right-width: 0px; margin: 0px 15px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="232" height="243" align="left" /></a></pre>
<p>Now imagine that there were multiple points within your application where you were working with the devices… now, every time you need to support a new device you end up with this if/else statement being redone just about everywhere…</p>
<p><a href="http://developingux.com/wp-content/uploads/2010/02/image2.png"><img style="border-right-width: 0px; margin: 5px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="289" height="57" /></a></p>
<p>By externalizing the device differences behind a factory and encapsulating them in an Interface you now only have one place to change to add a new device. You could reduce that further using an extension manager like <a href="http://mef.codeplex.com/">Microsoft MEF</a>, but we won’t go in to that right now.</p>
<p> </p>
<h3><a name="lsp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/LiskovSubtitutionPrinciple_5F00_52BB5162.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image3.png" border="0" alt="image" width="511" height="218" /></a> L – Liskov Substitution Principle <a href="#lsp">#</a></h3>
<p>&#8220;Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.&#8221; — Robert Martin, LSP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p>
<p><strong>Abuses:</strong> I like to think of this principle as “Use Interfaces”.  I haven’t really seen abuses of this practice, but I have seen some bad implementations. The rough ones, are where developers rely on a <a href="http://msdn.microsoft.com/en-us/library/ms173150.aspx">base abstract class</a> instead of an <a href="http://msdn.microsoft.com/en-us/library/ms173156.aspx">Interface</a> also. The doesn’t sound like a problem until you start putting parameters in the constructor of the base class. Now any derived classed have to enforce those same dependencies even if you are creating an entirely different implementation.</p>
<p><strong>Applied:</strong> Use Interfaces. If you find that a base class would meet some of your needs more closely, that’s fine, just make sure that you back that base class up with an Interface, and then code to the Interface.. you’ll thank me later.</p>
<p>Side Note: Their are different schools of thought around backing domain models with Interfaces. I do, the main reason is that even if I end up using an ORM (like <a href="http://msdn.microsoft.com/en-in/data/aa937723(en-us).aspx">Entity Framework</a>, or <a href="http://msdn.microsoft.com/en-in/data/cc298428(en-us).aspx">LinqToSQL</a>) that “forces*” me to a specific domain model implementation, I can save myself a lot of headache later and make my models more mobile if I connect those domain models to an Interface.</p>
<p>* – no toolkit should force your architecture or design, any implementation can be abstracted around, Domain Model Interfaces help move your DTO’s through layers of your application without carrying heavy dependencies with you.</p>
<p> </p>
<h3><a name="isp"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/InterfaceSegregationPrinciple_5F00_60216468.jpg"><img style="border-right-width: 0px; margin: 0px auto 10px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image4.png" border="0" alt="image" width="511" height="185" /></a> I – Interface Segregation Principle <a href="#isp">#</a></h3>
<p>&#8220;Clients should not be forced to depend upon interfaces that they do not use.&#8221; — Robert Martin, ISP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p>
<p>Let’s say you have a service class for working with Invoices, your IManageInvoices interface exposes three methods, Add(IInvoice), Delete(IInvoice) and Update(IInvoice). Because of deployment and security concerns you are going to create two different classes to implement this.</p>
<p>One, InvoiceCreator will implement the Add method and run in untrusted environments. The other class, InvoiceUpdater, will implement the other two methods and will only run in secure, verified and authenticated context. So what should each class do with the other methods?</p>
<p><strong>Violated: </strong>One “option” would be to implement them, but then throw a “Not-Implemented Exception” or set up Void methods that don’t actually do anything, both of those options are ugly and bad choices.</p>
<p><strong>Applied: </strong>The better option is to split your Interface, create a ICreateInvoices Interface with the Add method, and a IUpdateInvoices interface with the other methods. That way, you are actually implementing the methods of your interface, and are not hiding are making implementation decisions that break your abstraction and require special knowledge of the class.</p>
<p> </p>
<h3><a name="di"></a><a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/DependencyInversionPrinciple_5F00_0278F9E2.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image5.png" border="0" alt="image" width="511" height="147" /></a> D – Dependency Inversion Principle <a href="#di">#</a></h3>
<p>&#8220;(A) High level modules should not depend upon low level modules. Both should depend upon abstractions. (B) Abstractions should not depend upon details. Details should depend upon abstractions.&#8221; — Robert Martin, DIP paper linked from <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">The Principles of OOD</a></p>
<p>All code has dependencies, the question is how to you resolve those dependencies.</p>
<p>Example: my class will access a service, I could write it like this:</p>
<p><a href="http://developingux.com/wp-content/uploads/2010/02/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="345" height="190" /></a></p>
<p>or like this:</p>
<p><a href="http://developingux.com/wp-content/uploads/2010/02/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/02/image_thumb4.png" border="0" alt="image" width="342" height="179" /></a></p>
<p>Can you spot the difference? It’s subtle, yet very very powerful. In the first instance, you are using an Interface to define your Shipping Service (and that’s a good thing!), but then you are forcing your class to be dependent on the UPS shipping service… I don’t have anything again UPS, but I do know that company contracts are constantly changing, and just because <em>we were using UPS </em>when we designed and had the customer (business owner) sign off on the application, doesn’t mean that that’s who we are going to use when we go to production!</p>
<p>You might be tempted just to replace the “new UPS” instantiation with an Abstract Shipping Factory ( shipService = factory.getShippingService() )… that wouldn’t necessarily be a bad idea, except now you’ve shifted your code from a UPS dependency to a factory dependency.</p>
<p>Notice in the second option, we hand our class the implementation that we want to use through the constructor. That’s called constructor injection, we could have also used a property or method to set the shipping service. I like constructor injectors for anything that my class requires to operate. This allows us to define our IShipping service implementation completely independent of the class that’s consuming it.</p>
<p>This also makes are code much easier to test by allowing us to creating a mock (fake) version of our IShipping service for testing the main class. We might even use something like <a href="http://ayende.com/projects/rhino-mocks.aspx">RhinoMocks</a> to help our automated unit tests even more, but we’ll save that discussion for another time.</p>
<h4>No Framework Required</h4>
<p>You may have noticed that this <strong>dependency injection is not dependent on any special tooling or frameworks</strong> (so we’re not introducing new dependencies just to get rid of another!)</p>
<p>Dependency Injection or DI, is really a style of coding that makes your code more composable, testable and maintainable. DI Frameworks (or Containers) are specifically designed to be used in two stages.</p>
<h4>Register, then Resolve</h4>
<p>First, you register your Interface to Class mappings, then you can reference the container anytime and resolve an Interface to a concrete class. Containers can also provide other nice benefits like controlling the life cycle of an object (singelton, vs per thread, vs per request for example). Some DI frameworks also provide the ability register special handlers (or Interceptors) that get invoked whenever a method or a property is called. This in a concept known as AOP or Aspect Oriented Programming that is useful for cross-cutting concerns like automatic logging and security checks.</p>
<p>For more information on Dependency Injection and Inversion of control I suggest checking out my <a href="http://developingux.com/di/">DI</a> in <a href="http://developingux.com/2008/12/18/dependency-injection-with-silverlight/">Silverlight slide deck</a>, as well as the <a href="http://ninject.org/">Ninject</a>, <a href="http://castleproject.org">Castle</a>, <a href="http://unity.codeplex.com/">Microsoft Unity</a> and <a href="http://structuremap.sourceforge.net/">Structure Map</a> projects.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/02/09/solid-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Practices: Object Oriented Development</title>
		<link>http://developingux.com/2010/01/17/practice-object-oriented-development/</link>
		<comments>http://developingux.com/2010/01/17/practice-object-oriented-development/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 05:48:28 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[developer practices]]></category>
		<category><![CDATA[learn]]></category>
		<category><![CDATA[OO]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=757</guid>
		<description><![CDATA[
			
				
			
		
I’m starting off this series talking about Object Oriented Programming. It’s amazing how many people write C# or VB (.NET) with long, procedural methods with really no understanding of the true fundamentals of OO design.
I know, I know – it’s not you, and know what? I’m not talking about you.. but check out the code [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F17%2Fpractice-object-oriented-development%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F17%2Fpractice-object-oriented-development%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><a href="http://developingux.com/wp-content/uploads/2010/01/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/01/image_thumb.png" border="0" alt="image" width="534" height="213" /></a></p>
<p>I’m starting off <a href="http://developingux.com/topic/10-developement-practices/">this series</a> talking about Object Oriented Programming. It’s amazing how many people write C# or VB (.NET) with long, procedural methods with really no understanding of the true fundamentals of OO design.</p>
<p>I know, I know – it’s not you, and know what? I’m not talking about you.. but check out the code from the person <em>next</em> to you. See what I mean?</p>
<p><strong>Just because you’re writing in an OO language, doesn’t mean that you’re writing OO code</strong>, or taking advantage of the Object Oriented benefits. An Object Oriented language is more than classes with methods, properties and events (even VB 6 had that!).</p>
<p><strong><span style="font-size: small">Learn the Fundamentals. </span></strong></p>
<p><span id="more-757"></span></p>
<p>Get to know <a href="http://msdn.microsoft.com/en-us/library/87d83y5b.aspx">Interfaces</a>, <a href="http://msdn.microsoft.com/en-us/library/sf985hc5.aspx">abstract</a> <a href="http://msdn.microsoft.com/en-us/library/0b0thckt.aspx">classes</a>, <a href="http://msdn.microsoft.com/en-us/library/ah19swz4.aspx">structs</a>. I’m not picking on the thousands and thousands of extremely talented .NET developers that came from VB6 (I’m one of them), but I am acknowledging the fact the there are OO tools and strategies at your disposal now that never were before.  Dig in to the <a href="http://msdn.microsoft.com/en-us/library/ms173171.aspx">delegates</a> and the <a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx">various</a> eventing models, chained constructors, virtual and overridden methods. Go beyond if statements, while loops and <a href="http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx">language syntax</a> <em>similarities</em> and embrace your new <a href="http://msdn.microsoft.com/en-us/library/ms173152.aspx">polymorphic</a> self.</p>
<p>Perhaps, you’ve been a very successful developer for a very long time, I’m not saying that you <em>have</em> to change how you write <em>all</em> of your code. I am however, suggesting that you should realize that you have more tools in your toolbox than you might be aware of, and that if you learn how to use those tools, you will be more successful using the right tool for the right job.</p>
<p><strong><span style="font-size: small">Go beyond the fundamentals.</span></strong> A friend of mine teaches Object Oriented Analysis and Design for SMU, he once told me that if you have to use an if statement in your code then you’re not doing OO – it’s now procedural. I think he meant his statement in jest, (Although, he actually doesn’t allow his students to use if statements past the third section in his course) but the point was well taken. Beyond language semantics lie’s a whole world of patterns, approaches, and ways of doing OO that can make your life much, much simpler.</p>
<h3>Pragmatic – Make new friends, but keep the old ones..</h3>
<p>I’m not that much of an OO purist. I actually do feel that sometimes a well laid our “procedural” method can be easier to read, and communicate the intent of the code, but it’s a balancing act. Every time you write an if/switch statement you fork the flow of your code and increase it’s complexity, reducing your ability to maintain and test it. An OO purest might create a polymorphic object at this point and hop over to it instead of writing that if statement. I’m not saying that one way is better than the other. Like I said, writing readable/maintainable/testable code is a balancing act.</p>
<p><span style="font-size: small"><strong>Beware of being “too” OO</strong>.</span> It’s easy to get too pure on your OO. I’ve worked on systems where I had to fight through 7 to 8 levels of inheritance debugging and fighting all the way to figure out what in the world the system was doing. I’ve seen developers take 30 lines of procedural code and convert them in to 60 or 70 unique classes spread out over 6 projects. You <em>can</em> have too much of a good thing!</p>
<p><a href="http://developingux.com/wp-content/uploads/2010/01/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/01/image_thumb1.png" border="0" alt="image" width="464" height="298" /></a></p>
<p align="left">Is it OK to be “procedural” sometimes… can you be too OO?</p>
<p align="left"><a href="http://developingux.com/wp-content/uploads/2010/01/image4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/01/image_thumb2.png" border="0" alt="image" width="474" height="100" /></a></p>
<p align="left">The truth is, you want to <strong>use the right tool for the right job. The code on top is probably pretty readable and is fine… *right now*</strong> it won’t be too long and you’re going to want to start moving it closer to something like on the bottom. Why? With every scenario, and rule that gets applied to shipping orders, this code becomes less readable and harder to test. It won’t be long until you’re going to want to start validating (unit testing) your various order processes independent of each other. You’re going to want to break apart the <em>coordination</em> of an order, <em>determination (the factory)</em> of an order, from how it is actually handled… as you do that, your code will start to become more <em>SOLID</em>… but we’ll save that for the next post.</p>
<h3>Interview Question Alert</h3>
<p>Some of the related questions that I often ask:</p>
<p><strong><span style="font-size: small">Q:</span></strong>What’s the difference between an Interface and an Abstract class? When would you use one over the other? What implications does that have?</p>
<p><strong><span style="font-size: small">A:</span></strong> Interfaces define the contract with zero implementation, Abstract classes <em>can</em> have some implementation, but for the most part don’t. You can inherit from one base class, but implement as many Interfaces as you’d like to. Abstract classes can be versioned (if you’re going to strongly name them) but Interfaces cannot be versioned. <strong>Bonus Answer:</strong> Whenever you create an abstract class, you should always have an Interface to go with it, then code your dependencies to the Interface, not the abstract class.</p>
<p><strong><span style="font-size: small">Q:</span></strong> &#8220;Polymorphic&#8221; is a big OO word that developers like to throw around. Give a practical example of when you&#8217;ve used polymorphic behaviors in your code.</p>
<p><strong><span style="font-size: small">A:</span></strong> Anytime you use an abstract factory you&#8217;re implementing polymorphic principals. So the &#8220;processor.Process()&#8221; method above would be an example of Polymorphism, so would most Interface based development.</p>
<h3>Further Reading</h3>
<p>I hope this post has inspired you at some level to keep honing your development skills. I know that it was heavier on the “why” and low on the “how” specifics… I think that’s part of the point. You’ve got to go tackle some of this yourself. So go on, get out there.</p>
<p>Wikipedia &#8211; <a href="http://en.wikipedia.org/wiki/Object_oriented">http://en.wikipedia.org/wiki/Object_oriented</a></p>
<p>Book: <a href="http://www.amazon.com/Object-Thinking-DV-Microsoft-Professional-David/dp/0735619654/qid=1263786378">Object Thinking – MS Press</a></p>
<p><a href="http://www.amazon.com/Object-Thinking-DV-Microsoft-Professional-David/dp/0735619654/qid=1263786378"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2010/01/image2.png" border="0" alt="image" width="115" height="141" /></a></p>
<p>What are the resources that have helped you the most in your software development?</p>
<p>Photo Credit: <a href="http://www.flickr.com/photos/wwworks/sets/72157594328095699/">http://www.flickr.com/photos/wwworks/sets/72157594328095699/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/01/17/practice-object-oriented-development/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Introduction &#8211; 10 Development Practices</title>
		<link>http://developingux.com/2010/01/16/introduction-10-development-practices/</link>
		<comments>http://developingux.com/2010/01/16/introduction-10-development-practices/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 17:02:36 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[developer practices]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=747</guid>
		<description><![CDATA[
			
				
			
		
If you are going to read through my “10 practices that every developer should start right now” series, then you probably want to know where these 10 practices came from, why I chose these 10 – really, what so important about secure coding anyway?     &#8211; I think that it’s important to know [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F16%2Fintroduction-10-development-practices%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F16%2Fintroduction-10-development-practices%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><a href="http://developingux.com/wp-content/uploads/2010/01/lights_ws.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px" title="lights_ws" src="http://developingux.com/wp-content/uploads/2010/01/lights_ws_thumb.png" border="0" alt="lights_ws" width="533" height="214" /></a></p>
<p><span style="font-size: large;">If</span> you are going to read through my “<a href="http://developingux.com/topic/10-developement-practices/">10 practices that every developer should start right now</a>” series, then you probably want to know where these 10 practices came from, why I chose these 10 – really, what so important about secure coding anyway? <img src='http://developingux.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />    &#8211; I think that it’s important to know that these aren’t just 10 random items to fill a couple of blog posts. These are all practices that have been thoroughly thought out. This list is something that I started to formulate over a year ago based on my experience as a consultant, working as a technical editor, and discussions with countless MVPs, other consultants and in my interviews with potential consultants&#8230;<span id="more-747"></span></p>
<p><strong>Experience</strong>. First, these 10 practices have come from over 15 years of professional development work, working with countless customers when I was at Microsoft, as well as the numerous development shops and enterprise customers that I’ve been a consultant for over the last many years. These are, what I consider, to be the biggest bang for your buck, the low hanging fruit that you can quickly implement and the practices that will yield the greatest value in the shortest time.</p>
<p><strong>Writing a Book.</strong> I once had the privilege of working as a Technical Editor on a C# 3.0 book. That experience was both rewarding <em>and</em> frustrating. It was rewarding to go through the process, engage with the executive editors, author and see the whose process of writing a technical book move forward. It was <em>also</em> frustrating to know that – while everything in the book was <em>technically</em> accurate – it often was not the <em>content</em> that I would have wanted to cover. These are the things that I want to talk about.</p>
<p><strong>Hiring.</strong> Over the years, but especially during my time as a Principal consultant for <a href="http://improvingenterprises.com/">Improving Enterprises</a> and now as the Senior Software Architect for <a href="http://www.sixflags.com">Six Flags</a>, I’ve spent countless hours interviewing various – really smart people – that often fell short. (I’m a nice guy – but apparently a pretty heavy handed interviewer). I’ve discovered that the things that matter in software development – are often not taught, even in the best schools. These are the topics that I wish every CIS/ MIS department would start covering to some extent. I sometimes wished that I had a “quick read” book that I could hand to people on their way out and say “here, read this. This is what you should know before you try to work here.”</p>
<p><strong>Scope</strong> – Obviously any one of these topics could be a whole book in and of itself. So none of these posts are going to be intended as a “complete” reference or anything like that. More like “Caleb’s thoughts on the matter.”… and hopefully some useful insights, and enough information to let you, Dear Reader, move forward and know where to go from here.</p>
<p>So that’s my introduction. I hope that you’ll join me as we dig in to all 10 practices.</p>
<p><a href="http://developingux.com/topic/10-developement-practices/">Enjoy the ride!</a></p>
<p>photo credit: <a href="http://www.flickr.com/people/wonderlane/">flickr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/01/16/introduction-10-development-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>10 practices that every developer needs to start right now</title>
		<link>http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/</link>
		<comments>http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 07:55:54 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[10 Developement Practices]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[developer practices]]></category>
		<category><![CDATA[ninja]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=732</guid>
		<description><![CDATA[
			
				
			
		Update: Since technically a DI Container could be considered part of SOLID, I&#8217;ve swapped it out for Secure Coding&#8230; more on this soon!
If I ever right a book on becoming a .NET Ninja, these are the things that I want to cover.
Introduction
OO
SOLID
Use a Container (DI)
Secure Coding 101
Patterns
Automated Tests
Source Control
Continuous Integration
Agile &#124; Lean &#124; Scrum &#124; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F06%2F10-practices-every-developer-needs-right-now%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2010%2F01%2F06%2F10-practices-every-developer-needs-right-now%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><strong>Update</strong>: Since technically a DI Container could be considered part of SOLID, I&#8217;ve swapped it out for Secure Coding&#8230; more on this soon!</p>
<p>If I ever right a book on becoming a .NET Ninja, these are the things that I want to cover.<a href="http://www.flickr.com/photos/earlysound/2826538182/sizes/m/"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="Ask a Ninja Handbook" src="http://developingux.com/wp-content/uploads/2010/01/NinjaBook.jpg" border="0" alt="Ask a Ninja Handbook" width="227" height="303" align="right" /></a></p>
<h2><a href="http://developingux.com/2010/01/16/introduction-10-development-practices/">Introduction</a></h2>
<h2><a href="http://developingux.com/2010/01/17/practice-object-oriented-development/">OO</a></h2>
<h2><a href="http://developingux.com/2010/02/09/solid-development/">SOLID</a></h2>
<h2><span style="text-decoration: line-through;">Use a Container (DI)</span></h2>
<h2><a href="http://developingux.com/2010/02/10/secure-coding-101/">Secure Coding 101</a></h2>
<h2><a href="http://developingux.com/2010/03/10/practice-software-patterns/">Patterns</a></h2>
<h2>Automated Tests</h2>
<h2>Source Control</h2>
<h2>Continuous Integration</h2>
<h2>Agile | Lean | Scrum | XP</h2>
<h2>Team Dynamics</h2>
<h2>Never Stop Learning</h2>
<p>Eventually, I’d like to write a book and dedicate at least a chapter to each of these (although any one of these topics could be a book in and of itself) In the mean time, I think that I’ll start with a blog post on each one, and maybe make it a goal to eventually do a User Group talk covering each topic? I’m looking forward to flushing these out as posts. I hope that you will enjoy them too!</p>
<p><strong>What sort of things would you add to the list?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2010/01/06/10-practices-every-developer-needs-right-now/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Windows 7 Launch Videos for Developers Available Online.</title>
		<link>http://developingux.com/2009/12/10/windows-7-launch-videos-for-developers/</link>
		<comments>http://developingux.com/2009/12/10/windows-7-launch-videos-for-developers/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 18:30:17 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[dallas]]></category>
		<category><![CDATA[Windows7]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=728</guid>
		<description><![CDATA[
			
				
			
		Last month (November 4th, 2009), I had the privilege of speaking at Microsoft’s “The New Efficiency” Launch for Windows 7 and Windows Server 2008 R2 in Dallas. While no one was there to record *my sessions* specifically, Microsoft has posted similar session from other parts of the country. I wish I could link (or embed) [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F12%2F10%2Fwindows-7-launch-videos-for-developers%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F12%2F10%2Fwindows-7-launch-videos-for-developers%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p>Last month (November 4th, 2009), I had the privilege of speaking at Microsoft’s “<a href="http://thenewefficiency.com">The New Efficiency</a>” Launch for <a href="http://www.microsoft.com/windows/">Windows 7</a> and <a href="http://www.microsoft.com/servers/">Windows Server 2008 R2</a> <a href="http://www.sevenforums.com/news/21064-new-efficiency-launch-events-windows-7-a.html">in Dallas</a>. While no one was there to record *my sessions* specifically, Microsoft has posted similar session from other parts of the country. I wish I could link (or embed) them directly since it takes some clicking to get to them. Instead, here’s a quick walkthrough. Enjoy!</p>
<p><a href="http://developingux.com/wp-content/uploads/2009/12/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="177" alt="image" src="http://developingux.com/wp-content/uploads/2009/12/image_thumb.png" width="519" border="0" /></a> 1. Go to Microsoft’s “The New Efficiency” website <a title="http://thenewefficiency.com" href="http://thenewefficiency.com">http://thenewefficiency.com</a> *</p>
<p> <span id="more-728"></span>
<p>* Site requires <a href="http://silverlight.net">Microsoft Silverlight</a></p>
<p><a href="http://developingux.com/wp-content/uploads/2009/12/image1.png"><img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="234" alt="image" src="http://developingux.com/wp-content/uploads/2009/12/image_thumb1.png" width="519" border="0" /></a> 2. Click on the “Watch The US Event” link</p>
<p>3. Check out all of the “For Developers” videos…</p>
<p><a href="http://developingux.com/wp-content/uploads/2009/12/image2.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="333" alt="image" src="http://developingux.com/wp-content/uploads/2009/12/image_thumb2.png" width="524" border="0" /></a> </p>
<p>4. Sit back, and enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2009/12/10/windows-7-launch-videos-for-developers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>“draft whurley” Featured on Linux.com</title>
		<link>http://developingux.com/2009/09/16/draft-whurely-featured-on-linux-com/</link>
		<comments>http://developingux.com/2009/09/16/draft-whurely-featured-on-linux-com/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:14:04 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[whurley]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=712</guid>
		<description><![CDATA[
			
				
			
		Last Thursday I posted my thoughts about Microsoft’s OSS announcements (go digg it: 3 Reasons Microsoft Needs an Open Source Officer), namely the formation of the CodePlex Foundation (awesome) and the departure of Sam Ramji (bummer). My take is that this is a great opportunity for Microsoft to take open source projects at Microsoft up [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F16%2Fdraft-whurely-featured-on-linux-com%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F16%2Fdraft-whurely-featured-on-linux-com%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft"><img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="268" alt="image" src="http://developingux.com/wp-content/uploads/2009/09/image3.png" width="532" border="0" /></a>Last Thursday I posted my thoughts about Microsoft’s OSS announcements (go digg it: <a href="http://digg.com/d313u8n">3 Reasons Microsoft Needs an Open Source Officer</a>), namely the formation of the CodePlex Foundation (awesome) and the departure of Sam Ramji (bummer). My take is that this is a great opportunity for Microsoft to take open source projects at Microsoft up a notch and raise the stakes with a big bold move by bringing in someone like my friend <a href="http://whurley.com/">whurley</a> (William Hurley – currently the <a href="http://communities.bmc.com/communities/blogs/bmcpodcasts/tags/whurley">chief architect of open source strategy at BMC</a>). </p>
<p>This morning I turned on my computer to see that <a href="http://twitter.com/TechManTalking">Todd Weiss</a> and the folks at <a href="http://www.linux.com/">Linux.com</a> had featured this idea on their home page. Go check it out the <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">full article</a>!</p>
<p> <span id="more-712"></span>
<div class="code2">
<h3>Related Reading</h3>
<ul>
<li>Be sure to check out <a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation and <a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> as well.</li>
<li>Scott Bellware just chimed in on how the Codeplex Foundation is a &#8220;watershed moment, a turning point for the Microsoft platform and .NET community&#8221; &#8211; I couldn&#8217;t agree more. Go <a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">check out his complete article</a>.</li>
<li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li>
<li>Red Monk&#8217;s <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&#038;A on the CodePlex</a> Foundation</li>
<li>Featured on Linux .com! <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">Who Will Fill Sam Ramji&#8217;s Role as Microsoft&#8217;s Open Source Leader?</a></li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2009/09/16/draft-whurely-featured-on-linux-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dependency Injection on ARCast TV</title>
		<link>http://developingux.com/2009/09/14/dependency-injection-on-microsoft-arcast-tv/</link>
		<comments>http://developingux.com/2009/09/14/dependency-injection-on-microsoft-arcast-tv/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 16:11:22 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[CommunityCast Events]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[ARCast]]></category>
		<category><![CDATA[brianprince]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=699</guid>
		<description><![CDATA[
			
				
			
		While I was out at the MVP Summit this summer I had a chance to catch up with Brian Prince from Microsoft and we talked about using Dependency Injection for better code level architecture.  Check out the full video on Microsoft’s ARCCast.
When you’re done. Check out my Dependency Injection on Silverlight presentation.
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F14%2Fdependency-injection-on-microsoft-arcast-tv%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F14%2Fdependency-injection-on-microsoft-arcast-tv%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><p><a href="http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-ARCastTV-Caleb-Jenkins-on-Dependency-Injection/"><img style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" title="image" src="http://developingux.com/wp-content/uploads/2009/09/image2.png" border="0" alt="image" width="318" height="198" /></a>While I was out at the <a href="http://developingux.com/2009/02/27/mvp-summit-next-week/">MVP Summit</a> this summer I had a chance to catch up with <a href="http://www.brianhprince.com/">Brian Prince</a> from Microsoft and we talked about using Dependency Injection for better code level architecture.  Check out the full video on <a href="http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-ARCastTV-Caleb-Jenkins-on-Dependency-Injection/">Microsoft’s ARCCast</a>.</p>
<p>When you’re done. Check out my <a href="http://developingux.com/2008/12/18/dependency-injection-with-silverlight/">Dependency Injection on Silverlight</a> presentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2009/09/14/dependency-injection-on-microsoft-arcast-tv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3 Reasons Microsoft Needs an Open Source Officer</title>
		<link>http://developingux.com/2009/09/10/3-reasons-microsoft-needs-open-source-officer/</link>
		<comments>http://developingux.com/2009/09/10/3-reasons-microsoft-needs-open-source-officer/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 04:46:23 +0000</pubDate>
		<dc:creator>Caleb Jenkins</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[whurley]]></category>

		<guid isPermaLink="false">http://developingux.com/?p=687</guid>
		<description><![CDATA[
			
				
			
		
Related

Featured article on Linux.com
ars techica’s article on the Codeplex Foundation
Jeremy’s Post on CodeBetter
Scott Bellware chimed in on this &#8220;watershed moment, a turning point for the Microsoft platform and .NET community&#8221; &#8211; I couldn&#8217;t agree more.
Phil Haack is shedding some more light on Codeplex Foundation
Red Monk&#8217;s Q&#038;A on the CodePlex Foundation


 Today there were two big [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px; z-order:25;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F10%2F3-reasons-microsoft-needs-open-source-officer%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdevelopingux.com%2F2009%2F09%2F10%2F3-reasons-microsoft-needs-open-source-officer%2F&amp;source=calebjenkins&amp;style=normal" height="61" width="50" />
			</a>
		</div><div class="related">
<h3>Related</h3>
<ul>
<li>Featured <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">article on Linux.com</a></li>
<li><a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation</li>
<li><a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> on CodeBetter</li>
<li><a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">Scott Bellware chimed in</a> on this &#8220;watershed moment, a turning point for the Microsoft platform and .NET community&#8221; &#8211; I couldn&#8217;t agree more.</li>
<li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li>
<li>Red Monk&#8217;s <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&#038;A on the CodePlex</a> Foundation</li>
</ul>
</div>
<p><a href="http://digg.com/d313u8n"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 5px 0px; border-right-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2009/09/image1.png" border="0" alt="Digg this!" width="56" height="30" align="right" /></a> Today there were two big announcements from Microsoft regarding their involvement with the Open Source communities. First, was the formation of the <a href="http://codeplex.org/">CodePlex foundation</a>, an open source foundation for the</p>
<blockquote>
<h4>Enabling the exchange of code and understanding among software companies and open source communities</h4>
</blockquote>
<p>Awesome. Great. Fantastic. This is the natural progression of a lot of the open source work that’s been happening at <a href="http://www.codeplex.com/">CodePlex</a>, in the <a href="http://www.codeplex.com/aspnet">ASP.NET MVC</a> stack and a lot of <a href="http://www.codeplex.com/wpf">the</a> <a href="http://www.codeplex.com/Silverlight">other</a> <a href="http://www.ironruby.net/">OSS</a> <a href="http://ironpython.codeplex.com/">projects</a> that Microsoft has been initiating and <a href="http://blog.jquery.com/2008/09/28/jquery-microsoft-nokia/">contributing</a> to lately.</p>
<p>The other announcement was more disappointing, <a href="http://port25.technet.com/members/billhilf.aspx">Bill Hilf</a>, the general manager of Windows, <a href="http://port25.technet.com/archive/2009/09/10/Sam-Ramji-is-leaving-microsoft.aspx">announced</a> that <a href="http://port25.technet.com/members/Sam%20Ramji%20.aspx">Sam Ramji</a> would be leaving his post at Microsoft to be the interim president of the CodePlex Foundation (cool – but why interim?) and then he would be pursuing some other opportunity.</p>
<p align="center"><a href="http://port25.technet.com/members/billhilf.aspx"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="Bill Hilf" src="http://developingux.com/wp-content/uploads/2009/09/Bill.jpg" border="0" alt="Bill" width="80" height="80" /></a> <a href="http://port25.technet.com/members/Sam%20Ramji%20.aspx"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="sam" src="http://developingux.com/wp-content/uploads/2009/09/sam.jpg" border="0" alt="Sam Ramji" width="80" height="80" /></a></p>
<p><span id="more-687"></span></p>
<blockquote>
<p align="left">Sam’s primary focus is to drive Microsoft’s Linux and Open Source Strategy, working together with Microsoft technology development teams and open source communities to build interoperable solutions</p>
</blockquote>
<p>Horrible. Tragic. What a loss. At least, that’s what I thought at first. The truth is that Sam is leaving a much different Microsoft than the one he joined three years ago. A better, more open Microsoft. I agree with <a href="http://port25.technet.com/archive/2009/09/10/Sam-Ramji-is-leaving-microsoft.aspx">Bill’s assessment</a>,</p>
<blockquote><p>Microsoft&#8217;s open source strategy is no longer just locked in a single ‘lab&#8217; on campus &#8211; now OSS is an important part of many product groups and strategies across the company</p></blockquote>
<p>Sam’s role seems to be that of an OSS advocate, working to build OSS awareness and acceptance from group to group within Microsoft. Well done. Mission *mostly* accomplished.</p>
<p>So where does that leave us? I believe that at certain times in history a company like Microsoft will be faced with opportunities. Opportunities to move boldly forward or slink back in to the status quo, and (to quote that great philosopher and social commentator <a href="http://en.wikipedia.org/wiki/Dr._Horrible's_Sing-Along_Blog">Dr. Horrible</a>) the status, <a href="http://www.drhorrible.com/">is not quo</a>. I believe that now is the time for Microsoft to up the ante.</p>
<p>Rather than replace Sam, with yet another “Senior Director” – how many of those are at Microsoft? – I believe it’s Microsoft’s time to embrace an OSS strategy that moves beyond the director level. They need to show the world a bold move, <a href="http://www.itwire.com/content/view/13779/53">similar to what BMC did</a> over 2 years ago. Microsoft needs an Open Source advocate with teeth.</p>
<h3>Three reasons Microsoft needs an Open Source Officer</h3>
<ol>
<li>The Timing is Right – The Momentum is there.<br />
Change is in the air. Sam is moving on. The Codeplex foundation has launched, there’s a new Chief Architect in town, and Microsoft has embraced many aspects of OSS is so many areas of their business because they have realized that – when it makes sense and in the right environment, OSS is good for business and good for your customers.</li>
<li>It’s a different world out there.<br />
Not only has the world inside of Microsoft changed, so has the competition. Microsoft is increasingly competing in an <a href="http://www.visitmix.com/">open web world</a>, with <a href="http://www.visitmix.com/Search?Tag=Web%20Standards">open standards</a> against <a href="http://code.google.com/android/">open platforms</a>. More and more, these competitors also become their <a href="http://code.google.com/android/">partners</a> and <a href="http://dotnetnuke.codeplex.com/">customers</a>.</li>
<li>Go big or go home.<br />
I believe that it is the spirit of Microsoft to take on new challenges, to put there money where there mouth is, and to embrace a big future with a strong vision.</li>
</ol>
<p><a href="http://gapingvoid.com/"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://farm1.static.flickr.com/191/496200921_94b2379d82_m.jpg" alt="" /></a></p>
<p>Who should they hire? Well, I’m sure there are a lot of qualified people in this space, and I’m not going to mention anyone specific by name here… but if you <a href="http://twitter.com/calebjenkins">follow my twitter feed</a> then you might have seen something that I <a href="http://twitter.com/CalebJenkins/status/3895969262">posted</a> earlier today.</p>
<p><a href="http://twitter.com/CalebJenkins/status/3895969262"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="image" src="http://developingux.com/wp-content/uploads/2009/09/image.png" border="0" alt="image" width="499" height="220" /></a></p>
<p>… and hey Microsoft, if you’re listening, I wasn’t the only one that thought that…</p>
<p><a href="http://developingux.com/wp-content/uploads/2009/09/whurely.png"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="@whurely" src="http://developingux.com/wp-content/uploads/2009/09/whurely_thumb.png" border="0" alt="@whurely" width="378" height="819" /></a></p>
<p align="right">… I’m just sayin.</p>
<div class="code2">
<h3>Updates:</h3>
<ul>
<li>Be sure to check out <a href="http://arstechnica.com/open-source/news/2009/09/new-microsoft-backed-open-source-foundation-faces-questions.ars">ars techica’s article</a> on the Codeplex Foundation and <a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/09/11/some-quick-thoughts-about-the-new-codeplex-oss-initiative.aspx">Jeremy’s Post</a> as well.</li>
<li>Scott Bellware just chimed in on how the Codeplex Foundation is a &#8220;watershed moment, a turning point for the Microsoft platform and .NET community&#8221; &#8211; I couldn&#8217;t agree more. Go <a href="http://blog.scottbellware.com/2009/09/analysis-codeplex-foundation-terms-of.html">check out his complete article</a>.</li>
<li>Phil Haack is <a href="http://haacked.com/archive/2009/09/13/more-on-the-codeplex-foundation.aspx">shedding some more light on Codeplex</a> Foundation</li>
<li>Red Monk&#8217;s <a href="http://redmonk.com/sogrady/2009/09/11/codeplex/">Q&#038;A on the CodePlex</a> Foundation</li>
<li>Featured on Linux .com! <a href="http://www.linux.com/news/enterprise/biz-enterprise/46125-who-will-fill-sam-ramjis-role-as-linux-and-open-source-leader-at-microsoft">Who Will Fill Sam Ramji&#8217;s Role as Microsoft&#8217;s Open Source Leader?</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://developingux.com/2009/09/10/3-reasons-microsoft-needs-open-source-officer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	<div class="post-cnt">
<p>Caleb Jenkins, is a recognized Silverlight expert and Senior Architect Team Lead at Six Flags Corp, a National Speaker for INETA, a Technical Editor for Wrox Press and is a Microsoft MVP. He lives in the Dallas, TX area where he continues to date his beautiful wife and busy himself playing Candy Land and xBox 360 with their four incredible children. Eventually he’ll post some of the gazillion interviews that he's recorded on CommunityCast.tv or blog more... or stop speaking of himself in the third person. <a href="/about/">more...</a></p>

<p>If you're still reading this, then take a minute to <a href="http://feeds.feedburner.com/CalebJenkins">subscribe to my RSS feed</a> or sign up to <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1320550&loc=en_US">receive updates by email</a></p></div>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.553 seconds -->
