GWT And Now Script#: The Agony of a Thousand Puppies

Uh oh. Another reactive rant. Am I turning into a grumpy old man? This time it’s about layers of abstraction. And Javascript. And the meaning of life. No? Maybe not the meaning of life.

Nikhil posted about his new pet project, Script#. Although I had fun reading the article and admiring the work, I am not enthusiastic about the approach. Google had posted their GWT a bit earlier and it evokes a similar reaction from me. Here it is:

Hiding Javascript behind another language’s layer of abstraction is like killing puppies.

It’s one thing to build a compiler to a language that’s more appropriate for machines. CLR or Assembly ain’t easy to code with for any human being.

But Javascript is a fully-featured, widely used, and beautiful language. Sure, it’s different from C# of Java, but it holds its own rather well. Sure, it lacks strong typing and traditional C++ form of object orientation, but that doesn’t make it less versatile.

Why do I think it’s a bad idea? Well, primarily because I get to experience firsthand what layers of abstraction do to code. In ASP.NET, the developers were shielded from needing to learn how Web works — a lot of effort was put in to emulate WinForms. You click a button, and here’s your OnClick handler, voila! Unfortunately, shielding developers from learning the inner workings results in some of the crappiest and undebuggable code you can imagine. Don’t believe me? Check out Or go look into the vast repositories of code, written for ASP.NET. I know, I am making a non-verifiable statement here, but hey, it’s my frikin blog.

In the comments to Nikhil’s article, there are sentiments to keep the Morts in the loop. One of the users is worried poor slobs won’t be able to keep up with yet another language that they need to learn.

I have a very simple answer to this: if you can’t handle Javascript, you shouldn’t be writing code for Web applications. HTML, CSS and Javascript are the three prerequisites for this ride.

And to those of you who do know all three, please, let’s stop proliferation of poorly-drawn boundaries in layers of abstraction. If you need futher motivation, just realize that you will be debugging that insanity, written without understanding how things really work.

So, where do we draw the boundaries? Well, for starters, not across the languages. I totally don’t mind a Javascript 2.0 compiler that produces common Javascript 1.4. I don’t mind seeing a CLR implementation of Javascript (not the JScript.NET, of course). I don’t mind a powerful JS toolkit. Anything that flows along the lines of the Web style is great.

But please, pretty please, don’t repeat the disasterous attempts to “simplify” the Web by allowing only one form element per page (which has to post to itself!) or requiring Javascript for the framework to react to a link click. Please? For the puppies?

4 thoughts on “GWT And Now Script#: The Agony of a Thousand Puppies”

  1. I have to disagree with you on two things:
    1) “…Javascript is a fully-featured, widely used, and /beautiful language/…” (emphasis mine)

    The reason for this project is precisely because not everybody believes this. By introducing variable types into Javascript (well, not really into JS but into C#) we can limit some of the issues we run into with loosely typed objects. This is only one of many enhancements that C# provides over JS and why C# makes for a “better” coding experience and helps one build less buggy software.

    2) …”because I get to experience firsthand what layers of abstraction do to code.”

    I have only one response for this: “guns don’t kill people, people kill people.” This is the IDE vs Notepad argument… Are there a lot of crappy programmers out there? Sure? Do IDEs make them bad? No! Yes, I learned to code in Notepad. No, I don’t want to do that on a daily basis. The IDE makes my life a whole lot easier.

    ASP.NET introduced the great time saver that is ViewState, but “with great power comes great responsibility”. To label abstraction evil instead of labeling teachers who only teach on the top level of abstraction bad is ridiculous.

  2. Completely agree, you can’t do a lot with such kinda of frameworks(GWT, script#). People that consider them as cure are without enough understanding of javascript itself. Furthermore, there are lot of benefits of using dynamic typed languages(ruby, php, smalltlalk .etc).
    I’m developer that use both dynamic and strong types languges and I have to say that somehow the flow of dynamic languages is much faster. Things are just done in more expressive manner and with less coding.

Leave a Reply

%d bloggers like this: