I've never been on a Go project so I can't speak to that but I do find myself moving between Java/C# clients every 12 to 18 months or so. Prior to the lambdas support in Java C# was a clear winner in the language category for me. Sure, there's some minor things that can be frustrating in the Java world (ahem generics) but for the most part I find myself at home after a week. Now, the Java platform is an entirely different matter and that's something MS has been gunning to improve recently. I always thought that Java being on Linux gave the platform some real strength because of being able to take advantage of so much server side stuff that's typically only available on Linux. That seems to be about to change and I'm excited.
I am looking forward to playing with .Net again. I used C# and .Net for my personal projects for years, but left it for Linux and Python a few years ago. As Microsoft has made it more open, .Net becomes an option again. Windows 10 even seems OK.
I would add one additional negative against Java though: Java is bureaucracy incarnated as code. The degree of over-engineering present in almost everything I've ever seen written in Java entirely turns me off as a developer.
While not very deep, this is a good general outline of why .NET is still great. I think most startups and SV companies get caught in their echo chamber and use whatever is shiny/fancy without realizing that .NET powers many of the businesses that you interact with daily. Practically every company in the Fortune 500 uses it and if you're looking for one tech stack that can do everything, this is it.
We're a small startup/biz in the adtech space and we went with .NET and it's allowed us to be more agile and build better faster and better technology than all of our competitors. The real test isn't blog posts or endless dev debates but actual productive output and when looking at that, .NET is one of the most successful options available.
SOAP and WCF is a very scary thing. We're in the financial industry and many of the systems we integrate with use .NET and SOAP/WCF.
Although Visual Studio does all the heavy lifting for us via 'Add Service Reference', the sheer amount of boilerplate code generated when integrating a SOAP service is terrifying and bloated. We hope to migrate to ASP.NET 5 but we're not sure how well connectivity with SOAP services will be supported. One of our partners actually requires us to host our own SOAP service based on a spec they provide.
.NET WCF to another WCF integration is fine, but if you try and hook a .NET SOAP webservice to one written in Java, and you'll have pulled all of your hair out after two weeks. The reverse is just the same. They all have slightly different implementations of the specifications.
Make that one week if you have to start dealing with the monster that is called WS-* a.k.a. WS-WTF.
Most of these requirements seem like they were picked after the fact based on .Net's features. Things like a "rich ecosystem" are very subjective and easily rule out several valid options as part of this justification.
What happened to ever just saying "we want to roll with Microsoft's solutions so we did" ?
As the last paragraph states, we saw the writing on the wall with the open sourcing of ASP.NET MVC which is why we were comfortable with sticking with .NET.
We actually don't "want to roll with Microsoft's solutions so we did" which is why we use MySQL not MS SQL, AWS not Azure, git not TFS, RabbitMQ not MSMQ.
EF6 is still the recommended ORM and amazing at what it does. EF7 is still missing major features like Lazy-Loading so while you can use it in production, the team has repeatedly said that it's not recommended or necessary unless you have a specific reason to use it. Summer 2016 is when EF7 is supposed to be at full release.
EntityFramework can also support any underlying database and EF6 has providers for sql server, mysql, postgre, oracle, sqlite and many others. EF7 will even support nosql options like MongoDB.
What exactly is the issue with disk space for a published running app? The GAC (global assembly cache) in Windows was originally designed just for this: to share references and avoid having multiple copies of the same binaries. All this led to was a complicated situation with maintenance and reference nightmares. Disk space is exceedingly cheap and a strange to worry about when picking a tech stack.
Well there's no other way around it - you can either publish all the dependencies with each project or share them in a central place.
Central places don't work very well and again, file space is very cheap. Most binaries compress down very small so there really shouldn't be a disk space issue. And you can always remove dependencies if necessary.
It's just not something that has ever been a problem in over a decade of building and publishing .NET apps.
You're right - VS Code is a open-source text editor with Intellisense and refactoring and plugins and about 80% of the functionality found in Visual Studio. It works well and does almost everything you need if you're working with ASP.NET 5 / .NET Core stuff - which is the only thing you can deploy cross-platform right now anyway.
Visual Studio the full edition will likely never be running on Mac or Linux, but it doesn't need to.
> ASP.NET 5 / .NET Core stuff - which is the only thing you can deploy cross-platform right now anyway.
I understand what you're saying, but it's wrong. You can deploy earlier .NET apps to Linux and OSX via Mono, and get 95% of what you'll get from .NET on Windows. Alas, at a bit slower performance, but it works. Many of the most popular Linux desktop apps are actually written in C#/.Net and run on Mono with GTK#.
It's hard to take anyone who's building new .Net applications on C# very seriously. F# is about 1,000 times better--as evidenced by the fact that the C# team themselves are stealing features from F# left and right.