The dying platform: .Net
roundcrisis.com
roundcrisis.com
While the front end flashy stuff isn't there compared in .net compared to the better Javascript libraries (I love d3!) MS have really progressed the non-sexy .net improvements e.g. C# evolution, F#, WebAPI.
MS has to come to the conclusion that it is not a consumer tend setter any longer. Consumers only use Windows because it came on their PC. And as more and more of the consumer market goes mobile, Windows becomes irrelevant. And (sadly for MS) they were too late to the mobile market so their devices (phone and tablet) are going nowhere. I got a friend who works at Best Buy who told me no one is buying the Windows phones. And few are buying the tablet. It's IOS and Android all the way.
MS should focus all it's eggs on enterprise. Plenty of cash to be made in that market.
It came so close to being Android. In 2000, Microsoft previewed .NET Compact Framework for Windows CE devices. At the time I had an iPaq connected via Bluetooth to an Ericsson 2.5G phone, and I writing C# apps for it. My immediate impression was "THIS is what mobile software should be like!"
Seven years later, with NETCF an optional oddity on Windows Mobile, Android showed you could do a mobile OS using a Java-like managed language system for both system middleware and applications. Windows Phone is a bit closer, but it still isn't that.
Android was willing to be more revolutionary, replacing much of the Linux userland with managed language code. That was a big gamble, but that is what it took to succeed. If Microsoft were to take the Win 8 kernel and .NET, or successor technologies, and unleash their engineers to make something really new, they would be a fearsome competitor.
Dragging Windows onto tablets is a waste of talent.
There are some really, really sharp guys at Microsoft. Not only does the community deserve better products from such a great company, the developers in many cases have an very unpleasant work experience.
Google is not too far behind. I think they're pushing a lot of the things they are simply to keep momentum building. In another 20 years, unless they start building time machines, it'll catch up to them, too.
Apple is a strange case. They passed the "I wouldn't work for them for a million bucks" point many years ago, but they're just better at slapping a better marketing image on it than the rest of them.
Having said all of that, I like .NET, and I think combining it with Mono makes probably the most full-featured free platform for development anywhere in the world. The effective targeting of the business market by .NET may be waning, but the platform is nowhere near dying off.
I agree. If you have ever done any development using SharePoint or Dynamics CRM API's and SDK's you will know how much of an overengineered mess these applications are. The unnecessary complexity of these applications does however create demand for thousands of developers to untangle the mess.
They're all so optimistic, with regurgitated Microsoft marketing-speak about how this bell or whistle is going to magically solve this or that problem, and how easy everything is to do now. They've been eagerly awaiting a new customer to try this stuff out on.
Then, sometimes just within days, I start hearing the pain. It's always the same -- the damned development ecosystem is a freaking nightmare and some little gotcha somewhere is killing hours (or days) of time.
I used to teach .NET. Everything is awesome as long as you go down 7 or 8 pre-defined paths. But nothing ever works like that in the real world. There's nothing like watching a new developer drag a control onto a form, take a look a the properties page with it's 40-thousand item madness, and be utterly and completely at sea. Lost. Bewildered and rendered ineffectual. Their stuff is full of experiences like that.
What completely baffled me when I did quite a bit of SharePoint development of late is, that you are essentially doing web application development, except everything you know about web development is somehow not valid anymore because it has been buried under layers and layers of abstraction.
So you have to go on at least one SharePoint development course, to re-learn web development as you know it.
Oh. My. God. That tool will solve world hunger, land a fighter on a carrier deck at night in a storm, and compute the answer to life, the universe, and everything. It does frickin' everything.
So it also does nothing. You end up having to digest a huge learning curve, creating all these specialty libraries to handle workflows, understanding that you need a view for this, a link for that. It's like having to learn Klingon just to get a cup of water.
Whenever I hear SharePoint any more, I just smile. It's a great tool, and it can do an incredible ton of stuff. I just know the pain that's involved with it, and unless I have no choice I want no part in it -- except for maybe using it as a document repository, and even then Dropbox does all I want with zero learning curve.
Microsoft is constantly distracting me with the coolness of their tools instead of enabling me to quickly solve somebody else's problem. The developer has become the market for them -- and that's really bad for both developers and end users.
I think where they're losing is that they've stopped communicating. With customers, with developers, even internally. They are proceeding down paths they imagined to be important. Some of them are, some of them aren't, and thus the hit-or-miss nature of their current business. I think a lot of this is Ballmer. He's trying to be a Jobs and failing miserably, when all he needs to do is allow his people to actually communicate with the community.
Another part of it is that they can't do anything these days without a bunch of FUD from the media and Anti-MS sheep. I actually like Windows 8 and appreciate the innovation even if there are some hiccups to take care of. .NET is great, and I hope they make it easier to move forward and migrate existing apps to whatever they do next. Will they die anytime soon? Probably not. But if they don't start communicating soon and often, they'll lose some market share for sure.
The question is, where to next? I've been watching Go for a while, but it looks like a tool from Googlers, for Googlers. Pulling all my dependencies from HEAD? No, thank you. Ironically, Javascript looks very promising right now, compared with the alternatives.
I get the impression that much of the complaints stem from not really understanding what is actually happening. It's a shame really. People taking a first look at Go, and running into these kind of rants will get an entirely incorrect impression of the Go tool chain.
Let's take a recent scenario: the YAML vulnerability in Rails. What if a similar vulnerability is found in a widely-used Go project? Well, you can move to HEAD, but you have no idea what else changed in the meantime. It's impossible to know how your application may break. Or you can try to merge just the security patch, which may not be trivial.
Java on the server is still going very strong; in fact I believe many of Google's services are still coded in Java.
The JVM is getting better and better, by the way. Java 8 will be a better language with lambdas and closures. Groovy, Scala, Clojure, Jython, JRuby, and other JVM language implementations are currently great options for developing both portable desktop apps and web apps.
Not sure where Go fits into this either, Go is more of a replacement for C++ by and for Googlers who got sick of C++'s pain points.
And the problem with Java isn't technical. I have a couple of Sun certificates, use it every day, and know what it can do. The problem is that I don't want to depend on a company that doesn't even pretend to have customers and developers' best interests at heart.
But I think you're confusing a language with a development platform/VM/runtime.
C# is a language. .NET is a platform that includes a C# compiler. Java is a language. JVM is a platform that includes a Java compiler. Javascript is a language, not a platform.
What Javascript platform do you think can replace .NET and JVM? Node.js on top of V8?
Or are you really suggesting that Javascript inside a web browser is all you need for application development anymore?
I don't see there being an alternative even on the horizon. Presumably they could create a Node.js type of platform backed by Chakra but there aren't any signs that they are even working on such a thing.
(Also, throwing out .NET would mean throwing out F# which gives them a lot of cred in certain circles).
Opinion:
Timing is a important factor here. My bet is those enterprise companies skipped the .NET/JavaEE era and will jump right into what is coming next.
I know a couple of banks that are heavy Adabas/Natural users for decades. When .NET/JavaEE boomed they opted to just wait. Now, no single framework can really solve most of your problems. In fact, the problems are so heterogeneous that using frameworks at all is becoming completely irrelevant.
That said, .NET, JavaEE, Rails, Django, they are all dead to a certain point. What we will see is the rise of the non-frameworks. People will start doing their own stuff on Go (or anything else) and maybe will start open sourcing parts of it. You will have a lot of mini libraries that you will put together to fit your needs.
Like a framework?
I also disagree with your outlook for the future. Enterprise loves frameworks only slightly less than they love expensive proprietary software packages where support is built-in. I'd love to see non-Microsoft tech like Go move into the enterprise in a serious way but I don't see it happening. For most of these companies their developers have no experience in anything but the Microsoft stack and a good portion of them either can't or won't learn something else. So you're immediately talking about losing a large chunk of your staff. And good luck finding Go developers.
I can't see Microsoft abandoning this segment so it doesn't make sense to even talk about alternatives.
The author of this peace works on making games. Hence why she thinks .NET is "dying". Her reasoning (points) have little to nothing to do with her argument and just seem to be there to help influence the clueless readers and to collect those that have agendas or chips on their shoulders (80 up votes for this delusional blog post).
WCF, on the other hand, is doing really well and is a decent approach to a framework around enterprise communications. But I admit that more often than not, I'm hand-coding my proxies to avoid code-bloat from generated DTOs (I'd rather use a reference to a shared DLL so the compiler alerts me to breaking changes)
For external or HTTP-only APIs I completely agree that it's often overkill. Frameworks like servicestack are much easier to work with in those cases.
Bloat in XML, bloat in configuration, bloat in object model...
Maybe the author has the feeling it is dying because other platforms are in the news more often?
As mentioned above, enterprise solutions are huge. There's a lot of money there, and they rely on Microsoft solutions. Sharepoint 2010 has hooks into Dynamics CRM (accounting and CRM), data workflow and reporting (SSIS/SSRS), etc. I've only seen glimpses of 2013, and I think it'll be slow to catch on (as is typical in the corporate cycle) but it will likely be huge in the future.
I found the IDE really nice, and the debugging tools really powerful...Also desktop app creation felt super easy. I probably won't use C# for prime time since I develop almost exclusively for Linux, but it's always nice to peek over the fence :)
Give me a visual debugger over some terminal crap any day.
In this regard RubyMine is a very good solution to debugging Rails applications and Ruby code.
Hmm, this has got me wondering if there's anything like this available for vim, this looks like it might be neat:
http://vim.sourceforge.net/scripts/script.php?script_id=663
But no C/C++ support. Could be useful for Ruby though.
MS has never been a technology leader as they tend to let others make the early mistakes then charge in, ask Netware, OS2/IBM, Sony, Netscape.
Early bird gets the worm but the second mouse gets the cheese!
A little background: some of my earliest bits of programming were on VB5, then VB6, and then .NET 1.0 when that first showed up. I spent most of my early years on MS platforms, and for the most part I liked them.
I picked up a Surface RT to hack on last year, after a long absence from .NET. The state of .NET shocked me.
For one thing, the subset of .NET that's available on WinRT vs. "real" Win8 vs. WinPhone is really poorly defined. The documentation is incredibly fragmented, and it was very frustrating the even some relatively basic utility classes weren't available on some platforms. It was a struggle trying to cobble even a basic WinRT app together because of how much trial and error there is ("does this class exist? oh shit, no, okay... what's the equivalent class that's named slightly differently in a slightly different namespace...")
There's also a tremendous lack of open source. I develop iOS apps for a living nowadays, and open source is a huge part of that community. .NET has a huge lack of it - everything substantial is proprietary and commercial. Where I can Google for a bit and slap together some libs in an hour on iOS, on .NET it's downloading the trial libs of some commercial libraries, trying them out, adding the totals, and realizing that the same feature set will cost you $10K a year for these licenses. The alternative on Android/iOS is free.
A more general complaint is MS's schizophrenic support of .NET. When .NET 1.0 first came about it was touted as Microsoft's long-term direction. This was the new platform, and we can count on it being supported as a first-class citizen on all MS platforms for a long-long time. That didn't pan out exactly. Microsoft has a really bad habit of making 90-degree turns every so often that destroys any developer trust. You can't rely on anything on a MS platform because in 3 month's time they could pull the rug out from under you with little to no warning.
But, but, but, Silverlight.
Microsoft is a public company that makes software and sells it for a profit, what is wrong with this business model?
All the free open source software you use to make a product, do you then give your product away?
Sure, the complaint isn't about pulling the plug on things in general, but rather how fragmented and difficult the documentation has become.
If class Foo has been deprecated in favor of class Bar in a different namespace, say so on Foo's page. If class Foo is a basic utility class, it would greatly help if the documentation could point to Bar, if Bar was the supported equivalent in WinRT.
Things like that. Considering how sparse the community support can be (I find .NET discussion on StackOverflow to be substantially less voluminous than, say, iOS/Cocoa dev), the reliance on first-party docs is not really optional.
> "Have you used NuGet yet with over 1100 packages?"
Yes.
> "Microsoft is a public company that makes software and sells it for a profit, what is wrong with this business model?"
You seem to be under the impression I'm railing against Microsoft. I honestly couldn't care less about Microsoft's business model. I'm strictly speaking from the perspective of an app developer - a demographic Microsoft seems to be keen to court. My experiences so far seems to indicate 3 choices:
- Develop on Android/iOS, gain access to enormous volume of free (as in beer) libraries that will speed my work along and make my life easier.
- Develop on WinRT (and WinPhone? my exposure on that side is limited) and home-brew a lot of core utility functionality because it doesn't exist in free (as in beer) form.
- Develop on WinRT and pay astronomical licensing costs for core utility functionality, which is an easier pill to swallow if the profitability of the Windows Store is more reliable.
This isn't a philosophical argument about profiting off of code, about the freedom of knowledge, or anything like that. This is a plainly pragmatic argument about developing for Microsoft's latest-and-greatest platform, and how there are very large consequences that make their platform much less attractive to developers as a consequence of both their business model as well as their approach to support and documentation.
But I am personally confident MS will attack this market with full steam and deliver native tools to their developers sooner rather than later.
How so? Microsoft has been completely behind .NET for a decade now. Early on, some .NET advocates demanded that Microsoft only back .NET, with complete ferocity (e.g. that Win32 would become a second class citizen), but that was silly to begin with and is unnecessary.
Various technologies that might have used .NET have come and gone, but Microsoft has been completely behind .NET.
[1]: http://nuget.org/
I think you're a bit off base on open source - there's not the same level of emphasis as on some other platforms, but there's a fair amount of high quality open source stuff for the platform, whether by Microsoft (F#, ASP.NET MVC, etc.) or by the community (Mono, Service Stack, nHibernate, etc.). The move towards NuGet packages has increased the momentum here significantly.
I also think that you're not being fair when you talk about Microsoft switching directions on developers. It's certainly true that the new hot MS technology may come out in 3 months and the way you've been doing things may no longer be recommended, but I can't think of any company as good as Microsoft at supporting their legacy technologies.
They should also buy Red Gate and Jet Brains and bake their products into VS and SSMS themselves, while happily releasing updates and enhancements for FREE.
Bah...what do I know?
I fail to see a better way of increasing the number of users of their platforms, then to release the entry point for free.
Whatever the merits of the thesis, they'd certainly get sued, and almost certainly lose.
Actually, yes it can. I think Microsoft (especially Microsoft Research) is amazing and have been one of the most innovative companies of the last 30 years. But I'm not gonna pay them for the right to use a language. I'm also not going to lock myself into a system which requires me to pay them for other things as well (Windows Server, SQLServer, etc). I know there is Mono, but it is not the same. Its a shame, cause F# is one of the coolest languages out there right now.
I have the inverse feeling: recently, just because at MS some people got a catch on a new fashionistas UI, and gave it a sexy name (flat UI), I have read a lot of praise for this company, as if it was something someone could wish that their tablet or mobile OS would get back on the front of the scene.
This just shows how shallow are the memories of us, developpers. So let's restate it vigorously:
MicroSoft is deservedly hated for extremely grave sins against the industry commited not so long ago.
They regularly force OS upgrades nobody wants even when the failure is patent, and their software is so unmanageable that most PC users have become like beaten dogs begging for the minimal working setup, admiring those who know how to ctrl-tab to another window, fearful of any changes in their software installation, inculated from viruses by rootkits that even more harmful than what they are supposed to protect you against, and the only action they dare take beside reading email is to reboot, and take a coffee break.
They, MicroSoft, also imposed a central crappy software (IE 6) on their monopolistic OS, and used this position to try to smother the big waves we are all surfing on: the Internet itself. They purposedly tried to strangulate the distributed network, because it was not going to bow and contribute to the church tax.
No, Internet's fate was not granted, it could have become a TV-like network of a few content providers like AOL feeding users through the nose. Actually, it is still under attack, also from other threats, many of them having grown on its roots.
MicroSoft is a mammoth, she will endure a very long death, but let's have the minimal pity, and let's not make this agony longer by unduly praising their latest relative PR success.
End of the rant.
.NET on individual workstations is... irrelevant. Largely.
I see no reason why I should be ignoring the server marketplace, because IMHO frankly that's where the corporate dollar is.
In your world maybe. For bespoke LOB applications, it really isn't.
SQL Server is expensive, but completely optional. Just because you use .Net, it doesn't mean you have to use any other piece from the MS stack.
And all the technologies/hardware he mentions here are agnostic to the web/network portion of a system.
The web frameworks have become too complex and bloated. Every major release of Visual Studio seems to bring another layer or way of doing things as well as denser configuration files. A decade or so into it there is just too much there there.
I've used Mono but I'm starting to get concerned that Xamarin is concentrating more and more on mobile tools and less and less on the base .Net libraries. As an example I would point to version 3 still being in beta and the documentation on mono-project falling behind.
Hats off to Microsoft, clearly someone in management knows more than their own marketplace. Sometimes to be a market leader you must ignore the needs and wants of the market, after all leaders need to make the market go where you want it, right?
button = Button.new
button.text = 'Foo'
button.location = Point.new(0,0)
button.click {|sender, e| do_something}
window.controls.add(button)
Makes Qt and Gtk look like over-engineered monstrosities.I'd imagine they will have a clean and easy migration planned in the next 3 years.
I'm still glad I know C#, but I haven't had a use for .NET in a long time, and have little reason to. Desktop apps are something else entirely, of course.
Oh wait, here it is: [1] - melc's ass.
============
IIS has given me a TON of performance right out of the box with a fantastic GUI editor for settings. StackOverflow a website with MILLIONS of monthly hits runs fine with IIS.
- Win2003 servers had a limit on the amount of RAM so that was a bit of a problem along with the sluggish performance compared to linux based servers that we are used to work on. Did we have a choice to switch operating system? hm.. not really
- sql server was pretty good it did much better than i expected and i really enjoyed all the functionality out of the box, but that was until we reached more than 10 millions of records in some tables, then it was no more fun but that could obviously happen with any database. Did we have a choice to switch database? hm.. not really
- iis6 whether you like it or not you have no other choice. Having a background with jee application servers of different vendors where i could configure and customize them in any level, switch them with other vendor solutions and do plenty of architectural tricks.... i did find iis situation a bit weak
- programming with c# was great, but if we needed any good libraries/APIs did not exist or we had to pay, not many choices here either and as with all other parts targeted only to ms platforms
Stackoverflow is really great, and i was sure that in the past i had stumbled upon a post about stackoverlfow architecture i.e. http://highscalability.com/blog/2009/8/5/stack-overflow-arch... to be honest i was a bit suprised that they were using ms technologies. To me the bottom line is that for large scale projects based on ms technologies you will eventually need to invest money and time to proprietary solutions without many architectural choices, at least not as many as other platforms provide. Of course that is certainly not a problem if one works only on ms platforms.
Oh, well, perhaps the higher-ups in MSFT need to have a clue first.
Only thing I can think of that might save the day is if MS properly open sourced it. Chances of that have to be pretty much identically zero though.
I mean, ten years ago, did you think lots of people would be coding in Objective C? It's funny how things change.
By "people" do you mean developers or end users? Because if you mean end users, every end user of Windows uses some program that's built in .Net every day. End users don't care, as long as it works.
If you mean developers, developers go where the people are, for better or worse. There are a lot of people using i-devices, so Objective C lives and will continue to live. There are a lot of people and companies using Windows machines, so .Net lives and will continue to live.