Joel & DHH on Selecting a Programming Language

Joel Spolsky has a post today titled Language Wars where he makes some statements about selecting a platform for web development.  He says the standard things you've heard a dozen times before and makes the (very) reasonable case for selecting a mainstream platform (basically Java or .Net and maybe PHP or even Python) for your enterprise development.  He did take some shots at Ruby on Rails which provoked this from DHH the creator of Rails:  Fear, Uncertain, and Doubt by Joel Spolsky.

The line from Joel that deserves severe abuse is: 

FogBugz is written in Wasabi, a very advanced, functional-programming
dialect of Basic with closures and lambdas and Rails-like active
records that can be compiled down to VBScript, JavaScript, PHP4 or
PHP5. Wasabi is a private, in-house language written by one of our best
developers that is optimized specifically for developing FogBugz; the
Wasabi compiler itself is written in C#.

So, a diatribe on sticking to mainstream technology, then saying you wrote a proprietary programming language that "compiles" to VBScript to get features which already exist in other languages.  I really can't imagine a bug tracking tool requiring a special language.  If you'll forgive the vulgarity, the phrase "Proprietary Programming Language" is what I call a 'Nad Shrinker.  Or the wrong kind of job security.

I'm going to express no opinion here about the merits of ASP.Net vs. a Java stack vs. RoR or one of the myriad LAMP stacks, but I'll throw down the guantlet to Joel by saying that I bet I can create a web application in any platform that doesn't scale;)

Isn't the blogosphere fun? 

About Jeremy Miller

