Although this has been brewing in the back of my mind since the big “Silverlight is dead” fiasco back in October6, I wrote the bulk of this last month, when the firestorm from the Windows 8 preview7 went down (See Pete Brown’s moderator comment, which led to Rob Conery’s blog post8 about the incident).
My delay in posting was because I didn’t want my opinion to sound like I was playing Taps for Silverlight, or WPF, or even Flash. Working in my “Why More Devs Haven’t Flocked to Silverlight” opinion proved tricky with the overall message of gratitude I’m trying to convey, especially when I’ve slowed down my Silverlight exploration(solely) because I don’t have a desire to be a phone programmer. The appeal of, “write once, run everywhere” wouldn’t have been so alluring to me if I had that desire. I am not driven to learn Objective C at this time for the same reason.
“Remember the Alamo Avalon” – A Quick History (Re?)fresher
WPF (Codename “Avalon”) went to CTP wayyyyy back in 20041. The CTP for Silverlight (“WPF Everywhere”)was announced in December of 20062. (For an historically interesting ch9 video, check out, “Joe Stegman talks about the ‘WPF/E’ CTP.”)
With “Avalon,” Microsoft had a vision. A really BIG vision. In a nutshell, that vision was to unify digital content creation.
Microsoft’s vision included developers AND designers. It included Application Developers AND Web Developers. It was a vision that enabled WinForms apps to “not be so ugly.” It was a vision that enabled complete decoupling of UI & Functionality. Microsoft’s vision transcended “just their programmers” at a time when:
- The DOM made Javascrirpt suckso painful many of us still nurse those war wounds
- JQuery was unheard of (v1.0 wasn’t even announced until late August of 20063)
- No one was innovating in HTML (or doing much more than arguing); By Chrome’s first public, stable release in December of 20084, Silverlight was on version 2.0.31005.0, and had been through 12 releases.
- Mobile web was not big yet (the first iPhone was released in the U.S. in Late June of 2007)
- Communication with Flash to make it “functional” or db-enabled meant (and still means) painful serialization & deserialization of XML
It was a beautiful vision.
I had dabbled in Flash a bit, and I’ve worked extensively with implementing non-trivial communication between Flash & C#, so Silverlight had huge appeal to me for the hope that I could work directly with my native c# objects.
Touted as Microsoft’s WinForms replacement AND as a Flash replacement, I hoped to re-build our WinForms+Flash product with WPF.
Around the time SIlverlight 3 was released, I jumped in with both feet, trying to learn it outside of my regular workload nights & weekends, I attended every WPF / Silverlight / Xaml event & talked to as many devs as I could.
In Pursuit of Xaml Adoption
There has been much talk about the rate of Silverlight & WPF Adoption not being more rapid. Maybe it’s because of who I follow (or don’t) on Twitter, but I have yet to hear or find statistics on the number of iPhone developers or Flash / ActionScript developers out there. I was also unable to find stats on the Flash plugins per browser over time from Flash’s initial launch (though I’m sure that’s because web stats weren’t as good that long ago).
Developer Adoption Rate: My Take
Within my local developer community, here are the issues that I personally either observed, experienced or both:
HUGE Paradigm Shifts
Christopher Estep’s article, “WPF and the Event Routing Paradigm, with Bacon,” does a good job describing how hard it can be for many of us [left-brained control freaks] to let go – something necessary for true WPF adoption.
I’ll admit I got my ass kicked personally experienced a much, much, MUCH steeper learning curve with WPF than I am used to (and that’s with front-end & c# dev experience AND a graphics background), but wow, I’ve learned so much!
There are concepts in WPF that one who has primarily been a .NET WebForms Developer can blissfully ignore (or not fully grok without consequence), that WPF can’t be programmed without a full understanding of, including but not limited to:
- Threading & Thread Communication
- Design Patterns
- Events “beyond the double click”
- Thinking as an asynchronous programmer (way beyond a sprinkle of AJAX)
- UI (There is a reason our WinForms apps are ugly. Just sayin’.)
- Vector calculations (I was deeply disturbed by how much of my HS & College Math had left the building)
- Bezier Curves
- Animation, aka Storyboards (“how fast or slow something should move to look right”)
Obviously some of the points above would be moot for developers, if it weren’t for the first bullet point in the next section.
Weird Aversion to Expression Blend
- Designers would not give Blend a chance. We have a lot of designers where I work, and I could not convince them to even try Blend (largely due to the fact that they could not install it on their Macs).
- Developers did NOT want to use Blend. It was the weirdest thing I’ve ever seen. Even the person who headed up one of our biggest local Xaml user groups painstakingly hand-typed things in Visual Studio, even during his demos, that he could have done in Expression Blend in a fraction of the time.I don’t understand this aversion to tools that make you faster at getting a job done, but it seems to be a weird phenomenon in the developer world, some unspoken rule that anything with good UI makes you less of a beat-on-your-chest-rawr-programmer. As recently as June 28, I personally saw super, uber-smart programmers using Notepad & the VI Editor to code c#. I don’t get it.
It might be because of my background in Illustrator & Photoshop (the shortcuts throughout Expressions Studio products felt wonderfully familiar to those I knew from Photoshop), but I have a HUGE love for the elegance that is the Expression Suite.
The code “written” by Blend is not what we’ve seen when we’ve viewed source on an MSWord doc saved as HTML. The Xaml that Blend produces is PRETTY and CLEAN.
Blend makes data binding FUN. Manually typing stuff you need a cheat sheet like this for in Visual Studio without so much as the benefit of Intellisense is not my idea of a productive way to spend my time, especially when there is a tool made specifically to make Xaml development fast & easy.
Many Cooks in the MVVM Kitchen
When I did my first “real” work project in March of 2010, my search for “MVVM” yielded so many results it was overwhelming, so I rolled my own implementation (and boy, was it was painful).
After that experience, I decided to really look at implementing a 3rd party tool to do all of that work.
I adopted (and fell in LOVE with) the MVVM Light Toolkit by Laurent Bugnion. It was so simple; so intuitive; so easy to use. Laurent even created Visual Studio keyboard shortcuts for things like creating the verbose properties implementing INotifyPropertyChanged (and I used the heck out of his shortcuts).
I understand that MVVM is just a pattern, but I believe that if Laurent’s pattern support had been baked in over a year ago, my first app could have taken a fraction of the time it did. The intro says, “The main purpose of the toolkit is to accelerate the creation and development of MVVM applications,” a claim I agree with, 100%.
Don’t get me wrong – rolling my own MVVM taught me a LOT, and I am a better programmer now for the understandings I gleaned. I simply shared that as one of the issues I experienced in my own pursuit of Rapid WPF Development.
Vision + Time + Industry Innovations = Different Reality
A big surprise came to many of us with the rise of mobile (touch) devices: The UI interaction differences between mouse vs touchscreen put an unforeseen black cloud over the dream of write once/run everywhere.
With the rapid, newfound need to program for touch screen, interactions we were used to programming for (like hover / onmouseover) were stripped from developers, leaving many of us wondering if a substitution (long-press?) would be acceptable, and if a user would even know what to do if it we DID build it with support for what we chose to dual-bind our triggers to.
Another change happened when Google started a whirlwind of HTML5 innovation with the launch of & experimentation with Google Chrome (beta first released in September of 2008, followed by v1.0, 100 days later).
The other decision that created HUGE shockwaves (no pun intended) was when Apple refused to support Flash (and other proprietary technologies, including Silverlight) on the iPhone, making open standards like HTML5 another argument for devs interested in “write once” to try HTML5.
Honest Microsoft Announcement; Unfortunate Timing for Public Overreaction
I fought tooth-and-nail to get our upper-level executives to give Silverlight a chance & take it seriously.
About 2 weeks after I had FINALLY gotten buy-in by some of our key decision makers, I was bombarded with emails from those same execs with subject lines like, “Did you hear Silverlight is DEAD?”
This was, of course, because of the firestorm that resulted from Bob Muglia’s statement during PDC 2010:
I said, “Our Silverlight strategy and focus going forward has shifted.” This isn’t a negative statement, but rather, it’s a comment on how the industry has changed and how we’re adapting our Silverlight strategy to take advantage of that.6
His clarification in that article speaks to my point above about touch devices changing the UI interaction rules. Bob Muglia did nothing but tell the facts. His message was completely blown out of proportion.
There has been a bit of public lashing of some of the leaders of the Silverlight Community for “keeping quiet.” I appreciate the push for full disclosure8, but Bob Muglia’s 23-year employment with Microsoft ended9 less than 3 months later. It’s no wonder Microsoft Employees are afraid to say a word. In no way am I taking sides, but I don’t see Pete Brown’s vow of silence as his decision, nor do I see it as Microsoft’s fault. I see it as the fault of the (over-)reactionary public.
No “News” To Announce?
The “[INSERT TECHNOLOGY HERE] IS DEAD!” phenomenon is pretty crazy. I’ve heard that about Linq2sql for years. The .NET Framework still supports it. Classic ASP still runs on Windows Servers. Heck, my stepdad still programs in REXX at work every day. As someone who’s seen a lot of pain due to companies who break their API contracts, I have infinite appreciation for how reliable & consistent the .NET Framework is & has been, and for Microsoft’s stance on (minimal, cautious) deprecation10.
Sidenote: According “Flash is Dead, Long Live Flash,” not only does the “IS DEAD” phenomenon seem to be universal, but his description of “developer Defensive mode” is right on pointe in “The Future of Flash” paragraph. Great read! Seriously – read that post!
My (temporary) Return to (just pure) C#
I am quite fortunate to work in an environment where I get a lot of freedom to step up & request what types of projects I want to work on (that doesn’t mean I always get them of course, but our requests are definitely considered).
Before I had read Apprenticeship Patterns by Dave H. Hoover & Adewale Oshineye (great book!), I experienced the “Retreat Into Competence” pattern in a big way. After focusing so heavily on learning a new technology (WPF/Silverlight), I was fascinated when I made the decision to put it on hold & re-focus on the backend (in my case, it was my first love, c#).
I’ve been happy at my job for a very long time, but It was freaky how smitten I was at work, even on “that project no one wants to work on” (yes, the not-allowed-to-upgrade-fw 2.0, inherited, html-hard-coded-into-stored-procs one). I “came back” to c# with layers of new understandings that enabled me to see & understand things in ways I hadn’t before. It was almost euphoric (yes I know wpf & silverlight use c# on the backend, & I know it sounds weird, but it’s what I experienced). I “came back” able to see new, more global, extensible solutions to problems. I “came back” able to think more about creating solutions than about solving the problem-at-hand. I “came back” with a zest, not only for helping projects, but for helping others.
Learning Encourages Learning
My favorite thing has always been to learn how & why. I’ve always done what I needed to do, to learn what I thought was the best tool for the job, but what I didn’t fully realize before was how powerful learning OTHER technologies can be for doing that same job.
It’s no secret that I love the developer community. Interacting with other devs has brought me more encouragement & career motivation than I could have imagined. I attend quite a few user group meetings, and each has their own core enthusiasts.
Microsoft’s willingness to support things like node.js has opened up yet another new world to me, full of many who have an entirely different take on programming. As a working parent driven to keep up with technology to help build my tool set, I’m also grateful I can expand without having to change operating systems at this time.
All Companies Become “Evil”
The post here by “eightysevendegrees” reflects my feelings about Microsoft. I friggin’ love them. I love the people I’ve met who work there. I love their support of community, events and training. I love that I have this fun career, largely thanks to their products (spawning from the awesomeness that is the .NET Framework). I love how open-minded they’ve become toward open source. I could go on & on, but I’ll stop to reflect on my favorite guess as to a reason they’re perceived as “evil,” by “phillipsjk:”
Money is the root of all evil.
Microsoft has lots of money.
Therefore Microsoft is evil.
A surprising thing happened after Google & Apple “got lots of money.” The general public’s perception of BOTH Google & Apple shifted from good to evil5.
Loving The Journey
The very nature of what makes many of us programmers is what fuels our ADD-like behavior that forces us to get consumed by the latest “ooh, shiny!” technology – inside AND outside of the “pay the bills” work hours. In a day & age where one can stream tutorials & podcasts to a cell phone & listen to them through car speakers wirelessly over bluetooth during a daily commute, that is something to be embraced, not inflict fear.
No matter how much we plan for tomorrow, the work being done every day by so many amazing people has the potential of changing the ballgame.
There is SO MUCH amazing technology out there. If creating (solutions, products, applications) truly is your passion, we live in exciting times, full of so many flavors it can be deliciously overwhelming, The more technologies we learn, the better we become at choosing the best tool for the next solution we want to create. I can only imagine what learning “the next big technology” (and the next one, then the next one after that) will do to free & expand my mind.
- Ballard, Paul, “Avalon CTP Released,” Online posting dated November 22, 2004, TheServerSide.NET, retrieved 12 July 2011.
- Guthrie, Scott, “Announcing the release of the first ‘WPF/E’ CTP,” Online posting dated December 04, 2006 11:07 AM, ScottGu’s Blog, retrieved 11 June 2011.
- Resig, John. “JQUERY 1.0,” Online posting dated August 26th, 2006, JQuery Blog, retrieved 9 July 2011.
- Pichai, Sundar, “A fresh take on the browser,” Online posting dated 9/01/2008 02:10:00 PM, The Official Google Blog, retrieved 2011 July 10.
- Kendrick, James, “Apple vs. Google: Who’s Evil?” Online posting dated Feb. 12, 2010, 2:43pm PT, Gigaom, retrieved 2011 July 10.
- Muglia, Bob, “PDC and Silverlight,” Online posting dated November-01-2010 at 12:29 PM PST, Silverlight Team Blog, retrieved 2011 July 10.
- Larson-Green, Julie, “Previewing Windows 8,” Online posting dated June 1, 2011, Microsoft News Center, retrieved 2011 July 10.
- Conery, Rob, “The Hard Thing,” Online posting dated June 04, 2011, WekeRoad, retrieved 2011 July 10.
- Wilcox, Joe, “End of an era: Bob Muglia is leaving Microsoft,” Online posting dated January 10, 2011, 1:30 PM, betanews, retrieved 2011 July 10.
- Melnik, Grigori, “On Deprecation,” Online posting dated 8 April 2011 2:05 PM, Grigori Melnik: Thoughts on Agile Software Engineering and Beyond, retrieved 2011 July 10.