My Take On "Silverlight For the Enterprise"
I recently had a meeting with the enterprise architects of a large hospital. The main purpose of the meeting was to explore the potential of Silverlight in their environment, which is complex, diverse, and large-scale - you name it, they have it. To manage this kind of environment, you need multiple architects with varying backgrounds. You are going to need folks who know multiple operating systems: mainframe, Mac, PC. You will need all kinds of tools, languages, databases, user interfaces, Web services/servers, architectures, and so on. You will have custom apps from vendors in all of the areas.
Silverlight Fits Well in the Enterprise
The modern way to build apps in these environments is to expose data through Web services (REST or SOAP), and to use the client piece to handle only presentation. There should be minimal, preferably no, business logic at the Silverlight / Presentation tier.
At the same time, you want to have tooling and capability to automate and streamline writing or converting applications. Ideally, you want to segregate large teams to specialize, such as graphic designers, testers, database admins, GUI developers, Web service developers, and framework/tool developers.
You want to have control over performance of your application across a large distributed network. You know when things get slow. Assuming a reasonable Web service tier, the magic formula for slowness in Web-based apps is (1) Number of Web Objects (2) Chattiness of HTTP Protocol (3) Network Latency.
Silverlight Solves a Lot of Problems
Silverlight easily consumes REST- or SOAP-based data through ADO.NET Data Services. You get tons of flexibility in the way you manage security, the size of data sets, paging, and URIs to point to pieces of data in well-known formats, such as XML, JSON, and ATOM.
Enterprise Quality Code Tooling
Silverlight is extensible and allows architects to streamline GUI development. Silverlight's abstraction layer is XAML, which allows you to create visible UI elements in a declarative markup language. Business logic is completely abstracted with code-behind files. Existing controls can be extended, and partial classes allow you to define properties and methods of a class across multiple files in your projects and solutions. Partial classes are very popular and useful in situations where classes are generated by a code generator, because they allow a developer to put hand-coded properties and methods in a separate file that is not touched by a code generator.
$150 is a Steal to Learn Silverlight Hands-On
There is a great SoftSource course, Practical Silverlight 3, on Tuesday, October 27. I attended this course earlier this year and I highly recommend it. This is the real thing, dealing with "business apps," not just glitzy graphics. $150 is a deep discount for hands-on training in Silverlight. The course will be held at Microsoft, San Francisco, in the heart of the financial district. This amazing space is a shopping mecca of the city, where Powell (the end of the cable car line) and Market Street meet. Sign up here.
I met Art Scott at an event where I spoke about Silverlight talking to the powerful Azure tables. Here is what I learned about him.
Art Scott is an accomplished Silicon Valley computer graphics industry veteran (hardware, software, and systems) turned artist. He is in the Who's Who of the graphics industry's founding fathers. In the 70's he was at SRI, the birthplace of the mouse. We were talking about Larrabee (the codename for a graphics chip that Intel is developing) and the implications of having potentially dozens of cores, so that you can render all your animations and videos in parallel in real time. Art was telling me that we are now at the tipping point, where he can finally do the things he's dreamed of doing all his life, such as artistic shapes overlaid with multiple streaming videos. F# enables a more direct correspondence between artistic vision and formal mathematical description, and being stateless, the possibility of distributing the building and rendering in parallel and concurrently.