Hacker News new | ask | show | jobs
by slg 4414 days ago
As a .Net developer, I find all of the recent announcements from Microsoft really exciting. I just wonder if these type of things are enough to sway people's opinions regarding the platform. There is just so much baggage in the developer community when you say .Net or Microsoft (edit: as one of the three comments at the time of this posting proves). Are these moves just going to stave a potential exodus of .Net developers or will it actually lead to new developers picking up the language?
7 comments

> Are these moves just going to stave a potential exodus of .Net developers or will it actually lead to new developers picking up the language?

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.

1) This is ridiculous. Third-party commercial packages like what? Have you even looked at Telerik's offerings, or DevExpress? Plust, you haven't really needed commercial libraries for the past few years. Search nuget.org, it'll have just about anything you need.

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!

I agree on most of your points except 4) you can get a "VS like" IDE for python/javascript etc with the JetBrains products (WebStorm, ...)
Wow. These .Net guys really missed the point didn't they? I agree with your points completely. The question was 'are these changes enough to bring people over to .Net? '. Most of the responses are all along the lines of: your points are wrong .Net is awesome... If you are using windows.

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.

> 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.

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.

I'm pretty sure you can't install " install plugins/extensions " in the expres editions of VS. Unless, Express SKU is something different ... ?
You're right. I meant to say "can't" there (and apparently it's too late for me to edit that comment now).
.. however they're still Windows-only.
What a troll you are.

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.

>> 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

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).

Microsoft had a long history of failing to cultivate a proper open-source community around .NET - they're playing catch-up now and have opened up the development of many of their key tools, but they're late tot he party at that front.

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.

In reference to #1, check out this summary of module counts for each package manager[1]. The TLDR is that Java, Ruby, and Node.js dominate in terms of module numbers.

[1] http://modulecounts.com/

What about the quality and usefulness of modules?
This is definitely an important question, but I do not have any data on it. If I had to guess, languages with package managers that are harder to use might have better quality. ie: npm is super easy to use, so there are tons of crappy node.js modules, while maven is harder, so the Java modules out there have more polish. Without data, however (how would you even measure it?) I cannot say for sure. Perhaps you could compare number of modules installed past some percentage threshold? If 90% of node modules never had more than 100 downloads, but Java had only 20%, that would be pretty telling to me and might lead to a reasonable weighting factor.
But not in terms of average growth, which is an important metric.
.NETs growth is only modestly better than Ruby or Java, but considering one should expect there are more opportunities for creating new packages, even just ones that copy what is already available in the Java ecosystem, I'd say this is to be expected.
I think you are rather unfair about .NET, most likely because you don't know much about it, or you have not used much of it.

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.

5) I really don't get this point. I never deployed to Azure and in my work I have a Windows Server VM with IIS on top of it. All I do is clicking publish in VS and pointing the right website. Where is the complexity in this?
You deploy into your production environment from within the GUI development tools without assurance that what's going into production is in version control and independent of the peculiarities of your personal machine when MSDeploy doesn't have a clear rollback process.

Yikes.

You've absolutely been able to roll back with MSDeploy since it was released - http://forums.iis.net/post/1970816.aspx
This suggestion is ridiculous. You can right-click Publish from the Visual Studio integration, but at no point are you told about packages or the ability to rollback.

That's what I meant by "clear" ... there is no clear ability to rollback from a VS-initiated MSDeploy.

Well clearly to do it from the UI you would open the previous version of the source that you want to deploy and then click Publish again.
"The ecosystem of freely available .NET libraries is minuscule compared" - examples?

"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.

re 5) advanced deployments of Windows server have a sizable learning curve

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.

great if you pay for octopus
Regarding 3), that applies to the whole corporate world.

Last year we were still getting Java 1.4 project requests.

It seems like you're missing the point of why most .NET developers are using .NET. They don't use it because they want to be part of the FOSS wild-west hack-fest (aka "the Bazaar"). They use it because they want "the Cathedral", where things are well-integrated and work as expected.

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?

