<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Quantum Organics</title>
	
	<link>http://www.quantum-organics.com/blog</link>
	<description>better living through entropy</description>
	<pubDate>Mon, 07 Jul 2008 04:36:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/quantum-organics" type="application/rss+xml" /><item>
		<title>The Importance of the ALT.NET Movement</title>
		<link>http://feeds.feedburner.com/~r/quantum-organics/~3/328578474/</link>
		<comments>http://www.quantum-organics.com/blog/2008/07/07/the-importance-of-the-altnet-movement/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 04:36:59 +0000</pubDate>
		<dc:creator>Scott Caligan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[learning]]></category>

		<category><![CDATA[practices]]></category>

		<guid isPermaLink="false">http://www.quantum-organics.com/blog/?p=13</guid>
		<description><![CDATA[Or: Why Should I Care?
I know some of you are probably saying to yourselves, &#8220;what is the ALT.NET movement&#8221;? In short, the movement is a growing community of .NET developers who are frustrated with the tooling and guidance provided by Microsoft, as well as the closed, insular nature of the .NET development community.  The movement [...]]]></description>
			<content:encoded><![CDATA[<p>Or: <em>Why Should I Care?</em></p>
<p>I know some of you are probably saying to yourselves, &#8220;what <em>is</em> the ALT.NET movement&#8221;? In short, the movement is a growing community of .NET developers who are frustrated with the tooling and guidance provided by Microsoft, as well as the closed, insular nature of the .NET development community.  The movement is aimed at educating the .NET community and showing that there <em>are</em> proven alternatives to &#8220;the Microsoft way&#8221; in terms of software architectures and that there <em>are</em> mature, viable alternatives to the development tools produced by Microsoft.  So why is this important?<br />
<span id="more-13"></span></p>
<h4>These Lessons have Already Been Learned</h4>
<p>There are countless examples of proven practices and tools that are common in other object-oriented environments from Smalltalk to Java to Ruby that Microsoft has been slow to embrace or promote in .NET. Automated unit testing and test-driven development (<acronym title="test-driven development">TDD</acronym>) have never been given much support from Microsoft, yet it is an important part of a quality-first approach and has long been a core practice in Extreme Programming.  Model-view-controller (<acronym title="Model View Controller">MVC</acronym>) architectures have been around since 1979 and are widely used in other object-oriented platforms like Java.  The wildly popular Rails platform for Ruby is based around an <acronym title="Model View Controller">MVC</acronym> architecture.  Yet it has never been promoted by Microsoft, and has always been difficult to do in <acronym title="Active Server Pages">ASP</acronym>.NET.</p>
<p>Object-relational mapping (<acronym title="object-relational mapping">ORM</acronym>) is another architectural pattern that has long been ignored (and even dismissed) by the .NET community.  Object-oriented design produces models that are conceptually very different than the models used by relational databases, resulting in an &#8220;<a href="http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch">impedence mismatch</a>.&#8221; An <acronym title="object-relational mapping">ORM</acronym> framework aims to mask the complexity of this mapping, allowing object-oriented software to evolve independently of its relational data store.  Hibernate has practically become the standard <acronym title="object-relational mapping">ORM</acronym> in the Java world since its creation in 2001. It is integrated with all the major application frameworks and is even used by Google.  Why not apply these lessons to .NET development?</p>
<h4>Your Job Could Be Easier</h4>
<p>In the mainstream Microsoft development community, the majority of the focus is placed on data-centric architectures and rapid application development through visual tooling.  Chances are that if you&#8217;ve ever worked on larger-scale projects, or systems that need to evolve over time or be maintained for any period of time, you&#8217;ve run into problems with the Microsoft way and encountered pain.  The Microsoft endorsed approach to data access has long been to work from the data model, building stored procedures, and accessing the procedures through data access objects (DAOs).  Using code generation techniques, this can be a fairly fast process, using metadata to create both the stored procedures and DAOs instantly.</p>
<p>But what happens next?  What if you&#8217;ve put business logic into the stored procedures?  What if you&#8217;ve customized your DAOs?  What do you do when you have to add new columns to one of your tables?  You end up having to manually update your insert procedures, your update procedures, and probably a handful of retrieval procedures.  Then you have to update all of your DAOs to match the updated procedures. You may end up with some DAO methods that only partially populate your business objects. If so, you have to mentally keep track of how you got the data and whether that particular method returned all the data you need.  And how would you go about unit testing your application?</p>
<p>If you&#8217;re working on a small project, or a throwaway prototype, this might not be a big deal.  On the other hand, if you&#8217;re working on a larger project or if your system is evolving from month to month over a year or more, you&#8217;ve got a lot of pain ahead of you.  Why not use an <acronym title="object-relational mapping">ORM</acronym>?  Microsoft is finally getting with the times and releasing their own <acronym title="object-relational mapping">ORM</acronym> solutions, like the Entity Framework and Linq, but these aren&#8217;t the only options. In fact, they may not be the best options for you.  Both are in their 1.0 releases and have limited support for databases beyond <acronym title="Structured Query Language">SQL</acronym> Server.  Mature alternatives exist.  For example, <a href="http://www.nhibernate.org">NHibernate</a> is a .NET port of Java&#8217;s Hibernate <acronym title="object-relational mapping">ORM</acronym> framework.  It is built on a solid foundation, backed by 5+ years of experience and lessons.  It supports all the major databases out of the box, and can be easily extended. It performs well. It is built on top of ADO.NET, and makes it fairly easy to use custom <acronym title="Structured Query Language">SQL</acronym> or stored procedures using the ADO.NET <acronym title="Application Programming Interface">API</acronym> you&#8217;re already familiar with. Plus it is an open source tool, meaning that there is zero cost involved.</p>
<p>The point here isn&#8217;t that you should always use an <acronym title="object-relational mapping">ORM</acronym>, or that you should use NHibernate rather than Entity Framework or Linq or some other .NET <acronym title="object-relational mapping">ORM</acronym> like <a href="http://code.google.com/p/wilsonormapper/">WORM</a> or <a href="http://www.llblgen.com">LLBLGen</a>.  The point is that mature, viable alternatives exist.  <acronym title="Model View Controller">MVC</acronym> frameworks like <a href="http://castleproject.org/monorail/">Castle MonoRail</a> and <a href="http://www.springframework.net">Spring.NET</a> have evolved from implementations in the Ruby and Java worlds.  Unit testing frameworks like <a href="http://www.nunit.org">NUnit</a> and <a href="http://www.mbunit.com/">MbUnit</a> are free and have been around a lot longer than Microsoft&#8217;s current offering, which is still only available with the professional edition (or higher) of Visual Studio 2008.  One of the primary objectives of the ALT.NET movement is to increase awareness of these alternatives within the .NET community.</p>
<h4>Microsoft is Listening&#8230; and Responding</h4>
<p>This movement wouldn&#8217;t be so important if Microsoft wasn&#8217;t listening.  Fortunately they are, and the ALT.NET movement is already having a huge impact at Microsoft itself.  The movement was named by Microsoft MVP <a href="http://laribee.com/blog/2007/04/10/altnet/">Dave Laribee</a> in April 2007 and quickly gained momentum in a segment of the MVP community and the .NET open source community. Over the next several months, Microsoft made a number of key hires from within this community, including high-profile bloggers like <a href="http://www.hanselman.com/blog/IsMicrosoftLosingTheAlphaGeeks.aspx">Scott Hanselman</a> in July and <a href="http://haacked.com/archive/2007/05/20/is-web-development-the-only-development-that-matters.aspx">Phil Haack</a> and <a href="http://blog.wekeroad.com/blog/have-we-aspnet-geeks-lost-something/">Rob Conery</a> a few months later. This instantly created high volume, high impact dialog between Microsoft&#8217;s development teams and the ALT.NET community, and showed Microsoft&#8217;s commitment to the community.</p>
<p>These people weren&#8217;t brought in to act as Microsoft marketing drones, either—they are programmers, after all. They joined <a href="http://weblogs.asp.net/scottgu/default.aspx">Scott Guthrie</a> and company in the developer division to lead work on the <a href="http://www.asp.net/mvc/"><acronym title="Active Server Pages">ASP</acronym>.NET <acronym title="Model View Controller">MVC</acronym> framework</a>.  In October, the framework was <a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx">publicly unveiled</a> at the first ALT.NET conference in Austin, Texas.  The framework itself shows that Microsoft is listening, and is truly acting on a lot of the feedback it receives.  It is designed to be extensible and integrate with current open source <acronym title="inversion of control">IoC</acronym> containers like <a href="http://www.castleproject.org/container/index.html">Windsor</a>, <a href="http://www.springframework.net">Spring.NET</a> and <a href="http://structuremap.sourceforge.net">StructureMap</a>.  It is designed to be testable, and Microsoft has provided guidance on creating testing templates for open source testing frameworks like <a href="http://www.nunit.org">NUnit</a>, <a href="http://www.mbunit.com/">MbUnit</a>, and <a href="http://www.codeplex.com/xunit">xUnit.net</a>.</p>
<p>In March 2008, <em><acronym title="Microsoft Developer Network">MSDN</acronym> Magazine</em> focused on a number of ALT.NET topics, including the <acronym title="Active Server Pages">ASP</acronym>.NET <acronym title="Model View Controller">MVC</acronym> framework, the concept of inversion of control (<acronym title="inversion of control">IoC</acronym>), and the process of continuous integration. The issue concluded with an article from Jeremy Miller entitled <a href="http://msdn.microsoft.com/en-us/magazine/cc337902.aspx">&#8220;What is ALT.NET?&#8221;</a>.</p>
<p>More recently, the ALT.NET community has expressed <a href="http://www.infoq.com/news/2008/06/entity-framework-heat">serious concerns</a> about Microsoft&#8217;s new Entity Framework.  The EF Team <a href="http://blogs.msdn.com/timmall/archive/2008/06/24/vote-of-no-confidence.aspx">responded to the concerns</a>, and while no changes will be made to the upcoming release, the response was both quick and candid, and pledged a more transparent design process going forward.  Hopefully they will follow the lead of the <acronym title="Active Server Pages">ASP</acronym>.NET <acronym title="Model View Controller">MVC</acronym> team.</p>
<p>At any rate, Microsoft&#8217;s commitment seems clear. The ALT.NET movement will continue to have an impact on the tools and guidance released by Microsoft, and that will have an enormous impact on all .NET developers. If you&#8217;d like to try to make sense of it all, look beyond Microsoft to the ALT.NET community. Hopefully ALT.NET will continue to expand its outreach into the broader .NET community, providing guidance on non-Microsoft tools and continuing striving to incorporate ideas from other developer communities into mainstream Microsoft development.</p>
<h4>More Resources</h4>
<p>If you want to stay informed about your options as a .NET developer beyond the Microsoft press releases, or want to learn more about how practices and patterns from other platforms can be applied to .NET development today, the ALT.NET community can help.</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/magazine/cc337902.aspx">&#8220;What is ALT.NET?&#8221;</a> by Jeremy Miller, March 2008 issue of <em><acronym title="Microsoft Developer Network">MSDN</acronym> Magazine</em></li>
<li><a href="http://www.infoq.com/news/2007/10/fowler-alt.net">&#8220;ALT.NET important to the viable future of the Microsoft ecosystem&#8221;</a> by Udi Dahan, October 2007</li>
<li><a href="http://tech.groups.yahoo.com/group/altdotnet/">ALT.NET Yahoo Group</a></li>
<li><a href="http://altnetpedia.com">Altnetpedia</a></li>
<li><a href="http://www.codebetter.com">CodeBetter.com</a></li>
<li><a href="http://altnetpodcast.com/">Alt.NET Podcast</a></li>
</ul><img src="http://feeds.feedburner.com/~r/quantum-organics/~4/328578474" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.quantum-organics.com/blog/2008/07/07/the-importance-of-the-altnet-movement/feed/</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=quantum-organics&amp;itemurl=http%3A%2F%2Fwww.quantum-organics.com%2Fblog%2F2008%2F07%2F07%2Fthe-importance-of-the-altnet-movement%2F</feedburner:awareness><feedburner:origLink>http://www.quantum-organics.com/blog/2008/07/07/the-importance-of-the-altnet-movement/</feedburner:origLink></item>
		<item>
		<title>Becoming a Better Programmer (An Introduction)</title>
		<link>http://feeds.feedburner.com/~r/quantum-organics/~3/317751398/</link>
		<comments>http://www.quantum-organics.com/blog/2008/06/22/becoming-a-better-programmer-an-introduction/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 01:14:02 +0000</pubDate>
		<dc:creator>Scott Caligan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://www.quantum-organics.com/blog/?p=5</guid>
		<description><![CDATA[Hi, I&#8217;m Scott.  I have been developing software professionally for the past ten years. I&#8217;ve learned a lot during that time, but when I began working in .NET about two years ago, I quickly realized that I had a lot of learning to do. I had been working mostly in ColdFusion and PHP for the [...]]]></description>
			<content:encoded><![CDATA[<p>Hi, I&#8217;m Scott.  I have been developing software professionally for the past ten years. I&#8217;ve learned a lot during that time, but when I began working in .NET about two years ago, I quickly realized that I had a lot of learning to do. I had been working mostly in ColdFusion and <acronym title="PHP: Hypertext Preprocessor">PHP</acronym> for the previous three or four years, and had focused on old school <acronym title="Active Server Pages">ASP</acronym> before that. Sure, a lot of my knowledge and experience was relevant. <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym>, and JavaScript hadn&#8217;t changed much.  <acronym title="Structured Query Language">SQL</acronym> Server and Oracle hadn&#8217;t either.  But as an application developer, the focus is that middle area&#8212;the application&#8212;and after working in (predominantly) procedural languages for eight years, the sudden shift to an object-oriented platform was slightly overwhelming. In my mind, I had three options: give up and go back to a procedural language, try to bend the platform to my procedural mindset, or adopt an object-oriented mindset and become a better programmer.<span id="more-5"></span></p>
<p>Hopefully it is obvious from the title of this post that I chose the third path. Object-oriented programming (<acronym title="object-oriented programming">OOP</acronym>) is not a trend.  It wasn&#8217;t invented yesterday, and it isn&#8217;t going away any time soon. When Microsoft released the .NET framework in 2002, forcing the legions of Visual Basic programmers to learn the new object-oriented <acronym title="Visual Basic">VB</acronym>.NET or perish, that was as clear a signal as any that not only was <acronym title="object-oriented programming">OOP</acronym> here to stay&#8212;it was the mainstream.</p>
<p>I wasn&#8217;t starting completely from scratch. The computer science curriculum from the late &#8217;90s placed a heavy emphasis on <acronym title="object-oriented programming">OOP</acronym>, and I learned it via C++ and Java during that time.  Still, eight years away is a long time and I had a lot that I needed to relearn and I&#8217;d developed a lot of habits that I needed to unlearn. The industry hadn&#8217;t stopped to wait for me, either. Agile development practices now seem intimately linked to <acronym title="object-oriented programming">OOP</acronym> and provide a framework of best practices for ensuring quality. Meanwhile, my family still expects to be fed, and my clients still expect me to deliver software.</p>
<p>I am starting this blog in large part to share my experiences learning <acronym title="object-oriented programming">OOP</acronym> and agile development. In the May/June 2008 issue of <a href="http://www.code-magazine.com">CoDe Magazine</a>, Microsoft <acronym title="Most Valuable Professional">MVP</acronym> Jean-Paul Boodhoo wrote a terrific article called <a href="http://www.code-magazine.com/Article.aspx?quickid=0805021">&#8220;Individuagility&#8221;</a> in which he outlines his approach to teaching agile development. His steps correspond fairly neatly to my own experiences so far. The last point in his list does a great job of summarizing why I have undertaken my personal journey, and why I am documenting it:</p>
<blockquote><p>Become a student of your profession. Most of the people who embark down this style of development do so because they have a passion to want to deliver applications that both please the user as well as please other developers who maintain the code. Like anything else in life, if you want to excel in anything you have to be willing to sacrifice a little. What does this mean? Make a commitment to read a book a month. Take time to download a tool you have no idea about and start spiking it. Speak at a user group. Write a magazine article about your learning. Passion breeds passion. If you get infected, more often than not, others around you will want to take part in the learning that you are going through!</p></blockquote>
<p>Hopefully I&#8217;ll be able to impart some of my passion and advice, and motivate others to start or continue similar journeys.  My goal is one post per week, but as this post is just an introduction I&#8217;m going to try to follow it up in the next day or two with some actual content.  Stay tuned!</p><img src="http://feeds.feedburner.com/~r/quantum-organics/~4/317751398" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.quantum-organics.com/blog/2008/06/22/becoming-a-better-programmer-an-introduction/feed/</wfw:commentRss>
		<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=quantum-organics&amp;itemurl=http%3A%2F%2Fwww.quantum-organics.com%2Fblog%2F2008%2F06%2F22%2Fbecoming-a-better-programmer-an-introduction%2F</feedburner:awareness><feedburner:origLink>http://www.quantum-organics.com/blog/2008/06/22/becoming-a-better-programmer-an-introduction/</feedburner:origLink></item>
	<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=quantum-organics</feedburner:awareness></channel>
</rss>
