Silverlight 2.0 - Concepts to become a master series (Part 1 - .NET/C#)
Silverlight is THE next generation rich web technology to learn if you are a programmer focusing on delivering web content. There are many articles out there on how to get started or how to write your first Silverlight program. However, many of these articles fail to address the specific knowledge you need to master to be a truly effective Silverlight programmer.
Silverlight, just like any technology, has a concrete matrix of concepts a programmer should focus on in order to be able to call himself a master of the technology. Fifteen to twenty years ago (before the web, before mobile technology, before networks were prevalant, etc.), you could have an almost complete grasp of software engineering by focusing just on a few skills. As software engineering started to mature and the web blew the door off the amount of new technology/processes/patterns available, it became impossible to be an expert in every single facet of software development. Silverlight is just a small thing right now in the bag of technologies available for developers to learn. However, the Silverlight technology demands that you are productive with certain concepts in order to become an effective developer with the technology. Learning a new technology like Silverlight can be a daunting task with the limited R&D time developers are afforded. Furthermore, not knowing which technologies Silverlight relies on to deliver complete solutions can definitely pose a challenge in trying to learn on your own blindly.
I have been working with Silverlight since Alpha 1.1 -> Beta 2 (on and off; mostly on since Beta 1) and there are certain subject matters that demanded my deep understanding in order to use them effectively in Silverlight. Instead of creating a massive post, I decided to create a series of posts about the core concepts a Silverlight developer needs to focus on. The goal of the article is to help developers getting started with Silverlight 2.0 understand what technologies they should get familiar with or which technologies to brush up on in order to learn Silverlight in the most efficient way.
Silverlight 2.0 is a Microsoft technology platform. Like all new Microsoft platforms, in order to develop on it, you have to know .NET. That's a given. Silverlight 2.0 runs on a subset of the .NET 3.5 framework which has a very small footprint. However, the Silverlight team managed to add a great deal of libraries (even lots of .NET 3.5 items) inside this sub system. Obviously, I don't think this comes as a shock to anyone that in order to program in Silverlight 2, you will be developing on .NET. Since you will be coding in .NET, it also makes sense that you will be coding inside Microsoft's flagship IDE Visual Studio. Visual Studio 2008 has great integration with Silverlight 2.0 with debugging/design/projects, etc. This is one of Microsoft's strong points. Architects/Sr. Developers debate platforms/languages (dynamic/functional/OOP), etc. all the time. However, what is not debatable is the fact that Microsoft Visual Studio is one of the best programming environments out there. Visual Studio/.NET are pretty much a requirement...no shockers here.
What is controversial is my opinion that your .NET language of choice should clearly be C#. Silverlight 2 is currently in Beta 2 release. For the most part, I find that the early adopters of any new technology are usually advanced developers. Like it or not, that trend usually applies to C# development over VB.NET. Let's take some examples:
If you right now want to find an article about Silverlight and a code example, the chances are 85%+ that this example will be exclusively in C#. Does that mean VB.NET developers can't learn Silverlight? No, I am simply saying that you have a MUCH easier time as a C# developer if you are reading examples in your native/favorite language.
The absolute best resource when learning a beta technology is blogs. Bar none. The Silverlight 2 books are just starting to come out in "beta" and Microsoft's own libraries are just starting to be populated and are not a great resource yet. However, blogs are great for beta technology as they allow you to overcome bugs/issues/undocumented concepts, etc. that plague beta releases. Most advanced bloggers blog in C#. This ties into my previous assertion that more advanced programmers prefer C#. Furthermore, C# has many shortcuts that allow bloggers to post clear/concise code while getting the point across. This is yet another advantage C# bloggers use when posting about Silverlight. Check out some samples on Jesse Liberty's blog
, Tim Heuer's blog
Magazine articles are your next best friends. They are dominated by C# syntax as well. I subscribe to ASP.NET and Code magazine (I used to get MSDN Mag when I had a MSDN Sub) and a majority of the code is in C#. Note: The only time I have seen a real master coder write in VB.NET almost exclusively was Dino Esposito
. I do think though after he went to idesign, Juwal Lowy straightened him out, as he has now been posting in C# :)
Microsoft documentation is 50/50 C# and VB.NET. Obviously, this case is a draw.
I am not saying that you cannot learn Silverlight without C#; just that I have found that it makes my life a lot easier. Imagine you are a VB.NET developer working on an issue and you are ready to throw something and you try to enter your problem into Google. The search engine pops up with a solution and then you see the delegate word being thrown around (anon methods) or the => symbol. Obviously you will have to decipher the syntax first before proceeding. Furthermore, I think as you become more senior with the C# advanced syntax, it actually becomes HARDER to read VB.NET. I completely disagree with MS's position that it doesn't matter. As the RTM approaches, this might change as more books appear (this tends to still favor C#, but less percentage-wise).
If you are just getting started in .NET by being drawn to Silverlight, I think you will have a much easier time learning Silverlight if you learn C#. Doing so will give you access to many more current samples/projects online in a native language.