A different point of view.

Posted on 5/12/2007 @ 6:30 PM in #Vanilla .NET by | Feedback | 4380 views

I've met both the author (Mads T), and Luca in person. This post is not an impersonal, anonymous attack.

I am writing about this post. Luca, and the few commentors thought this was a brilliant post. Nobody actually left any hardcore suggestions or comments - most just glazed at the sheer brilliance of the author's gray matter. A bit like watching fireworks.

My different point of view is,

It's a shame that the language is getting so complex. This is the same mistake C++ made 7 years ago, and why .NET was so successful. It's a shame that we are seeing the same mistake being made all over again.

So please make the language simpler, and once you have made the language simpler, apply the same to -

  • MS Licensing
  • Vista editions and Vista security
  • Windows Mobile and it's constant freezing. iPhone will probably fix that.
  • DRM technologies, music store choices in WM player
  • The framework itself (how many ways for two programs to talk to each other?)
  • VSTS <-- does anyone actually use that?
  • "How to connect to a database" - ADO.NET/Entity Framework/Linq2myAss/Jasper/Astoria/whatever else/?
  • .. basically every MSFT product, including MSN messenger.

How about, "Don't underestimate the power of simplicity".

I know this isn't gonna happen, but what's the harm in asking? ;-)

Sound off but keep it civil:

Older comments..

On 5/12/2007 9:02:39 PM Fabrice said ..
I haven't read the post. My only thought when I saw it was "Is it an old post from April 1?".

I ran away from the blog when I saw it's not the case. The post starts with something like "it is fun". All I know is that C# and .NET won't be fun anymore when I'll have to read this kind of code...

On 5/12/2007 9:37:35 PM Sahil Malik said ..
Fabrice - LOL, I didn't understand what you're sayin' man! :)

On 5/13/2007 8:08:00 PM Derek said ..
I totally agree. The beauty of .NET is in the powerful simplicity, and the fact that new and old programmers can (could) get stuck in straight away. Now with the increased complexity and many many syntax options that do the same thing, it just makes maintaining someone else's code a real headache sometimes. Simple is always best in the long run. The focus should be on good database design; good, readable coding standards and principles; and less on clever syntax that causes the next guy to waste time trying to figure out what the hell is going on in the code.

On 5/15/2007 7:18:43 AM Julian Birch said ..
Actually, the contents of the post are pretty well known results in lambda calculus, such as gets covered in your average CompSci lecture. It's also something that you're unlikely to worry about unless you're a math geek. But I don't think C# is at fault here. What we have here is a complex solution to a simple non-problem

static int fac(int x) {

return x == 0 ? 1 : x * fac(x-1);


Actually does the job perfectly well (well, barring the fact that it's not tail-recursive).

A much more serious criticism of the fixed point solution is that it involves a recursive creation of delegates, which does not strike me as a good use of anyone's time. So cute, but stuff like that should stick to functional programming languages.

On 5/23/2007 10:48:22 AM Dennis van der Stelt said ..
Sahil, about Windows Mobile, go get WM6. It rules my world! More stable than... than... Well, it's just stable! ;)

On 5/23/2007 11:48:33 AM Sahil Malik said ..
Haven't tried WM6. I'm with Verizon, and they are the last ones to ever upgrade the OS or provide cool new phones. But well their coverage is the best, so .. big loss there :).

I'll change my phone in about a year or so, around then I'll decide between WM6 vs. iPhone.

On 1/22/2011 5:24:35 PM Charles Strahan said ..
That's a fascinating view point. However, I don't see how Mads' discussion of implementing a fixed-point combinator in C# would lead you to believe that C# itself is complicated. Sure, the topic (lambda calculus and fixed point combinators) isn't very penetrable for the average Joe, but knowledge of the two is not at all required for writing code in C# - in fact, it's a border-line esoteric/academic example of how to implement a particular concept (the Y combinator was created to define and use recursive, anonymous functions in the untyped lambda calculus - C# supports syntactic support for recursion in named functions, so fixed-point combinators are not required).

If it's the higher order functions and generics that you find complicated, there's nothing holding you back from writing java-esque code on .NET. There's no point in castrating the language when the powerful bits are too "complicated" - just don't use them.

On 1/22/2011 9:01:15 PM Sahil Malik said ..
Charles, it is rarely as simple as "Don't use it". Because you always inherit code that others wrote - frequently the others who didn't understand it well enough but were brave enough to try.