Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at
Bridging the Communities

pleasant comment was left on my NHibernate Best Practices article concerning the utter uselessness of going with non-Microsoft technologies.  It troubles me that after years of building a mature, open-source community in the Microsoft world, that this opinion still persists.  This could be regarded as "just one opinion," but it seems to be a pervasive idea that I regularly encounter whenever I'm with more than a few developers (even many senior ones at that).  "There's one in every crowd," as my mother used to say in a feigned attempt to make me feel better after being picked-on during recess.  Thankfully for all of us (or for me anyway), this isn't grade school anymore.  The phenomenal contribution that the open-source community offers to the Microsoft Province must be realized, or at least noted by all.  This isn't a Microsoft.NET vs. ALT.NET face-off; this is about finding the right tools for the job to deliver the highest value to our clients.

Sure, it's not always easy to pick up new technologies, but that's just the nature of the beast if we truly desire to leverage the best tools and techniques for the problem at hand.  As developers we are often forced into situations of lesser comfortability.  I'll never forget the day I switched from Active Server Pages with VBScript to the world of ASP.NET with C#.  The word "discomfort" is an understatement as I began tackling the ASP.NET page life-cycle, a brand new language (C#), and the paradigm of OOP.  With patience, perseverance, and much trial and error, the switch has certainly proven the merits of doing so.  This kind of discomfort is by no means a one time deal throughout our development career.  Recently, I felt similarly uncomfortable, albeit to a far lesser extent, when I began using Castle MonoRail to logically separate presentation from controller/business layers.  Once the "a ha!" moment arrived (which usually arrives over the course of days and weeks, and isn't a moment at all), the benefits were concretely obvious and the discomfort began to melt away. Although it was not a trivial road to take - as it never is - the commitment to figuring out how to leverage MonoRail effectively was greatly rewarded with the satisfaction of developing more maintainable applications in a shorter amount of time, to the benefit of myself and, more importantly, my clients.  The point is that this discomfort will be encountered regardless of whether or not it's a Microsoft provided technology, or a technology from the open-source community; this kind of discomfort must be sought out and welcomed to find the best tools for the job.

Microsoft is in really good.  They successfully write some of the most complicated software in the world and have created (i.e., took lots of great ideas from other languages) one of the best languages available on the market, C#.  Sure they've released some things that they probably wish they hadn't, and sure they've secretly taken over the world with a software mafia, but much of our development success is due to the tools that Microsoft has made available to us (I can see you LAMP people rolling your eyes).  But what Microsoft does not have a patent on are innovation, creativity, and breakthrough ideas.  In fact, it is the world outside of Microsoft that we often need to look to find "the up and coming idea" that will change the way we develop.  MVC.NET is pretty cool, right?  Castle MonoRail has been out for years and still triumphs in ease of use and capabilities over many aspects of MVC.NET.  LINQ to Entities looks like a huge time saver, right?  NHibernate has been in production environments for the last few years and still puts LINQ's capabilities to shame.  That's not to say MonoRail and NHibernate will continue their functional dominance over the recently released Microsoft competition.  Microsoft is hard at work, incorporating the great ideas from these open-source products into mainstream development, as they should be doing!  What's important to note is that although not all open-source projects should be celebrated as paradigms of innovation, many paradigms of innovation have come from open-source projects.  Imagine if NUnit, CruiseControl.NET, log4net, MonoRail, Boo, Spring.NET, PageMethods, NHibernate, NMock, Yahoo UI, or the many other open-source projects which deserve mention, were never written?  (And these are just a few of the development assistance tools out there among a sea of other open-source projects!)  Would we have LINQ today?  Would we have MVC.NET?  Would we have the multitude of applications that Microsoft is releasing to remain competitive with open-source alternatives?  Perhaps...but then again, perhaps not.

It's certainly hard, if not impossible, to determine which non-Microsoft alternatives and open-source projects encapsulate "the next great idea."  But to ignore them all impedes innovation, stifles "pushing the envelope," and makes it harder for Microsoft to figure out what else should be made mainstream in addition to their own ideas.  Microsoft has tremendous talent behind its doors, as does the ALT.NET community.  Keeping either door shut is a detriment to the expression of our own talents and to the benefit of those who are paying our bills.

Billy McCafferty

Posted 01-10-2008 12:20 PM by Billy McCafferty


Comments wrote Bridging the Communities
on 01-10-2008 4:58 PM

You've been kicked (a good thing) - Trackback from

Christopher Bennage wrote re: Bridging the Communities
on 01-10-2008 5:04 PM

