CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Jeremy D. Miller -- The Shade Tree Developer

Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

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? 



Comments

Jeff Perrin said:

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..."

# September 1, 2006 11:03 AM

Eric Wise said:

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

# September 1, 2006 11:24 AM

Jeremy D. Miller said:

Eric & Jeff,

I sincerely hope he was being sarcastic.  

# September 1, 2006 12:27 PM

Jeremy D. Miller said:

And one other thing,

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

# September 1, 2006 12:35 PM

Patrick Altman said:

I just read a post by Joel Spolsky where he begins talking about different languages and platform stacks. ...

# September 1, 2006 1:11 PM

Fregas said:

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.

# September 1, 2006 1:22 PM

Jeremy D. Miller said:

Fregas,

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

# September 1, 2006 1:35 PM

Firefox said:

Some perspectives on different programming languages....

# September 1, 2006 6:08 PM

Chad Myers said:

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 <asp:TextBox and the built-in validators and post-backs and that crap -- i.e. the drag and drop designer crap in VS.NET that MS Marketing tells you is the greatest, but which doesn't work for any project which hopes to be successful, let alone testable and maintainble).

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?

# September 1, 2006 8:06 PM

Jeremy D. Miller said:

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.

# September 1, 2006 9:35 PM

Greg said:

- 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.

# September 1, 2006 10:17 PM

Fregas said:

"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 <asp:TextBox and the built-in validators and post-backs and that crap -- i.e. the drag and drop designer crap in VS.NET that MS Marketing tells you is the greatest, but which doesn't work for any project which hopes to be successful, let alone testable and maintainble)."

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.

# September 1, 2006 10:26 PM

Chad Myers said:

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.

# September 2, 2006 10:25 PM

Jacob said:

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.

# September 5, 2006 11:25 AM

Sam Smoot said:

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.

# September 5, 2006 5:42 PM

Robert said:

Hey, if you guys want to see a brand new top quality

data crunching programming language that is the best ,

check out :

www.my.opera.com/datahelper

# September 9, 2006 8:43 PM

Just a speck.. said:

# September 17, 2006 4:06 PM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About Jeremy D. Miller

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 previously worked as a systems architect building mission critical supply chain software for a Fortune 100 company and learned agile development practices as a .Net consultant at ThoughtWorks, one of the pioneers of agile development. Jeremy is the author of the open source StructureMap (http://structuremap.sourceforge.net) tool for Dependency Injection with .Net and the forthcoming StoryTeller (http://storyteller.tigris.org) tool for supercharged FIT testing in .Net. Jeremy's thoughts on just about everything software related can be found on his weblog "The Shade Tree Developer" at http://codebetter.com/blogs/jeremy.miller, part of the popular CodeBetter site. Jeremy is a Microsoft MVP for C#. Check out Devlicio.us!

Our Sponsors

Proudly Partnered With


This Blog

Syndication

News

All opinions expressed here constitute my (Jeremy D. Miller's) personal opinion, and do not necessarily represent the opinion of any other organization or person, including (but not limited to) my fellow employees, my employer, its clients or their agents.

About Me

"Best Of" Compendium

StructureMap (Dependency Injection for .Net)

StoryTeller (Supercharged Fit)

Build your own Cab

TestDriven

MVP