Jeremy is the Chief Software Architect at Dovetail Software, the coolest ISV in Austin. Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy is the author of the open source StructureMap tool for Dependency Injection with .Net, StoryTeller for supercharged acceptance testing in .Net, and one of the principal developers behind FubuMVC. Jeremy's thoughts on all things software can be found at The Shade Tree Developer at http://codebetter.com/jeremymiller.
This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • http://just-a-speck.blogspot.com Just a speck..
  • http://www.my.opera.com/datahelper Robert

    Hey, if you guys want to see a brand new top quality
    data crunching programming language that is the best ,

    check out :

    http://www.my.opera.com/datahelper

  • http://substantiality.net Sam Smoot

    Jacob, if you knew Ruby you might see it from a different perspective. Writing a DSL in Ruby is far FAR removed from writing a compiler, using a lexer/parser, or anything of the sort. I can write a DSL in Ruby in just a few lines.

    So they’re not at all comparable.

    Considering the popularity of RoR, and all the free work 37Signals is getting out of contributors, I’d also take issue with your framing the open-sourcing of Rails as a burden. I just don’t see how any reasonable assesment of the business impact it’s had on 37Signals could conclude that it’s been anything but a tremendous avenue for profit and marketing kudos for the company.

    Oh, and I think you’re stretching with the support claims anyways. It’s stated pretty clearly that the Core team doesn’t implment features they don’t want to… period. I’m not going to say there haven’t been exceptions (render :component comes to mind), but by and large Rails Core development is definitely not driven by the “needs” of it’s developer-users.

    Calling Rails itself a DSL is definitely stretching it too. Many of the interfaces DSLs? Definitely, but under the covers there’s a lot of code that really has little to do with the interfaces. Just like any Framework.

    Oh, and Chad: method_missing and method overwriting. Beyond the blocks/closures, these two influence Ruby programming more than any other I think. When first learning Ruby I considered method overwriting a poor cousin to method overloading, but the truth is it’s really the unsung hero of programming in Ruby IMO.

  • Jacob

    I don’t see what all the brouhaha is about. What they’ve done is simply create a domain specific language. Joel did a followup post describing his reasons for doing so, all of which seem perfectly valid to me. What’s kind of amusing is that all of the RoR folks that are verbally beating Joel to a pulp over this don’t seem to realize is that RoR is also a DSL. The only difference is that DHH et. al. now have to make RoR work in all kinds of applications and they have to provide support to hoards of demanding users. FogCreek on the other hand only has to make their DSL work for one specific task (orders of magnitude easier) and only need to provide support to themselves.

  • http://www.hdri.net Chad Myers

    Fregas: I extend the built-in controls. The control lifecycle is actually the best part of ASP.NET and offers a lot of flexibility, but all the canned stuff for the drag-n-drop enterprise architects has to go and be replaced with serious stuff that’s testable. We have a control framework built on the ASP.NET controls that make things like data binding, group-by’s, repeaters, etc easy and testable and works well against a standard DDD aggregate repository-style architecture.

    As far as postbacks, every web framework needs to post-back at some poine. With AJAX, that ‘some time’ is a lot less frequent, but that still happens. In that case, the post-back event handling in ASP.NET makes it easy, it’s just that MS and VS.NET encourage you to use post-backs for everything (like onselectedindexchanged on a drop-down… terrible!) so you have to be judicious about the post-backs. ATLAS makes AJAX simple and also makes client-side javascript easier. I’ve used prototype and script.aculo.us (sp?) before and they’re good, ATLAS is better in some respects, and more complicated in others. Scriptaculous is also hard to use for AJAX since it’s very Ruby-specific. The client-side-only stuff isn’t terrible though.

  • http://www.dotnettricks.com/ Fregas

    “I’ve heard a lot of people dogging on ASP.NET but most people haven’t touched 1% of what’s in ASP.NET (they’re still using

    Chad, you’ve piqued my interest. So you dont’ use the built in controls or postback? Did you go back to Request.Form["firstname"] type code and pass things back and forth the old fashoned way?

    Jeremy, Amen on the added complexities of Web Forms. There’s lots of stuff i love about it, but also lots of stuff that drives me crazy and seems to make asp.net harder than it should be.

  • Greg

    - ActiveRecord in Rails is easier to use than NHibernate. Maybe less powerful, but definitely easier

    I think a better comparison would be to castle project’s active record which sits on top nhibernate…

    I read Joel’s post a few minutes ago and was waiting for the “just kidding” part at the end.

  • jmiller

    Chad,

    Try http://www.softiesonrails.com/

    I don’t think the world’s going to dump ASP.Net for RoR anytime soon, but there’s definitely some things in RoR that I’d love to have in ASP.Net. It’s a short, incomplete list just off the top of my head, but the Rails advantage over ASP.Net ****WebForms**** & C#/VB.Net is:

    - ActiveRecord in Rails is easier to use than NHibernate. Maybe less powerful, but definitely easier
    - The testability of Rails code is vastly better than ASP.Net out of the box. You can test the views and controllers without running inside a web server, and there are specific extensions to the RubyUnit for Rails that makes it easier. Easier testing == better unit test coverage == fewer bugs.
    - The design time support and component model in ASP.Net is enabled by the ASP.Net event lifecycle. Personally, I think the WebForms model has led to a great deal of unnecessary complexity.
    - Metaprogramming. It gives you AOP like capabilities, but I think it’s simpler and easier to use.
    - Rails is simply less coding. I’d argue that many of the mechanics are simpler. Some of the things you do with design time support in ASP.Net is declarative in RoR, so that’s not much of a loss. I like the validation in RoR much better personally.
    - True MVC separation of concerns is baked into the framework. Rails helps you “fall” into success. You have to wrestle with ASP.Net to force the square peg into the round hole.
    - Out of the box Rake scripts instead of writing one off NAnt/MSBuild scripts.
    - The Rails project structure is mandated by RoR, so any RoR developer can walk onto a new project and understand where the pieces are faster than we can when we switch teams or projects

    I’d love to spend some real time with MonoRail to see if it alleviates the problems with WebForms.

  • http://www.hdri.net Chad Myers

    Admittedly, I’m a Ruby Newbie, but it seems a lot of what I’ve seen from the Ruby proponents seems to be focused on Java. It seems Java programmers are frustrated with various inadequacies of their language/framework and are looking for a solution and WERE jumping on Python and are now jumping on Ruby.

    There seems to be a buzz in the .NET world, but maybe no so much (of course, many .NET programmers are still using VB.NET, so an argument could be made that they don’t have a clue about languages in the first place anyhow).

    If Ruby is a better platform for Java, how does it relate to C#? C# has many of the better parts and some of the bad parts of C++/Java-style languages, but also has ‘solved’ or ‘made easier’ some of the other bad parts (more so than Java).

    Does Ruby stack up as well against C# as it does to Java? Is there some killer feature that makes Ruby a must-have over C#? Continuations don’t seem to be the killer feature, though everyone is quick to mention it. (How many people here use continuations enough to get their money out of it, raise your hands?)

    Rails seems pretty cool. I’ve heard a lot of people dogging on ASP.NET but most people haven’t touched 1% of what’s in ASP.NET (they’re still using

    Is there anyone out there with some real deep, core ASP.NET experience who’s also used Rails and can do a good pro/con comparison of the strengths and weaknesses of each?

  • jmiller

    Fregas,

    Yeah, Joel’s out there pretty frequently, but he does a lot more to drive discussions than almost anyone else.

  • http://www.dotnettricks.com/ Fregas

    I’ve pretty much given up on Joel. I don’t understand why people consider him so authoritative. He said some things about the merits swallowing exceptions (in an old post) that pretty much fly in the face of all my experience and what i’ve heard from other developers on best practices for exception handling. He just doesn’t sound in touch with the reality of developing code in the trenches. Building your own proprietary language sounds pretty lame too.

  • jmiller

    And one other thing,

    Writing your own language with lambdas, closures, and function language support? Pretty impressive.

  • jmiller

    Eric & Jeff,

    I sincerely hope he was being sarcastic.

  • http://www.codebetter.com/blogs/eric.wise ewise

    I think he was being sarcastic. Think about the specs quoted there.

  • http://www.jeffperrin.com Jeff Perrin

    I’d bet a lot of money that the paragraph you’re quoting was Joel’s clever way of saying “But what do I know…”