C# and .NET's Sudden Ubiquity
drdobbs.com
drdobbs.com
I look forward to a future where C# is more ubiquitous, because, as the post states, this will largely come at the expense of Java, which has always felt like C# Only Not Quite So Good. Cross-platform these days means a lot of mobile work, and if we can write our server backends, iOS Apps and Android apps in one language that's a big win.
But I think .NET has also long suffered from a more anemic ecosystem than other platforms have. Things like a package manager have just recently come around. Things like tooling and educational resources seem more spotty than for other platforms. (Although some of the for-pay .NET tools are really, really nice.)
So, I too would like to see it used in more interesting ways than line-of-business desktop/web apps. But I wonder how the above things will play out. I'm really glad it's not so tied down to Windows anymore. But maybe there are other issues to resolve, now.
I'd looked into mono (mod-mono/fcgi) a number of times, and it was always painful, with some performance/stability issues, and in the end worth the server license to just not deal with it.
For the past few years, I've been doing more node work than .Net and loving it. That said, I wouldn't mind doing some pieces in C#/.Net because it has a lot of niceties as well. It's generally the "enterprise" tooling, and excessive use of design patterns that has made it more painful in practice.
Good times indeed.
Are significant portions of SQL Server, SharePoint, and Exchange written in .NET managed code? I would have thought most of the code base for that stuff would still be in non-managed C++. Will having .NET on Linux make it significantly easier for them to release SQL Server on Linux?
So we might see SharePoint for Linux yet.
The other two I suspect are very tied to win32.
Just look at SQL's installer for tools, it really seems to be a gui on top of some cli tools. Its' origins are in Sybase, which IIRC supported a few platforms early on. MS-SQL is a pretty good value compared to say Oracle. The management interface as well as scaling (replication) support is very well integrated. I've wished PostgreSQL could get to this level in the box for years now.
I think this has more to do with developer mindshare than anything, especially with Azure as a platform. If you can write .Net apps and run wherever it's very appealing. Even with Mono it was a nice story to have. Integration with system libraries to .Net is much easier than Java's JNI and the like. If I can write C# in VS and deploy to Linux as easily as with windows, it will likely return as my back-end of choice.
I'm pretty sure this is about gaining back some developers. All the cool things happening these days on mobiles and on the web are not happening with Microsoft's platforms.
It's important to remember from where .NET comes from. It was part of a larger vision of Microsoft that included Windows Longhorn, .NET Passport, project Greenwich and Trusted Computed. Of course this vision screamed "Lock-In" and it was about just that (too bad that it is happening anyway, yet people aren't paying attention anymore). So .NET wasn't opened because it was seen as a way to keep people on Windows. Sure there was an ECMA standard, but that was just like putting lipstick on a pig (though ironically that ECMA standard is much stronger and useful than Java's JCP, which is a complete farce).
Unfortunately they missed the forest from the trees. The web developed outside of their walls, mobiles developed outside of their walls. All the cool things happening right now are happening outside of their walls. And now all of a sudden, a Windows-specific platform becomes a liability, a way to keep people out of Windows or whatever Microsoft wants to do.
Personally I'm happy about it. It's a pretty solid platform and a good alternative to the JVM. Given the dickish moves by Sun against Apache Harmony and by Oracle against Android's Dalvik, I think it's about time the JVM had some competition. .NET is still missing a healthy ecosystem though. For Java / the JVM the ecosystem is intimidating at first (e.g. so many choices, so much open-source, multiple IDEs, multiple languages, WTF), but it's actually its biggest strength. On the other hand if there's enough interest, then .NET can catch up as the basics are taken care of.
This will be interesting. Obviously, .NET is the best way to make desktop GUI in Windows; I wonder what they will do to support GUI creation on Linux and OSX.
I also like Xamarin.Forms' way. Describe, in general terms, what you want the interface to look like, and it generates native GUIs for Windows Phone, Android, and iOS that follow each of their different UI conventions (tabs at the top, tabs at the bottom, menu button, etc. depending on the OS).
Java has many more high-quality open-source libraries than C#, but hopefully over time C# will catch up.
From my PoV neither Java nor .NET is the first choice for UI. HTML and JS is. Especially for large multi-million dollar software. I know what I'm talking about here. Yes, HTML&JS are bad and crap, but may times better than applets or desktop apps. Nobody likes vendor lock-in.
When it comes to server side .NET is much worse than JVM.
So now, you got the picture why Mincro$oft made this desperate move. Developers, developers, developers...
JVM and Java are much more reliable. Java backwards compatibility beats .NET every time. How many .NET frameworks do you need to install if you need software written in different versions of .NET? Answer: all of them. And Java?: only one. I've got 3 or 4 versions of .NET on my system because of this.
On the server side, you can install whichever .NET versions you need and they will live together quite nicely. But you can only install one Java version, and updates randomly break things (that's probably not true in general, but that's how it seemed to me). And I can only remember a handful of issues that were caused by the .NET framework, we had constant reliability issues with Java.
Having lots of languages available is nice, but it's not a core requirement for a platform in my opinion. .NET has C# and F#, and they complement each other very well.
I haven't had any library issues with Java or .NET, so I can't comment on that.
My guess is that my problems with Java stem from lack of experience with it, and my success with .NET is because of my deep experience with it. So it seems likely that your perspective is for similar reasons.
.NET's C# and F# are actually the only choice. C# is old and at most slightly better than Java 8. F# is somewhat better (much more concise) but still behind Clojure, Scala, Frege, etc... I'll also want to mention here that IMO Clojure is now on the forefront of innovations actually implemented and widely used in enterprise class software. STM, async, channels, static types, transducers, etc... and all these things are so easy to use for a newcomer. Every other language have already copied something from it or is in the progress of doing it. When I'm programming in Clojure I can feel I can work miracles - things that are hard or almost impossible in other languages I can write in a few lines of CLojure. Brilliant language. I'd discovered it couple of years ago and I'm still shocked by its power.
At best you get a minidump out of a CLR process that is misbehaving and take it to bits inside VS. You may or may not catch it doing bad things. Most likely you'll find yourself with half the threads inside win32 and an 20 mins wait for symbol server to snag the symbols.
As far as I can tell the symbol files got removed with one of the 4.5.x releases, and as early as June people were asking about them: https://social.msdn.microsoft.com/Forums/expression/en-US/7b...
Still no word... I'm no debugging expert, but it seems like you're SOL if you want to find a leak within managed code.
We had a system wide thrashing problem with ReaderWriterLockSlim which doesn't work properly under load. Took 15 mins to log into the box to blast the process. Couldn't even get any performance info out of it. Happens on a JVM on Unix; no problem.
For ref the concurrent collections should not be trusted under heavy load in processes with more threads than CPUs. Its to be honest piss poor quality.
That's a real vindication of the "worse is better" theory.
Yes, it's multi-million dollar because that's the budget it takes to make anything complex.
I get to use the both the same HTML-based UI on the web part and the desktop app, as well as the compiled .NET libraries.