I’ve been thinking quite a bit about where I’d like to see Windows to go down the road–particularly from a programmer’s perspective.
Although I’m still trying to think through precisely which APIs/SDKs I’d like to see, I have come to the conclusion that for all practical purposes the future of Windows’ API and the .NET Framework are woven together. It’s not just about what I’d like to see in Windows–it’s about what I’d like to see in Windows and the .NET Framework collectively.
As a long time C and C++ developer, I’ve grown to accept that I now live in a C# world. With this behind me, now it’s time to think about where I’d like to go with all of this.
Here’s my starting point: Whatever “it” is, I want to see higher and higher level SDKs. The web is a great illustrator of the value of this–something that was always true even on the desktop, but something no one quite had the time to get around to. The web reminded us of the importance of decoupling and how much more we can all get done if we choose the connection points right. Why is higher-level programming more “doable” on the web? It isn’t, but the connectivity makes it shine. That’s the motivator. That’s the facilitor.
Look at all the mashups–using classic think about how we could have written these on the desktop, would we have ever gotten there? I don’t think so. When it comes to graphics intensive apps, such as mapping tools, most efforts would have crumbled when it comes to low-level graphics implementations. Same goes for image handling. And then there’s the whole file system issue. And deployment decisions.
Anyway, back to Windows and the .NET Framework. It’s obvious to me that Windows development is never going to lead anymore–in the broader sense. There’s too much legacy stuff that Windows has to honor. Adding anything new is risky and I can appreciate the Windows team saying no to the latest new ideas. Rightly they’d doubt its real value. The result? Windows is very unlikely to have any new leading edge technologies within it. They have to be proven first. And then if they are “proven,” I can see the team arguing that “Hey look at how far you got without your great app or tools being merged into Windows, so why should we fold them in now because 1) you didn’t implement them the way we would have and 2) it would increase our testing like you cannot imagine. In other words the Windows gatekeepers are all about saying “No.” From a user’s perspective it’s for our own good. Sorry early adopters.
And this is where the .NET Framework comes in. It should become the future of the Microsoft API if you will. Notice I didn’t say Windows here, I’m referring to the future APIs collectively as something that Microsoft makes available for the browser, for Windows desktop apps, for cell phones, for MIDs, and yes, even for the Mac and so on.
For the future of the .NET platform I’d like to see more and more high-level APIs. For today’s world, there should be lots of RSS feed support, OPML mindedness, Facebook APIs, and so on. Yes, Microsoft is going this direction, which I think is the right path. But what about tomorrow? I’d like to see APIs for connecting apps, similar to OneNote’s shared session feature. I’d like to see vision SDKs, including face tracking, face recognition, and gesture reco. I’d like to see neural net APIs, text searching tools, dictionaries, grammar analysis of sentences, and on and on and on. Some of these could be desktop focused. Some could be web focused. Some could be both.
Why am I suggesting to expand the focus of the .NET Framework? Because as I described the other day in a post, the world is about connected devices and communication. And you can’t have effective, powerful communication, if everything is locked into one platform. Silverlight is beginning to pave the way here, but there’s so much more that’s possible and feasible.
Give a developer a vision SDK and they can do some clever things. Give them a framework where they can process 30 live video streams, stitching them together in real-time, indexing major events all automatically, generate thumbnails for quick and easy access, well now you’ve really changed the game. To pull this off there’s going to be huge infrastructure challenges, yes. But imagine what developers can do if you keep climbing the abstraction layer? With good connectivity and good processing power, there are so many exciting things that will become practical for let’s say one or two developers to do–which has always been a magic number in creating new, exciting solutions.
So where does Live fit into all of this? I see it as a component of .NET–at least the tools part–and then by definition the low-level functionality. Search, for instance, is a very high-level search API or query engine. Same goes for Virtual Earth, and on and on. Likewise, ad databases, page scraping, context analysis, tagging, semantic analysis, news threading, and so on all have primitives that would be part of the Microsoft Framework. Now all of these might have end user front ends–I guess that’s where the Live team fits in. It would take care of maintaining this portion. But everything else would be developer oriented. It would be about creating very high-level APIs.
Yes, the future is about connectivity and very high-level SDKs–at least for the majority of developers.