Nicely stated, Billy.  I'm amazed at the commenter's attitude.  NHibernate certainly is not the easiest thing to dive into, but wow...  I especially like the bit about Nhibernate making software less maintainable.

Billy McCafferty wrote re: Bridging the Communities
on 01-10-2008 5:18 PM

@Bennage, Yeah, I got a good kick out of that one as well.  It's funny how many (good?) posting ideas I've gotten from receiving a good old-fashion flame.

Jeff Tucker wrote re: Bridging the Communities
on 01-10-2008 5:23 PM

I know I'm going to get it for this one, but I think it needs to be said.  <dons flamesuit>

Unfortunately, I feel like I could have written that comment (I didn't and I wouldn't say stick with Microsoft) and I'd like to take a moment to explain why.  I think the trouble with a lot of these projects is the documentation.  A few things that I have a lot of trouble with the documentation may include nHibernate, Nant, Mbunit, Sprint .Net, Castle, CsUnit, Nunit, TeamCity, NMock,  and Rhino, just to name a few off the top of my head.  The documentation is often missing a few critical things.  

The first thing is answering "Why would I ever want to use that feature?" in some way.  This is something that has annoyed me about many, many products out there.  It's great to know that I can extend TeamCity build agents, but what good is that?  Can I have an example? Apparently not.  What about ways to integrate with other products that actually work?  Mbunit, I'm talking to you here.  I love that you give me a Nant task to run Mbunit tests, but did you actually test your installation instructions?  What about the three other libraries that you need to move into the nant/bin directory?  Did you know about them?  Do you not need to do that on your box?  Do you not need them to be in your bin directory on your projects in order for the tests to actually fucking run?  Did you test this on a clean box?  I'd file a bug, but a bug called "Your documentation is fucking worthless" probably wouldn't get me very far.  

How about navigating around your documentation?  Oren, would it be so incredibly hard to add some sort of tree-like structure to the Rhino documentation site like every other web site in the world?  You have a "random page" button that is totally worthless, but if I'm in some topic, I can't navigate anywhere except the previous page and the next page.  Luckily, your search works quite well, but only if I know precisely what I'm looking for.  It's not fun to "view all pages" and scan all 50 pages for something that looks like it might be what I want.  

As to most other projects out there, can we have some examples that aren't totally contrived?  It's great that there are some examples, but what if I want to do something more complicated that "MyProduct.SomeFeature.DoSomething()" ?  What do I do then?  

And what the *** do your error messages mean?  Microsoft, I'm looking in your direction, and guess what else is in your direction?  Thats right, every other fucking product in the world.  You're all in the same place, writing shitty documentation or releasing something and then putting up documentation that says "incomplete" or "not released yet" (Nant, this would be you).  Oh look, includes are deprecated in the assemblyfileset, what the hell am I supposed to use instead?  You won't tell me?  Oh wait, "This is preliminary documentation and subject to change" so when the hell do I get the real documentation?  Would that be after you release 0.85 because if it is, that would be now.  I guess you'll wait until after my project needs to ship, won't you?  

Hey nhibernate, can I get some Oracle support?  Would that be so hard to add?  

Open Source Communit:  You should quit bitching and add your own support if you want it, after all the proj . . .

Me:  C-C-C-C-Combo Breaker!  Punch!

