My company recently started the process of switching to Exchange and as part of the process I am beta testing Windows Phone 7 devices for them. At the time of writing this article, I'm using the Samsung Focus. The started me off with the LG Quantum which was a pretty abysmal device. It was heavy and the screen quality just wasn't up to par with even the old BlackBerry Bold 9000 I was using previously. I had heard a lot about the Windows Phone 7 platform through a number of tech websites, but I was really surprised at how great the platform really was once I got my hands on it.
The OS is extremely snappy and the phone is incredibly responsive. At first I thought it was just me, but everytime I showed the phone to my friends and colleagues they would also comment on how quick it was. After browsing through the list of available apps on the Windows Phone marketplace, I started thinking about what apps I wished were available... I realized that there's already a really great start to some of the more mainstream apps (Netflix, Maps, Facebook, ESPN, Twitter, etc), but there's definitely some opportunity for improvement.
I decided to look into what it would take to develop and app for Windows phone and realized that it looked pretty easy and the barriers to entry were fairly low. The Windows Phone developer tools are completely free and include everything you need to get up and running. I downloaded the tools from the App Hub and got started with my first app (Visual Studio, etc). One thing to note is the developer tools allow to fully run and test your application in the Emulator that runs on the computer. If you want to run the application on your phone or deploy it to the App Market (to make money), you'll have to pony up $100 for a App Hub license. A nice thing about the license is it enables you to unlock up to three devices so you can test on more than just your primary phone.
If you are familiar with object-oriented program, you should have no problem picking up the WP7 developer tools. I had done a bit of VB.NET and C# .NET in the past so the environment was generally familiar to me and the concepts behind creating "pages" and "page-behind code" was a really refreshing surprise. The concept is really similar to developing web pages and uses the same concept of URIs for navigation and you can even pass variables and setup strings directly in the URI like you would query strings in other environments.
I'm not a professional developer by any means -- I just like to dabble in technology -- but I was able to very quickly get a nice, professional looking app up and running. The biggest challenge for me was getting my head wrapped around the MVVM (Model View ViewModel) concept. I was used to performing all my code directly in the code behind the page or calling classes that ran my code. While you can still do this in the WP7 tools, the default templates in Visual Studio encourage the use of the MVVM concepts.
That beind said, I found the easiest way to learn the MVVM concept was to use the out of the box templates (Data Bound, Panorama, etc) and play with the code they had existing. Once I understood how the base code worked, I played with extending their code to have new Item Models and new View Models. Some of the concepts like notifying on property changes and other things were a bit confusing, but whenever I got stuck there was usually an answer out on Google.
After playing with the built-in samples for a bit, I decided I wanted to learn a bit more... I started watching the Windows Phone 7 Jump Start sessions on Channel 9 with Andy Wigley and Rob Miles. They do a great job explaining some of the introductory things and have even gone back and added some more detailed videos on things like Isolation Storage and Push Notifications. I ended up purchasing the App Hub license and really enjoy being able to install the applications I'm developing on my phone -- as Andy and Rob mention in their videos, don't use the performance of the Emulator as a baseline. You should always install your applications on the phone as that's the only place you'll really be able to tell what the real world performance is like.
I'll probably follow up with some more WP7 Development posts in the future since I'm pretty hooked now that I've started developing for the platform. For now, that's all...