Question:
How do you know nowadays that something in developer technology has been perverted completely beyond its initial intent into something horribly disfigured and unrecognizable to its original authors?
Answer:
When people start to feel the need to put the phrase "Plain-Old-" in front of it.
Whether POJO (Plain-Old-Java-Objects), POCO (Plain-Old-C#-Objects or Plain-Old-CLR-Objects for the VB-heads out there), or even POX (Plain-Old-XML), there is a steady stream of these references to the Plain-Old-this and Plain-Old-that that seems to be needed nowadays to inject simplicity into what are now considered by many to be concepts bloated beyond all recognition.
What is ALT.NET (really)?
At what is about the 1-year anniversary of ALT.NET, there still seems to be some challenges around the community’s definition of itself. The definition from http://www.altnetpedia.com is…
We are a group of people who are passionate about improving the way we develop software. We recognise [sic] there is no single solution, but instead there are multitudes of alternatives that can be applied to different situations. Our community is a place for sharing these alternatives, so that together we can learn, teach, and encourage new ideas.
From http://www.altdotnet.org we get the following statement of purpose and goals…
We are a self-organizing, ad-hoc community of developers bound by a desire to improve ourselves, challenge assumptions, and help each other pursue excellence in the practice of software development.
David Laribee has attempted to further distill it down to just two…
- Do you write software or otherwise work in a team using the .NET Framework?
- Are you interested in learning and improvement?
That’s you? Great! Welcome; you meet the criteria.
In a recent blog post, Glenn Block had this to say…
- Separation of Concerns
- Single Responsibility Principle
- Law of Demeter (LOD)
- DRY
- Not doing BDUF
- Liskov
- Favoring Composition over Inheritance
These principles are orthogonal to language, technology and platform. Applying each of these principles leads to software that is easier to test, easier to maintain, and easier to extend.
While I think Glenn is right about his observations as to the value of these design approaches, I am troubled by these principles being somehow ALT.NET-related since to me they are really about coherent OO software design principles rather than ALT-anything.
Some time ago, there was an effort by the Los Techies blogging crew to suggest that perhaps the S.O.L.I.D. acronym described the design principles that drive ALT.NET values even though these are really just good object-oriented software engineering principles at their core.
While I both consider myself ALT.NET and consider the S.O.L.I.D. principles to be very valuable OO guidance, I think its a stretch to say that one necessarily flows from the other. It seems to me that I could follow S.O.L.I.D. design principles and not be ALT.NET…but I wonder if the converse is indeed true: could I consider myself ALT.NET and not follow the S.O.L.I.D. design principles?
ALT.NET = POSE (?)
It seems to me that there are two parallel threads going on in these attempts to catalog ALT.NET principles and values: one is about free-thinking members of the .NET developer community gathering to better themselves and their profession by the open discussion of software engineering and architecture practices and the other is about core OO software engineering principles.
It would be a sad statement indeed if we conclude after a year into it that ALT.NET is just about what I consider to be ‘POSE’ (Plain-Old-Software-Engineering) and that we had to form an odd counter-culture movement just to have a basis for saying that these POSE principles are valuable to the practice of our profession.
By wrapping POSE principles up into a bag of ALT.NET tricks, we are necessarily positioning these things as being ALTernative, non-mainstrream principles and I wonder if this is actually detrimental to the health of the overall .NET software development community.
Surely ALT.NET has to be about more than just POSE principles.
Doesn’t it?
I don’t think calling it “ALT.NET” is harmful … on the contrary, I think it adds a cool elitist feel to being a .NET developer.
I don’t think *being* ALT.NET is about more than “POSE” principles… but *calling* it ALT.NET is a way of announcing in public that not all .NET developer prefer Microsoft products and “design mode” in Visual Studio.
@Mogens:
I guess that’s the crux of the issue, right? Is it our intent with ALT.NET to be “an elite club for the kewl developers” (in which case everything up to and including a secret handshake seems like a great idea) or is it the intent of ALT.NET to point out that people are designing solutions with .NET technologies in ways that the default MS tooling just doesn’t support, to demonstrate why the values we profess to be important are actually more valuable that the values espused by MS, and to get more .NET developers to share these same values?
If the ALT part of ALT.NET is about producing software that follows plain-old-software-engineering principles then I think its better named ‘Core.NET’ or something more befitting of the central and basic nature of our tenets.
If the goal is to be using ALT tooling to that provided by MS, then I think the ALT moniker is entirely appropriate. But the oft-repeated refrain from ALT.NETters (myself included) is that “its the principles, not the tooling that defines us” and if that’s true, then what’s so ALT about us?
By calling what we value ALTernative, we are implicitly acknowledging that there is value in the present MS-proffered approach to developing software (draggy-droppy, unmaintainable demo-ware masquerading as RAD software engineering) and I think this isn’t the message we intend to send.
Its waaaaaay too late to change the name, but I tend to think we’re not ALT at all; *we’re* mainstream and everyone else is off-base but if we cannot find a way to convince others of the reasons for the things we value, then we are destined to never be more than an insular echo chamber within which all the ‘kewl doodz’ hang out.
>>
In the end, is ALT.NET just POSE?
<>
We are a group of people who are passionate about improving the way we develop software. We recognise [sic] there is no single solution, but instead there are multitudes of alternatives that can be applied to different situations.
<<
For me, this statement belongs in the System.Common.Sense namespace.
Every developer should always try to improve him/herself and off course, there is no ‘one size fits all’. (Replace ‘developer’ with ‘construction worker’ and those statements should stil be valid.)
And about the name alt.net… To quote my fellow Dutchie Frans Bouma (http://weblogs.asp.net/fbouma/), alternative to what ?? Microsoft, current development practices … ???
That being said, I think this ‘movement’ is a great thing. The ‘problem’ with the ‘Microsoft recommended solutions’ is that google is flooded with pages that explain how to use the MS practices & technologies.
It’s good to see that there are more and more people writing/blogging/podcasting about alternative approaches to existing problems, your ‘Summer of NHibernate’ series being a prime example.
One
@One:
>>System.Common.Sense namespace
LOL; I LOVE that~!
It’s a context, man. That’s all. That’s it. When we start to think about different architectures like RESTful systems or one-way messaging, SOLID doesn’t apply. Same goes for process…
Think of it as exploring ALTernatives, maybe. We’re trying to gel up a community working on .NET that isn’t so product-focused. That’s all well and good, but we can use .NET for much, much more!
After a while I suspect the name ALT.NET should just become a macro for that .NET community that cares about their craft.
@Dave:
>>After a while I suspect the name ALT.NET should just become a macro for that .NET community that cares about their craft.
Absolutely 100% perfect summation of the point I was trying to raise; personally I can’t wait for the time when this is true — I find it unfortunate that I have to participate in a community that considers itself ‘alternative’ to find others that consider the job of software engineering in .NET to be a profession…but I *am* incredibly happy that such a community exists for me to participate in.
Proudly (as always) ALT.NET 🙂
Oh, when I mentioned Frans Bouma’s blog I meant to refer to this page ‘http://weblogs.asp.net/fbouma/archive/2007/10/08/alternative-rock.aspx’ on which he…, well, expresses his opinions on the Alt.Net movement. It’s from late 2007, so keep that in mind.
One
@steve
>>
I find it unfortunate that I have to participate in a community that considers itself ‘alternative’ to find others that consider the job of software engineering in .NET to be a profession…
<<
Would you care to elaborate on this ? Maybe it’s because English is not my native language, but I’m not quite sure what you mean here.
Are you saying that people who stick to the ‘BillG approved’ methods of developing software don’t see software development as a profession ?
One
@One:
I think what I was trying to get at with that statement was that I see “continuous improvement of my skills and the and constant questioning of whether I am doing the best work I can” as one of the defining distinctions between “having a ‘job'” and “practicing a ‘profession'”.
I don’t mean to imply in an elitist way that every software developer that tries to better themselves will eventually end up arriving at ALT.NET, but the average quality level of discussions that I have with ALT.NET participants seems to be consistently higher than those I am able to have with developers who have never heard of ALT.NET.
I consider that I have run across many more people who approach software engineering from the ‘professional’ perspective than the ‘job’ perspective in ALT.NET contexts and I consider this a sad state of affairs since I think (wish) everyone who considered themselves a software engineer truely approached their ‘job’ with the focus of a ‘professional’.
@steve
>>
and constant questioning of whether I am doing the best work I can” as one of the defining distinctions between “having a ‘job’” and “practicing a ‘profession’”.
<>
but the average quality level of discussions that I have with ALT.NET participants seems to be consistently higher than those I am able to have with developers who have never heard of ALT.NET.
<<
I don’t think this exclusively applies to alt.net
Me: The latest HanselMinutes/DotNetRocks was really great.
CoWorker: Huh ?
Me: never mind.
One
hmm, part of my comment didn’t show up.
What I said was that not everybody can introduce new technologies/practices into their organization. Being forced to work between existing boundaries does NOT necessarily mean that you’re not a professional.
One
@One:
LOL! entirely too true
And the observer pattern isn’t when you decide to watch a video on you-tube instead of fixing that annoying off-by-one iteration bug that was reported last week by half your user-base 🙂
[…] In the end, is ALT.NET just POSE?NET developer community gathering to better themselves and their profession by the open discussion of software engineering and architecture practices and the other is about core OO software engineering principles. … […]
Steve,
I’ve been thinking about what you said about the distinction between “having a ‘job’” and “practicing a ‘profession’”.
In hindsight I think I focused too much on ‘the work that one has to do to be able to pay the rent’ and less on the mindset / passion that a developer has/should have.
As it happens I just came across this old MSDN Magazine article by Scott Hanselman, titled ‘Passion for the Craft’, which I think fits nicely here.
http://msdn.microsoft.com/en-us/magazine/cc135988.aspx
@One:
Yes, that’s more what I think I was getting at with my statement. When you say…
>>Being forced to work between existing boundaries does NOT necessarily mean that you’re not a professional.
…I wholeheartedly agree. Doing the best you can *within* the bounded context you are given is more what I was after with my distinction.
And IMHO this has nothing at all to do with introducing NHibernate, IoC containers, etc. into the architecture of an existing, tightly-coupled, ball-of-mud-type app that’s been in maintenance-mode for many years and can’t be rewritten on the whims of every dev assigned to the project.
Just because the rest of the existing code is a holy mess doesn’t mean that someone approaching working on that code has to make it worse by perpetuating the mistakes of the past. If the existing code was written by someone following the procedural programming style that VB4/5/6 encouraged, there’s nothing that says that when you start to extend that app you have to follow the same non-OO practices.
Encapsulate your new effort properly, use good OO principles for YOUR work, maybe even write a SINGLE unit test for the small corner of the code that you are extending that just covers that one little thing you added. This is the mantra that even one unit test is infinitely better then zero. 🙂
There is (if more developers would just think even a little about it) actually PLENTY of wiggle-room to improvie the way developers practice their profession in even the most constrained contexts — my experience is that entirely too many people just don’t look hard enough for such opportunities to improve the way they work and the things they work on.
I agree, that old post from Scott does nail it quite right; its not WHAT you do, its HOW you approach doing it.
I love this post! Branding yourself as ALT.NET is totally secondary to adopting the good OO design principles and the attitude of self-improvement promoted by the ALT.NET crowd. Even if you work in the most top-down non-Agile .NET shop in the world, you can still take the Red Pill and change your software for the better.
[…] you are thinking in abstracts and interfaces, Plain Old Software Engineering (if you may) and want to know what is a great framework to code […]
[…] I even blogged a little about it back in September of 2008 when I experienced my first (not the first I’m sure, just my first) […]