Five Reasons Silverlight is Kicking Flash in the Pants

Let's face it - Flash and Silverlight are both awesome platforms for developing RIA applications and I have used Flash Builder (formerly Flex Builder) for a while. After building a significant application in Silverlight over the last 4 months, I have to say now I prefer Silverlight and it really isn't even close. In fact, from a developer's perspective, Silverlight is just kicking the pants off Flash. That's my opinion and here are my reasons:

REASON 1: Abstract Classes and Absract Methods. Come on Adobe, building solid and maintainable class libraries without Abstract artifacts is like you've tied one hand behind my back! Silverlight has robust support for all kinds of inheritance models including abstract ones. This was really nice when I started to model out my domain.

REASON 2: Generics. Silverlight has rich support for generics and that means I don't have to duplicate code across several implementations of the same thing for different domain entities. They significantly reduce code duplication. You can kind of get away without generics if you have a really good inheritance from base classes ... but see REASON 1. Flash has no equivalent for Generics and they are awesome.

REASON 3: Threading. Silverlight has a rich and easy to use threading model. Essentially, it mimics the one on the full .Net framework and it works like a charm. A full threading model is simply better than hacks that delay execution until the current thread is waiting like callLater().

REASON 4: Method Overloading. ActionScript doesn't permit you to create two methods with the same name but different parameters. Overloading means you can make your APIs much more developer friendly and therefore more productive. Silverlight has overloading and it works very well.

REASON 5: Linq. Silverlight has a feature called Linq that lets you query objects in the application using a sql-like syntax. It's kind of turned around with the SELECT as the last thing instead of the first but you get full code completion in VS2010 for all the objects. When you put .Net RIA Services in the mix you can create strongly-typed client side queries that serialize to and from the server just the way you want them to. Additionally, Linq queries are composable so you can create a query on the client then add a filter to it on the server to prevent access to content the user isn't supposed to see and return the result of both filters. Freakin' Awesome. Flash just can't compete with Linq.