"IronRuby RTMs!? Put that in your pipe and smoke it @Bellware. The asymptote has collapsed!" (original tweet)I quipped with Phil when he was in Austin a while ago that, "IronRuby is asymptotic to shipping", which is the inside joke he's referring to. The point being that IronRuby has taken long enough to ship that it's dangerously close to that point of a multi-year software project where it may not be able to cross the last mile.
IronRuby has indeed crossed the last mile, and on April 12th, Jimmy Schementi and team announced the availability of IronRuby 1.0.
A hearty congratulations to the IronRuby and DLR team for getting IronRuby done, and to John Lam for getting the ball rolling with his RubyCLR project in 2006. It's a great accomplishment and another feather in the cap for the ever expanding diaspora of Ruby implementations, and most definitely a giant leap forward for .NET development and programming.
Enter ASP .NET MVC and the Loss of an IronRuby Vanguard
The furor surrounding Ruby isn't now what it was three years ago when IronRuby was announced. In the .NET community, the attention given to Ruby on Rails two and three years ago has largely subsided. The audience has had its attention redirected to ASP .NET MVC. Ultimately, I see this as a loss not only for IronRuby, but arguably also for the community.
There are a lot of newly-minted MVC developers in the web development community of .NET developers. I'm skeptical about comparisons made between ASP .NET MVC and Ruby on Rails by folks in the .NET community who haven't shipped a Rails project. These comparisons are often shallow and uninformed by experience. They're also not peer comparisons, and tend to point out things that one framework has that the other doesn't without consideration of whether these features are useful in both paradigms (yes, I sometimes use view models in Rails, I just don't require their signatures to be frozen before runtime so that static analysis tools have an easier job of it).
The ALT.NET community would have been the audience that was best-prepared to perceive and leverage the power of Rails, arguably via IronRuby, but instead it led the vanguard into ASP .NET MVC.
There is a tremendous wealth of uses for IronRuby but Rails has been the usual gateway to broader adoption of Ruby. With the Alpha Geek's attention redirected to ASP .NET MVC, the gateway isn't being crossed by the .NET intelligencia the way that it was by the Java community intelligencia that was ALT.NET's most influential inspiration.
For folks like myself who've invested enough effort to understand why some of our most respected teachers moved from Java for web application delivery to Ruby and Rails, there's no meaningful comparison of ASP .NET MVC to Rails.
While ASP .NET MVC has made significant progress in the past two years, it progresses at a snail's pace. We can contrast ASP .NET MVC's technology to Rails' technology, but this is the typical mistake that .NET developers make when trying to compare ASP .NET MVC to Rails because ASP .NET MVC doesn't have a whole ecosystem on the magnitude of the Rails ecosystem. This ecosystem includes not only the core framework technology itself, but the vast number and quality of plugins and packages for Rails (including those built for general Ruby development), the integrations with value-add services for both web businesses and web infrastructure, the vast array of hosting options and architectures, and the brain trust residing in the Ruby and Rails community.
Through a few years of working in Rails, I've come to a deeper understanding of Ruby (but I'm still no expert). And through this experience I've come to look at my own previous feelings about C# and static programming as a little shallow. It doesn't in fact amount to a personal preference, as many monocultural programmers have suggested to me. It's a matter of rational analysis and a willingness to accept the results of that analysis even of it contradicts my strongest feelings, my current preferences, and creature comforts.
After working with Ruby for some time, it started to become absurd to me to continue to build dynamic, adaptable systems with languages that aren't a great fit for this kind of work. I began to see that static design patterns were inevitably a mostly-wasteful workaround for trying to implement composable designs with languages that are hostile to this goal. I came to see that I was personally stimulated by the efforts to solve these dynamic programming problems with static languages. And I came to see that I wasn't being paid to put myself in the way of interesting but non-essential puzzles just to have a chance to solve them. There are other problems to solve - productivity problems, most notably, and business problems.
To me, this meant facing a hard inevitability: the de-emphasizing of a skillset that I had worked years to acquire, and a commitment to re-learning. The payoff, I knew, would be a reward in greater productivity and elevated conscious awareness.
I'm still learning, but there are many things that I have already learned in the past three years. One of the most important things that I have learned is that solving dynamic programming problems with static programming languages - while stimulating - is counter-productive except as a performance optimization. And even at that, I might consider alternative solutions, as GitHub, Twitter, and others have done in exploring high-performance, message-based, actor model functional languages like Erlang, a technology underlying new orders of performance technologies like CouchDB and RabbitMQ.
Most of all, I learned that even some of the most progressive .NET developers - even in today's ALT.NET community - are driven by a trepidation over a programming life without Visual Studio, and by association, ReSharper.
I've cautioned for sometime that there's a disturbing tendency toward what I've called "ReSharper-Driven Development". Far too many developers don't find anything wrong with saying, "I won't consider developing without ReSharper". I'd rather hear developers say, "I won't consider letting anything get in the way of my discovery of sources and paradigms of productivity and effectiveness that I simply haven't considered or can't conceive of yet".
I've got nothing against ReSharper, Visual Studio, or any other advanced development workbench (like RubyMine, for example). I was in the first wave adopters of ReSharper, and I was the first member of the community to have sponsorship from JetBrains for ReSharper. I was also a user of its predecessor, C# Refactory, going back to Visual Studio 2003. Nonetheless, I'm also willing to use a much more light-weight editor like TextMate or MonoDevelop. After twenty-some years of playing guitar, I'm also willing to pick up any guitar I can get my hands on just to have an experience of it, knowing that I'll be enriched by the diversity of the experience, and to know that this diversity is the foundation of my ability to continue learning at a pace that matters and to counteract the human tendency toward intellectual contraction and conservatism that is the inevitable side-effect of long-term, focused experience.
ALT.NET without the "ALT"
Some time in late 2007 I proposed "Integrity, Courage, Diversity" as ALT.NET's credo and motto. It didn't go too far and I didn't pursue it. It wouldn't be too long afterward that I'd realize that community leaders with great influence would begin to make exceptions for themselves in entitlements to using ALT.NET not for community service, but to justify efforts in celebrity-seeking as conveniently-beneficial to the greater good. ALT.NET became a launching pad for yet-another-BDD-or-MVC-clone-framework in the .NET space, as well as a way to secure increasingly more high-profile public appearances.
I didn't agree with David Laribee when he turned his attentions to means to "monetize ALT.NET". ALT.NET had barely established an unshakable foundation in diversity, courage, and integrity and had ultimately begun to come under attack from a myriad parties who wanted it bent to promote this or that bid for materialistic entitlement. It was like watching those parents who are willing to take their toddlers to auditions for movies, commercials, and pageants before the children had become self-actualized in their own sense of integrity. It was too soon. As clear as this was to me then, it's painfully and crystal clear now.
I don't agree with Jeremy Miller, creator of the .NET MVC framework, FubuMVC, who has suggested that .NET has now matured enough be as satisfying as Ruby and Rails. I think that this is only true from a place in life where we're driven unconsciously by the pleasure of solving static programming patterns problems.
I don't agree with Chad Myers who has implied that FubuMVC has advantages that Rails doesn't, without considering paradigm differences in working with Rails that may negate the value of things that may be advantages to static language pattern development.
I took heat from ALT.NET community members when I founded the ALT.NET Summit in 2007, introducing the .NET community to Open Space, and pushing a meme beyond the tipping point that within a couple of months of Dave's coining of ALT.NET had already started to fade into the typical background noise of fleeting fads. I took heat for building the conference website in Rails, stopping an on-going project to build the site on MonoRail after reviewing the site's code written in C# and realizing that the Rails equivalent would be much more elegant and less frustrating to deal with the torrent of frequent updates that hit a conference website in the weeks leading up to the event.
I have a profound respect for Dave having followed suit, building the altdotnet.org website on Rails rather than .NET, learning from experience, and making decisions informed not only by unconscious attachment, but also by experience shipping a project on a technology. I also think it's laudable that Dave's blog is built on WordPress, demonstrating that working with .NET doesn't require you to publish on CommunityServer, and that there are best-of-breed solutions outside of .NET monoculture that are preferable - whether they stimulate your current creature comforts or not.
ALT.NET was founded as a movement, even though the movement has been all but cleansed from the ALT.NET culture and history. In the redacted quote of Dave's original communication of ALT.NET to the community that holds a prominent position in the altnetpedia website, the following quote from Emerson is conspicuously absent: "there are always two parties; the establishment and the movement". Dave goes on to say, "If you’re ALT.NET, you’re in the movement. You’re shaking out the innovation. When the movement fails, stalls, or needs improving you’re there starting/finding/supporting that next leap forward."
Today's representation of ALT.NET stands in stark contrast to what people like myself had invested years of work in studying, practicing, teaching, traveling, meeting across the aisle, negotiating, volunteering, community organization, activism, lobbying, protesting, triumphing, sometimes losing, constantly sustaining and persisting in the face of an entrenched entitled cast of Microsoft community characters, and not just a small amount of personal sacrifice to build.
And while Jeremy has gone to great lengths to misrepresent the many years of dedication as a "holy crusade" and thus make it unpalatable for members of the ALT.NET community to expect the same commitment of themselves and thus of the community leaders that have not abandoned what ALT.NET had become, ALT.NET's diversity, integrity, and courage continues to become increasingly irrelevant considerations for the community.
And as diversity continues to erode, and mediocrity continues to accrete in mainstream .NET, so it does in ALT.NET as ALT.NET becomes the same kind of cultural body as the mainstream that it had intended to provide an alternative for. While ALT.NET adopts the exact same social mechanics as the mainstream entrenchment in serving the celebrity-seeking entitlements, great advances like IronRuby fall by the wayside if they represent inconvenient truths to what is now an ALT.NET establishment.
An Alternative to the Alternative
If the ALT.NET community continues down the path of fear into the exact same kind of tool-driven development behaviors that it criticizes Workflow Foundation and Entity Framework users for, it will undoubtedly miss the incredible opportunity that IronRuby lays at its feet.
ASP .NET MVC is not a peer to Rails. Not by a long shot. C#, even with the dynamic keyword, named parameters, and extension methods, is not a compositional language like Ruby. There is more power in this framework, language, and ecosystem than .NET developers - be they mainstream, ALT.NET, or progressives - may have had the occasion to understand.
If you value your experiences with MVC, then you might value the works that ASP .NET MVC has attempted to interpret, largely creating a low-fidelity facsimile that is generations behind the originals. If you're a patterns developer, an agilist, a test-driver, and an amateur of forward-thinking, no-limits technology communities, then the Ruby community - to my eyes - has more to offer you than what has become of ALT.NET in its present incarnation.
You don't have to leave .NET and Windows to experience Rails and Ruby as many notable .NET influencers have - although, like them, you might decide that .NET and Windows are unnecessary to building great web products. Nonetheless, now you have a choice.
You also have a choice to continue to have your attentions re-directed to lessor solutions. But understand that now that IronRuby has dropped, you're choosing lessor .NET solutions. And while it might be understandable that you aren't comfortable with anything other than Windows, you can experience Rails on IronRuby and use IIS as your application server.
And best of all, in the original spirit of ALT.NET, you will have a universe of alternatives available to you if you choose to take advantage of them. Alternatives that include:
- Immediate support for RESTful design and resource-oriented MVC
- A more mature and fully-featured routing engine including route helpers
- A better plugin model with orders of magnitude more available plugins and service integrations
- A package distribution system right now with Ruby Gems
- Hosting in the cloud without constraints using platforms like Amazon EC2, Rackspace, Engine Yard
- Managed cloud fabric like Heroku if the bare-metal cloud doesn't suit you
- More mature client libraries for emerging high performance storage, caching, application server, and middleware technologies
- Being in a social and business community that builds game-changing products and services like Hulu, GitHub, and Twitter
- Participating in the community that is making the greatest advances in TDD and testing tools and methodology
- And best of all: being able to look back a year from now and realizing all that you've learned about what you thought you knew :)
You're going to face resistance and maybe even vilification in some cases in the .NET community if you make such a move. If you value the courage that progressive software development is all about, you'll weather the storm and build character in the process.
If the ALT.NET community had stayed on-target with Ruby and IronRuby, there would be a good number of popular bloggers who might loose their audience. You're not in this profession to provide those with a sense of ongoing entitlement to a perpetual audience with even more entitlements. It's not your job to sit at the feet of static pattern puzzle-solving masters in a time when the necessity of those puzzles is simply no longer an absolute.
There are a whole set of patterns waiting for your discovery and participation, and they don't require you to obscure the intension of your code with compiler pragma noise like interface types, generics, and casting.
If you like to have your brain tickled by patterns, check out Design Patterns in Ruby (and consider paying close attention to the last section which offers patterns specific to Ruby and dynamic languages), or the Smalltalk Best Practice Patterns book by Kent Beck.
Stop waiting for the next immature .NET pseudo-port of a Ruby project. Just use the Ruby version. You don't need a .NET version of Gems just so that some social-climbing .NET open source celebrity-seeker can take a firmer grip on your attention. Just use Ruby Gems. Heck, you could use Ruby Gems right now for your .NET package management.
Stop waiting for ASP .NET MVC to catch up to Rails. Didn't you adopt open source to begin with because you were fed up with waiting for Microsoft's snail's pace of innovation and sunk-cost product management politics to catch up to the level of your expectations?
Despite Jeffrey Palermo's recent flattering of the ASP .NET MVC team's understanding of Test-Driven Development, Phil Haack and team were deeply in the weeds when it came to TDD, and to the credit of Phil's courage and integrity, he's left remnants of those difficult times in the clear for others to learn from. Making mistakes in public and having a consistent persona both on-camera and off are critical to establishing a community of integrity. The remnants of leadership in the ALT.NET community could learn a lot from Phil about this.
The repercussions of some naive MVC framework design decisions in ASP .NET MVC may never be rooted out of the framework because of Microsoft's bureaucratic policies regarding the need for near-infinite backward compatibility for those massive corporate Microsoft customers who cannot create the kinds of learning organizations that mitigate these kinds of problems. Rails, on the other hand, simply does not labor under the same drastic limitations.
Burn Me! I'm a Witch!
I know that I'm going to catch more heat for this article. People will say that I'm unrealistic to think that .NET shops can adopt Rails, although I, and many others, have led .NET shops through Rails adoption. They may point to the Rails project failure at Dovetail as an example without pointing out that the current project at Dovetail is more than 100% over-budget, and seems to produce more open source and celebrity than money. Mention of product and team management failures at Dovetail might also also be neglected. We shall see.
It may be said that I'm out of step with what ALT.NET has evolved into (something that I feel an immense source of personal and ethical accomplishment about) without pointing out that I'm still dedicated to living my professional life as an example of on-going community service, knowing that through the many years that I have been doing it have shown me that seemingly insurmountable changes can be made in relatively short periods of time with a community of practice focused on bigger goals than celebrity entitlement.
And most trivially, my lack of talent in structuring short, clear sentences may be used to malign the message that they contain in an effort to continue to sideline me and my perpetual pleading for more critical thinking driven by experiential learning and community service in the .NET community.
I haven't stopped asking the .NET community to stretch out beyond Microsoft's own sunk-cost imperatives - not since I founded the Austin .NET User Group in 2001; not since becoming chairman of the INETA speaker committee and working to get more progressive speakers involved who weren't purveyors of Microsoft's message; not since getting involved with DevTeach years before the vast majority of you had heard of it and working toward a day when the conference would feature progressive topics; not since organizing the ALT.NET Summit in an effort to insulate it and the practices that it advocates from the ravages of fleeting fad; not since writing and organizing the popular movement to redirect the Entity Framework team into more responsible and sustainable design (and subsequently quietly teaching them a Test-Driven Development workshop sans compensation); not since putting my MVP status on the line for my principles rather than allowing it or money gigs with Redmond to modulate my values; not since establishing the Progressive .NET events in London and Stockholm to encourage teaching in the .NET community rather than just speaking (although the celebrities that I'd gotten involved in that event have since refuted any responsibility to form a teaching practice and I've distanced myself from the events); not since organizing the Monospace events in Austin and Oslo to promote open source and diversity in the .NET space; not since working with the Austin Software Mentors group who are tutoring University of Texas students on contemporary software development techniques to prepare them for the real world after graduation; not since founding and facilitating the Lean Software Austin group to deepen the dialog in our community about meaningful productivity above and beyond celebrity agile; and not since connecting countless software developers to countless opportunities free of the mindlessness that accretes around entrenched entitlement power cliques in the Microsoft community.
And I'm reaching out to you again - asking you to reconsider your adoption of ASP .NET MVC over Rails and your fixation with editor-assisted programming and design over using IronRuby and Ruby.
There's an amazing world of capabilities that you've yet to discover far beyond static design pattern puzzles and ReSharper-Driven Development. There's a seed of courage that I'm counting on that I hope is still alive and well in .NET community even if it has been dormant for some time in the cold leadership vacuum left behind by the abandonment of .NET by some of our best and brightest.
In the end, you live your career life for yourself and not for me. And hopefully you won't be living it for the pleasure of folks who benefit from keeping you bogged down in a status quo that serves their interests more than yours. I may be asking you to take a more giant leap than you're ready for, but at least I'm not asking you to choose stasis. And I hope that the personal sacrifices that I've made for .NET community over the past ten years have left a modicum of credibility that would have you consider this:
IronRuby has dropped. Hear it? It will change your outlook on so much of what you do as a programmer and open you to a much broader world of software development and possibility. Trust me on this one. I've never given you a reason to doubt that I'm in your corner; that I've got your back; and that I'll drop what I'm doing to spend time with you learning and teaching rather than defending the fiefdom of my own .NET celebrity.
IronRuby isn't a magical vessel that holds mystical truths, but it just may be the next leap forward in your programming that Dave hinted at back in 2007 before all of this proceeded from movement to establishment.