I definitely think these changes will keep existing .NET developers in the fold. People who haven't embraced the Microsoft ecosystem at this point probably won't in the future.
Things I'd say hurt outsider adoption:
1) The ecosystem of freely available .NET libraries is minuscule compared to what you have with Python, Ruby, PHP, Java, and probably even Node. And the quality of .NET's 3rd-party commercial packages are typically worse than what you'd expect from free open source libraries in terms of both software quality and documentation.
2) Going along with #1, things like database/service drivers, web service APIs, etc, are never as robust or feature-complete as their Python/Ruby/PHP/Java etc counterparts. And sometimes they're really late to the party getting just a basic implementation going.
3) Many .NET shops are technologically conservative, for various reasons, and don't embrace the new technologies. If you're a developer excited about these technologies, understand that probably 80% of .NET shops will never touch these changes with a 10-foot pole for the next 5-10 years outside of rinky-dink projects.
4) The .NET library itself is kinda unwieldy, and only becomes easier to work with if you invest in expensive tools (Visual Studio). In the OSS world, you may have to install a few freely-available tools first, but you get the first-class experience for no cost pretty much right away. In the editor of your choice.
5) Once you step out of Azure, advanced deployments of Windows server have a sizable learning curve that rival Linux in terms of difficulty and complexity. In fact, today its probably harder, ever since Microsoft re-did technet to make it way more difficult to get comprehensive information on stuff.
2) You have no idea what you're talking about. ADO.NET is arguably the MOST robust database driver abstraction out there, with support for just about any DB.
3) Simply not true. Conservatism strikes everywhere, especially outside of startups. However, it's up to the developers to decide if a technology is viable for their ecosystem, not you. Just because it's new doesn't mean it's better.
4) First-class experience? Tell me how robust your Javascript refactoring workflow is? Python? Oh, that's right, it's damn near impossible to refactor either one without investing serious time wading through code.
5) IT stuff is hard, whether you're running Nginx/Apache on Linux, or IIS on Windows. It's not, however, more difficult for IIS. Technet was outdated anyway. Look at http://www.iis.net/. It's way more useful than Technet ever was. Oh, and you don't like IIS? It's what OWIN was made for. Use whatever server you want, or be like those cool Node kids and use the framework to run the server!
This is the crux. As Linux developer I can move between languages and frameworks without fundamentally changing my knowledge of the os and my development workflow. I can use ruby, node or python along with docker, vagrant and git. And I can switch between them with relative ease.
I can work on windows, osx or Linux and test production code very easily using virtual box. I can automate the creation of the entire os from rpms so that every time I run a deployment test I know it's a close to production as I can get.
A lot of this might be possible with .Net, but it only let's you work with .net languages.
That is the real problem. There is a fundamentalism divide at the os level and the cost of switching in EITHER direction is to high.
The "Express" versions of Visual Studio have been available since 2005. You can install plugins/extensions in the Express SKU, but it's a solid option to get Intellisense and debugging for students, hobbyists, small shops, etc.
1) What is your system of measuring this? This may be because 99% of what you need to develop a very fully featured app is already in the base .NET frameworks. So there is rarely need for 3rd party libraries unless very specialized. The vast majority of the code we need outside of the framework is very specific to the user's problem we are trying to solve.
2) This is complete and total b.s. Please enumerate an example (or two) of deficiencies of a .NET driver vs a counterpart in each language: Python/Ruby/PHP/Java.
3) Maybe many .NET shops are simply in love with the productivity they get out of their .NET efforts because of the integration between MS stack components from development through deployment.
4) Huh? I guess maybe if you have to install .NET framework on Linux you'd notice it's size. It's not like you have to go installing and deploying it everywhere if you're on Windows. You use what you want and never notice the rest. As for VS, it's actually pretty awesome. I interviewed someone today and watched him use sublime to develop a rails app and marveled at how stone age the process was in some regards (this sounds like a dig at rails and sublime, but I don't mean it to be. Some stuff was done very quickly and easily. Some aspects of Rails and Ruby in particular are really cool).
5) You don't know what you're talking about. I've deployed in 1 click to AWS and to my own dedicated servers with one click. Technet? I've been using .NET for 10 years and have never used Technet once.
When I was considering which language to start learning as a newbie, this was a major reason I was attracted to the Rails ecosystem: I can use a "stone age" tool and don't have to deal with yet another learning curve (i.e. a complex IDE like Visual Studio).
Have to disagree that .NET itself is unwieldly. All the 1.1 stuff was back in the age of "GUI/designers for all the things" but now .NET is far better.
As someone has been keep a close look at the new developments of Asp.net (read: the new asp.net stuff, not the old Aso.Net webform stuff, which I genuinely hate) for the past few years, I think it is really becoming something attractive.
That being said, I have also used a lot of nodejs (yes, it is awesome) lately stuff, and tried to pick up things like CakePhp two years ago. I believe that I have a better picture of the situation.
So here it is, 1) Is asp.net going to win over some developers from the other camps? Maybe some, but not a lot.
2) Is asp.net going to win the heart of new developers who has not yet jumped into any camps? I think so, at least with a bit higher chance than before, given that it keeps improve/innovate at current speed.
3) Is the open source community going to love aspnet? Less likely, given the history of relationship between Microsoft and the Open Source community. But the situation will improve, as you clears see that Microsoft is starting to embrace OSS more and more, though still not enough on the fundamental level. That is because Microsoft is not at a position where it was before in the industry.
Sometimes, some people in the Open Source camp just have this blind hate towards anything Microsoft/.NET, without even trying to see what these things are. The same would also apply for people from the .net camp towards the OSS. That has been the situation for a very long time, I hope this would improve over time. The world today is no longer the same as the world yesterday.
Yikes.
That's what I meant by "clear" ... there is no clear ability to rollback from a VS-initiated MSDeploy.
"Many .NET shops are technologically conservative" - probably less then there are e.g. conservative Java workshops though, not a valid point.
"In the editor of your choice" - which will feel like a notepad after using Visual Studio - not a valid point really, IDEA for Java is the only exception.
There are some good points hidden there, but the post paints a picture much darker than it really is. I mean based on this post I would never say Unity3d could happen. But it did happen.
Octopus Deploy takes care of this. Each endpoint server has a small app running on it (a tentacle). It can pull or deployment server can push updates to each endpoint. I can deploy to hundreds of servers with no downtime.
I can push builds out of TeamCity directly without even touching Octopus Deploy if I don't want to. Server settings can be set up as part of the deployment.
Web apps, Windows Services, etc can all be deployed and then tweaked with Powershell.
I'm also deploying database scripts at the same time. It isn't hard.
Last year we were still getting Java 1.4 project requests.
Your list appears to be biased towards people who only want the Bazaar. Also, I think it's crucial to acknowledge that "the Web" is just an extension of the Bazaar.
So, here's how I see it:
1) The .NET framework already comes with thousands of free high-quality components, libraries, packages, etc for every type of platform - web, desktop, mobile, services, data, etc. The majority of .NET programmers don't need to travel outside of that for basic needs. Furthermore, I doubt that you'll find FOSS native components that can rival what's available for .NET from companies such as DevExpress or Telerik.
2) The majority who choose .NET don't make that choice because they want to work with the latest whiz-bang NoSQL database or recently invented API. They typically want to build business applications that will be stable and integrate well into the rest of the enterprise. What seems like "late to the party" for you is just prudent, conservative decision making for a .NET dev.
3) Do you think the majority of FOSS shops are working on the bleeding edge? I don't know, but most of the *nix shops that I've seen use old Java frameworks, or they only run RHEL/Centos or are still using PHP and MySQL for everything. Rarely are they doing anything interesting or new.
4) "The .NET library itself is kinda unwieldy..." I don't get this at all. What kind of first class experience are you going to get with any FOSS environment unless you've already invested significant time learning vim or emacs? At least with .NET you have the option of getting a first-class experience without investing any time learning one of those.
5) You didn't list any specifics. What's harder to deploy? Also, what do you need information on that you could not find in Microsoft's vast array of documentation or elsewhere on the web?
Eventually I would like a completely statically typed inferred language, go mainstream(Aka Demand for it)
C# is my best option atm.
I don't like how .NET as a platform/ecosystem/community lags on certain things that are almost taken for granted in other areas, like deployment tools and package managers. Then again, when I worked with .NET those things were my responsibility so I guess their lack affected me more than many .NET devs.
You can run mono in linux containers which means you can run this stuff too.
[0] http://www.zdnet.com/microsoft-to-offer-its-drawbridge-virtu... [1] https://research.microsoft.com/en-us/projects/drawbridge/
.Net has always had containers like that.
The Hyper-V team have also been actively committing to the Linux kernel for many years now, and I'm happily running a 6-node Cassandra cluster on my Windows 8 dev machine right now using Hyper-V :)
So it's not there yet, but ground has been broken.
What is not fine is the rest of the ecosystem. Going Microsoft usually means Windows (good luck convincing etc corp. to run on Mono), and sometimes, even things like Sharepoint.
Thanks, but no thanks. I'd pick C# over Java any day, but dragging all that baggage is not acceptable.
"ASP.NET vNext (and Rosyln) runs on Mono, on both Mac and Linux today. While Mono isn't a project from Microsoft, we'll collaborate with the Mono team, plus Mono will be added to our test matrix. It's our aspiration that it "just work.""
What's wrong with VB? It does no more and no less than C# does, with different syntax. Shall we just do away with English, because German is just so much more to my taste?
They're basically equivalent [1] and I (personally) would rather MS drop the engineering efforts they have in place with VB.NET and focus them on C#.
[1] In one or two places VB.NET has more functionality than C#. It has syntax for the CLR's Exception Filters whereas C# does not (although I believe the C# dialect that Roslyn supports is going to change this).
Now I've grown very used to the VB.NET syntax, and when I go back to other languages, I hate two things:
- case sensitivity and
- the semicolon (;)
I can live with curly braces ({}) :) though having each line be its own statement is very convenient.
There are several things to dislike about the VB.NET syntax (Dim being the most egregious), but I think many languages could adopt some of its benefits.
Groovy in particular did away with the semicolon, and I'm glad :)
Both Scala and Javascript also make the end-of-line semicolon optional.
Someone said the same about Linux too.
I've done .NET development before, and there is essentially nothing that could tempt me back and away from Linux/Clojure/Python/PostgreSQL/etc.
Both are essentially eternal niches; they afford you more ease-of-use if you stay within the mold but their monoculture will make certain things unlikely to happen.
Not even so much because it's impossible, but because it goes against the mindset that led to the platform in the first place.
Until then, everything .NET is a non starter because I don't care for Windows. At all.
Mind you, I don't need it to be open source/FOSS etc.
I have programmed on the Microsoft stack for many, many years, and still make a good deal of coin in .NET and SQL Server, so I'm not coming at this with an agenda. At the same time I can as easily leverage other technologies so I don't feel as grateful when Microsoft catches up.
^1 - I was working at a shop when .NET was first introduced and one chap was making a case for why we should adopt it. His case made a very compelling case for why the shop should have adopted Java years earlier, and it was actually eye opening to me because it was a demonstration of an organization and a team who saw their universe of choices as being defined by Microsoft.
Wait, what? Have you never heard of the phrase "embrace, extend, and exterminate" before? What you describe is simply step one of their modus operandi.
I think the only difference between the 1990's Microsoft and the one we have today is they aren't as good at the exterminating part. They still extend things like crazy, but either they really are trying to play nice or they just don't have the weight to exterminate much any more (that wasn't already swalloed by them). My opinion is it's likely a mixture of the two.
I view Apple's closed ecosystems with a similar sense of apprehension.