How about an HTML parser that at the very least will parse valid HTML - but ideally use the documented HTML5 parsing algorithm?
I have used the "HTML Agility Pack" in the past with fair success, and it's available on nuget.

http://htmlagilitypack.codeplex.com/

As someone who recently moved from C# to working with Node, Angular and Python full time, the recent announcements definitely make me want to go back to using .Net again. I love where all of the new stuff is headed.
I've worked with various languages C#, Python, Ruby, Objective-C(I was an iOS developer) but I prefer strongly typed languages for larger projects, and the refactoring tools that it allows for.

Eventually I would like a completely statically typed inferred language, go mainstream(Aka Demand for it)

C# is my best option atm.

I agree. My recent forays in to javascript have left me wanting to rewrite big chunks of my new app in TypeScript instead. :)
Fortunately rewrite in typescript is mainly rename the files, simplify class declarations and add some type annotations as you go
Make the jump to TypeScript, you will be glad you did.
I moved away from C# and .NET about 4 years ago, and use all those things too. The recent developments are great, but I view them more as a cool glass of water for people in a hot place (not hell, far from it).

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.

Well the good news is that those things are standard now.
Yes, those are standard now because they're "old" in the rest of the industry. It remains to be seen if newer tech that is starting to become standard outside of the Microsoft ecosystem today (containers, for example) will be integrated fast enough to matter.
I mean containers like docker. https://www.docker.io/
It's 'Drawbridge'[0,1] in the windows world and it is on it's way apparently.

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/

Containers? You mean like MEF(Included in .net framework) or Unity?

.Net has always had containers like that.

No he mean ressources isolation containers (tiny VMs)
The C# language is fine, F# is also fine (let's pretend VB does not exist). The CLR is fine (and, in some cases, even better than the JVM).

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.

Did you read the article?

"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.""

He clearly did, and I echo his sentiment that the chances of Business X buying into the strategy of going .NET but without the ecosystem (what in most people eyes is the safety net of guaranteed support etc) are very close to zero. Even more so when they start trying to hire .net devs with strong linux devops skills.
"(let's pretend VB does not exist)"

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?

> It does no more and no less than C# does, with different syntax

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).

When I was a fresh graduate, I swore I was never going to program in VB.

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 :)

> Groovy in particular did away with the semicolon

Both Scala and Javascript also make the end-of-line semicolon optional.

good luck convincing etc corp. to run on Mono

Someone said the same about Linux too.

Nope.

I've done .NET development before, and there is essentially nothing that could tempt me back and away from Linux/Clojure/Python/PostgreSQL/etc.

It will never sway a large part of the community. What Apple is to selling integrated hardware, Microsoft is to integrated software.

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.

From my POV: as soon Mono becomes a first class citizen (starting with a robust, cross platform IDE to hosting on Linux without hassle/shortcomings) I'm sold.

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.

They're headed there - it's not a coincidence that the new compiler (Roslyn) was announced with full Mono support and Miguel de Icaza standing next to Anders.
While the announcements may be very exciting if your lot is in with Microsoft (^1), for people on mixed platforms and with real technology choice it just seems reactionary. That Microsoft moved configuration files from XML to JSON is really Microsoft's technology choices in a nutshell.

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.

Of course it's reactionary; the entirety of ASP.Net MVC is a reaction to web frameworks on other platforms. The key, I think, is that it's a very positive way to react. In the past Microsoft always took the negative road, trying to destroy competition, rather than the positive road of integrating and collaborating with competition and letting their products stand on their technical merits.
>In the past Microsoft always took the negative road, trying to destroy competition, rather than the positive road of integrating and collaborating...

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.

It may also be a product of age / experience. If you were involved in the 90's tech industry, it's very hard to forget MS's era of "embrace, extend, and exterminate".

I view Apple's closed ecosystems with a similar sense of apprehension.

Personally, I think if the roles were inverted, the computing world would be much worse.
ASP.NET MVC is a case of embrace, extend, exterminate?! Please think rationally.
This way we can get a better designed evolutionary version of concept, rather than a pioneering early version, e.g. C# vs Java.