Well, ***, if I had the time to modify nhibernate to include the Oracle support I need (it's called a CLOB, and people use them), then why would I need to use a tool like nhibernate to save me time?  I'd love to spend time adding that support and I probably could, but I'm too busy writing my own Oracle layer in my application because it's a business requirement that it work with both Oracle and Sql at the same time and I have a deadline and getting Oracle and Sql to play nice in the same application is a huge amount of work.  God forbid Oracle or Microsoft or someone would develop a data provider that actually works with Oracle and gives any other error message besides "Error code: xxxx parameter error" (what the *** does that mean?).

 My point in this rant is that people think a particular product is useless because they can't use it.  If I can't use a product, that by definition makes it useless.  If I don't have good documentation and good examples, your product is useless.  If I can't find the documentation in less time than it would take me to code up an implementation by hand, your product is useless.  If I see some method with a name that looks like it does something that I want and it doesn't do that, and it's marked as deprecated, and there's no documentation on it, it's useless.  If I can't figure out how to do something really, really simple, like be able to do a build (mbunit, stop locking my assemblies, I thought .Net created a copy of the DLL before running it, are you special or something?), then your product is useless.  

The whole point of most of these projects is to make developers' lives easier by providing tools to make you more productive.  If I can't figure out how to use these tools in less time than it takes me to implement some solution by hand, then your product is useless.

p.s. This is all my opinion and should not have been read by people who don't understand that

p.p.s. I realize that this is more of a rant than a comment, but I don't have my own blog yet to post a link to.  Sorry Bill.

p.p.p.s. your capcha doesn't work in firefox

Billy McCafferty wrote re: Bridging the Communities
on 01-10-2008 6:11 PM

LOL...really!  Great points Jeff...documentation sucks...everywhere.  One of the few third party tools that I've been impressed with documentation and examples includes telerik (not open-source) and Yahoo UI, and NUnit...but NUnit is so simple that it has no excuse but to have full and complete documentation.

To the defense of the open-source developers, I would assume that it's a terribly trickly balance between working on functionality and working on examples/documentation.  One action that would mitigate this problem is for open-source developers to promote true product versions vs. "grab what's on the trunk."  "Go to the trunk" should not be considered a best practice - or even a good practice whatsoever - for distributing a credible product.  But again, with as fast as technology changes, I sympaothize with the difficulty in keeping documentation easy, complete and up to date.

Christopher Bennage wrote re: Bridging the Communities
on 01-10-2008 10:05 PM

@Tucker, it sounds like you've put some time into all of these tools. I can't get upset with someone who has tried it, and found it wanting. I agree with you on most of your points even. I'm just compulsive about finding a _better_ solution.

@Bill, I've been thinking a lot about the OSS "go to the trunk" philosophy lately.  I'm into continuous learning, but I am overwhelmed with trying to keep up.  It's like trying to learn a foreign language that is constantly evolving. Can we just pause for a moment and catch up?  Still, having tasted Nhibernate, Castle, RhinoMocks, etc. it's hard to go back...

Billy McCafferty wrote re: Bridging the Communities
on 01-10-2008 11:58 PM

Not to sound like an alarmist, but I can't foresee a slowing down point for our least no time soon.  After 10 years of developing professionally, I feel like I have to work harder today to keep up than I did with each passing year.  From the growing emergence of domain specific languages to figuring out if there's value for aspect oriented programming to cracking up at the fact that MVC.NET is actually a return to simpler techniques, it sometimes makes your head spin trying to figure out where to focus your efforts and if you're picking the "best" way to do things.  And once the "best" is figured out, it seems to become obsolete just as quickly as it becomes properly documented! ;)

For the past year, I've been getting into the software side of robotics including localization, mapping, reasoning and logic, machine learning, etc.  The pace that that field is experiencing makes business application development (i.e., most of the stuff we talk about) look like its moving at a manageable walk.

Everything seems to be moving at an exponential rate as people keep standing on each others shoulders pushing the envelope of what's possible.  A lot of what's being done is certainly taking wrong paths, but each wrong path seems to be pruned within a year or two as people express their experiences, learn from mistakes, and make something better.  Whether or not this is going to lead to a technological singularity ( or something less sensational, the only thing I know is that I'm going to try to hang on for the ride because it's pretty exciting to keep up with. ;)

Giammin wrote re: Bridging the Communities
on 01-11-2008 7:55 AM

I completely agree with you Billy!!

Pete w wrote re: Bridging the Communities
on 01-11-2008 1:57 PM

I've worked at numerous shops where the prevalent philosophy is: "if microsoft don't make it, we don't use it".

Why is that? Newcomers are led to believe that everything you will ever need to build anything .NET comes on the visual studio CD, so look no further! Companies use the Visual Studio startup window as their R and D!

OK so people like your commentor  think a library isnt "mature" enough to use until there's a polished GUI or codegen, (maybe an advertising dept too?), but  "Good" technology can evolve too quickly to be packaged up and candy-coated for the masses. Thats a natural catch 22!

As a developer of ANY platform I feel the responsibility (and a pleasure) in my career to:

#1 Have expertise in the technology I use every day. Build my expertise by contributing to the projects, and publicly posting ways to use the technology that have helped me. Others can benefit/collaborate from my work, and I support the OSS project a little. a win-win for everyone.

#2 Be aware of relevant emerging technologies in terms of their purpose, capabilities, advantages and limitations regardless of who is writing it be MS or the guy next door! Embrace the flux of new ideas! separate the good stuff from the garbage. Maybe Ill never use the new technology, but at least Im aware its availability to empower me should the need arise.

I bet the Java/Ruby/LAMP guys are at an advantage here, because most of their everyday development tools come from OSS projects. they are closer to the "pulse", is that the cultural difference?

I agree there is a passive .NET community, but I'm sorry I have little faith of this changing in the future (at least in the americas).

Steve Gentile wrote re: Bridging the Communities
on 01-11-2008 8:48 PM

I suspect many see open source as something for smaller projects.  I've never had a problem using open source on those.  I used NHibernate on my last project for a application without a large user base.  It worked out great. (I used your best practice nhibernate enterprise setup as a starting place - was wonderful)

But, in the Enterprise, where you have trained DBA's writing stored procs with great control over the database: trying to validate a tool like NHibernate is difficult.  They don Plus you have developers around you with different skill sets in the enterprise who might not understand it, etc...

In those Enterprise shops they typically will choose Microsoft and use all their products.  We had MS guys that were shocked when we told them we use Bugzilla and Subversion for our source control.

Our architects are leary of using some tools like NHibernate.  They are completely sold on the stored proc is better than dynamic sql no matter what. I can say 'hey, MySpace uses an ORM', but outside of that, I'd say the expected scenario is a shop with DBA's writing stored procs that are consumed by developers using typed datasets.  

With something like ASP.NET they have finally moved from the old legacy to webforms.  All this crappy webform code is now in place.  To talk about Monorail or MVC : they have typically bought Telerik controls or rolled their own  - which is a large investment.  To turn to Monorail, where the code is in constant change is difficult.  Yes, you have the source control, but that doesn't mean your company is willing to actually change it out of fear that when the next version comes along, they are stuck at the 'roll your own' version.

I'm just sharing the realities of some enterprise shops.  Even when I was consulting, the big fear then was 'who is going to manage this when you leave - we don't know nhibernate but we know how to use typed datasets with sqlcommands'

There is so much involved here.

Good topic Billy - I wish there was the perfect job out there where I could develop solutions using an ORM and a MVC in C# 3.5  :)  I know when I was using NHibernate with the MVP setup, writing NUnit tests: was the most enjoyable programming experience I've ever had - I loved my job, was excited about it everyday, couldn't wait to build the next piece of code.

I can't say that about the enterprise position I'm in right now...

Billy McCafferty wrote re: Bridging the Communities
on 01-12-2008 11:56 AM

Steve, it just so happens that I'm looking for a new developer.  We do mid-size, web-based apps that focus on project management and integration of third party tools such as Primavera.  We're located in Denver.  Let me know if you're interested in talking more about it.  There's plenty of creative freedom here.

mkuczara wrote re: Bridging the Communities
on 01-14-2008 7:51 AM

Reading some comments im thankig god we decided to move into Nhibernate and MVP world without any problems neither from managment, nor from developers.

Maybe we are only some small project (ok not so small) in big corpo (over 100k employees) but i can see good feedback from others working on soft development in other projects.

Yes, lack of documentaion is pain in the a.. (At least for Nhibernat eyou can find many tips in Java Docs)

Billy McCafferty wrote re: Bridging the Communities
on 01-14-2008 11:41 AM

That's funny that you bring that up.  When I look over at my bookshelf, a couple of books I see are Hibernate in Action (no "N" there) and Spring in Action.  It's quite useful how similar the frameworks are.  For that matter, one of my favorite pattern sites is a Java one:

Vlad Navazhylau wrote re: Bridging the Communities
on 01-20-2008 4:59 PM

I tend to agree that in enterprise it is very hard to be able to put non-ms frameworks in architecture, especially for former VB6/VB.NET shops. Their mentality usually is “when you move on your next project nobody will understand how NHibernate or Castle Project works, and examples all in C#!?...”  

I am looking at different frameworks for my own project and cannot make up my mind due to lack of experience with either Castle MonoRail or Spring.NET. I do have fair understanding of the DI and IoC principles. I do like your enterprise example. Have you personally tried Spring.NET? What would you use when starting new project?

Thanks for your work!  

Billy McCafferty wrote re: Bridging the Communities
on 01-23-2008 3:03 PM

Sprint.Net ( ) has always been pretty good for AOP, but now that version 1.1 was recently released, its AOP capabilities have become very impressive.  along with the other features that Spring.Net provides, it's a great all around package for OSS utilities.  Furthermore, now that Microsoft's MVC.NET has rendered (or will be rendering) Castle MonoRail more or less obsolete, Spring.NET looks to be a wise choice for future projects.  I'm going to be using it on my next one.

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Google Reader or Homepage Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of
Red-Gate Tools For SQL and .NET


SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
NHibernate Profiler
Balsamiq Mockups
JetBrains - ReSharper
Web Sequence Diagrams
Ducksboard<-- NEW Friend!


Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers


Community Server (Commercial Edition)