11 ms·
What's holding .Net back is a lack of the vision thing. That's a shame, since in many ways it is a better designed framework, with a superior flagship language
by jeswin 9y ago
What's holding .Net back is a lack of the vision thing. That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world.
The problem with .Net's vision has been painfully obvious to anyone following .Net over the years - it is still Windows First. While in Enterprises and Startups [1], Linux is what matters on the Server.
As an example, just last week I was looking for some http2 libraries in C#. Go and Java have mature libraries already in production, while .Net only supports http2 services on Windows. That in turn affects other ecosystems as well, such as gRPC Services. This to me is a red flag. Given how important something like http2 was going to be, how come Microsoft is so late to the party? What exactly is .Net's niche, given front-end wars are over?
Another example, the very promising CoreRT project (https://github.com/dotnet/corert https://github.com/dotnet/corert) page says this about Linux: "Same as Windows, the libraries are less complete."
As a late comer, .Net faced an uphill climb. High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). The upcoming competitor is Go, not .Net. If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over.
[1] I've been a consultant to several Small and Medium sized businesses (especially in Medical) which predominantly use Windows and .Net, and that's still a huge market. But even they are looking to move off Windows.
- Nullabillity 9y agoJava may be the JVM's "flagship language", but why would I replace the whole platform with C# when Scala and Clojure exist, and stay compatible with the JVM?
- noir_lord 9y agoKotlin as well as a less radical departure from Java.
- pmelendez 9y agoSome people would take CLR over JVM, so YMMV
- lmm 9y agoOk but why? There are a few low-level performance-oriented programs that benefit from struct types (which the JVM now has too) or reified generics. For ordinary day-to-day programming, though, F# is underwhelming by comparison with Scala, and C# is better than Java but not by enough to be worth migrating platforms for. What's the USP of the CLR? When it first came out I thought it was more friendly to foreign languages, but that doesn't seem to have been borne out in practice e.g. Jython felt like it saw way more use than IronPython.
- jackfoxy 9y ago> F# is underwhelming by comparison with Scala Please elaborate. This is the first I have heard from someone experienced in both F# and Scala to assert this.
- louthy 9y agoI like F# but the lack of higher kinds means F# is mostly just C# with a teaser grammar. It doesn’t really allow for a fundamentally different library envronment.
- akra 9y agoDisagree as someone who has programmed in both Scala and F#; I found F# pretty much could do the same things just in different ways. In F# I found more ways to squeeze performance than in Scala which by comparison is bloated. For the data applications ive written F# wins usually especially with ad-hoc tactical apps and in my experience was easier to teach than Scala which is not as coherent of a language.
- louthy 9y ago> could do the same just in different ways Write a function that works with any monad? No? Write a function that works with any numeric type? No? You can fake type-classes, but it’s in no way a first class citizen. You can’t easily fake higher kinds. You may not need those features, it doesn’t make my original statement any less true.
- Meai 9y agoThe only thing that is holding .NET back is the significantly slower compilation speed when compared to Eclipse's incremental java compiler.
- haxton 9y agothe resharper plugin to visual Studio or the rider ide will both do this. Only builds the projects required and doesn’t need to build dependent projects unless a signature changed.
- Meai 9y agoIt's not comparable whatsoever to how much faster Java is. In Eclipse it basically compiles in the background right after saving a file so you never feel the impact of compilation.
- simplyinfinity 9y agoyou can do that in .net with the watch command https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotnet-watch https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotne...
- tigershark 9y agoI'm not sure now, but 10 years ago I was really feeling the impact of compilation in eclipse. On a big project that I was working on it was taking about 20 minutes for a full build and I had to disable the background compilation because it always messed up stuff and my code would be out of synch. I think that in general Java compilation feels a bit faster, but for sure you can't say that you don't feel it at all in big projects.
- vadimberman 9y agoIf you spend 99% of your time coding and 1% of your time compiling, does it really matter that much?
- maxxxxx 9y agoHow big is your codebase for this to be a factor?
- sercand 9y agoDon't forget the Unity3D, most of the people who use Unity uses C# to make a game. Recently, Godot Engine also added C# support. So .Net is not just about web development.
- jsingleton 9y agoI think .NET's vision is get people using Azure. You could say the same about VS Code. MS want to gain developer mind-share and get them using their cloud.
- rufugee 9y agoHow does VS Code play into their cloud strategy?
- jve 9y agoThey provide you with the convenience to push to Azure with a push of a button. These extensions are automatically recommended when you modify various file types.
- jsingleton 9y agoBasically this, but they also push things like Application Insights, which is heavily tied to Azure. The VS Code editor is also embedded in the Azure web portal. So by getting people using Code they may find it easier to up-sell to Azure. In fact, Code started life as the Monaco editor in Azure and was spun out into a separate product.
- mynameisvlad 9y agoOh my god someone mentioned App Insights organically! My day has been made. Dev here, our strategy for AI is Azure-first, but not Azure only. While we provide first class monitoring for ASP.net services running on Azure, we also have lots of open source SDKs available for major languages, as well as first class Java and node.js SDKs and are trying to bring some of our other open source SDKs to the same level. We totally get that ASP.net isn’t the end all be all and that people run other types of services, so we’re trying to bring App Insights to as many of these services as possible.
- Nelkins 9y agoYou know, I've heard this claim before (that the strategy behind VS Code is to make deploying code to Azure easy), but it never made much sense to me. Deploying a service to production straight from an IDE/editor sounds like a recipe for disaster. I say this as a daily user of Visual Studio, VS Code, and Azure.
- module0000 9y agoI work in the finance sector, and I don't see any new projects being built around JVM (or kafka, or cassandra, but elastic search is still popular). That said, the existing java product deployments are solid and there is no terrifying rush port them. New web tooling is a split between go and python. Also it doesn't hurt that gigantic amounts of business logic are PLSQL, with more going that way every day. We haven't seen .NET for a new project in 5+ years. Doesn't mean it's not a viable tool, but the deployment story is a cost nightmare to us, and our teams distrust the upstream vendor.
- forgotpassagan 9y agoTons of stuff is still built on the JVM. The big five tech companies (besides MS) use Java nearly exclusively for back end development. Python is good for ML and data crunching, but compared to Java it's dog slow. Go is definitely catching on but nowhere near passing Java, maybe it will someday
- scarface74 9y agoThe big 5 tech companies are Apple, Microsoft, Google, Facebook, and Amazon. Neither Apple nor Microsoft use Java. Facebook uses PHP, Google uses a lot of languages but mostly C++ for Search. Amazon does seem to use a lot of Java.
- jcdavis 9y ago> Neither Apple nor Microsoft use Java. From what I understand Apple uses java/scala fairly extensively for backend services.
- cptskippy 9y agoAnd they also run portions of iCloud on Azure using .NET.
- scarface74 9y ago
- spo81rty 9y agoThey are busy porting millions of lines of code to work on Linux. Cut them a little slack on HTTP2. It's coming I'm sure.
- rubber_duck 9y ago.NET core is lacking so many features it's ridiculous, we've had to downgrade 2 projects recently because even MS Azure service APIs weren't supported - if you have to work with .NET avoid core and save your self the hassle - it's still alpha quality in many aspects after years since "1.0". I regret pursuing .NET career at this point, all recent developments on the platform are a joke - despite the praise they get for OSS moves. I'm moving towards frontend these days just to get away from this mess (ironic considering how messy frontend is - should tell you enough about state of .NET core/xamarin)
- LandR 9y agoI've found the same, trying to do anything non trivial in dotnet core is just asking for headache after headache. Its basic things that end up costing hours in effort to get them working. Stuff you don't think twice about in .net. I really really want to use core but it just doesn't seem ready yet, sadly.
- scarface74 9y agoI first tried going full on .Net Core with an ASP.Net Core project with Docker and I was going to try to use Kubernetes even though we were going to stick with Windows Servers. It was overly complicated and there were so many gotchas I found in the proof of concept that I did, I backtracked and went with the ASP.Net Core Framework (aka Asp.Net 5) using Kestral on top of .Net 4.6 and using Hashicorp's Nomad for orchestration. I'll try again in a year....
- manigandham 9y agoWhat features are lacking exactly? With .NET Standard, almost everything should work unless it's relying on Windows specific APIs.
- cm2187 9y ago> with a superior flagship language (C#) and don't forget VB.net, which is an excellent language for non IT professional novice programmers, particularly if they come form VBA. .net provides a good language for novices that gives access to most of the flexibility and power of the framework (outside Xamarin basically).
- megaman22 9y agoVisual Basic is really not a good language. And it's essentially dead. Good luck finding examples, even sometimes on MSDN docs, using VB. Unless you also know C# and can translate between them, it's somewhat difficult to develop in VB. I'm sort of surprised that Python on the CLR isn't more popular than it is; with the investments made in the DLR specifically for better dynamic language support, that seemed to be a natural move to me.
- module0000 9y agoWhat's the appeal of CLR's python implementation when compared to the C python implementation?
- maxxxxx 9y agoYou can interop with other .NET code. That's very attractive sometimes.
- YawningAngel 9y agoNo GIL
- maxxxxx 9y agoI would not recommend VB.NET to anybody. The similarly to VBA is only very superficial and otherwise pretty much all attention is on C#.
- heartbreak 9y ago> If Microsoft doesn't pour a billion dollars into getting .Net ready for Linux in 2018, .Net is over. I feel very confident stating the opposite. If Microsoft halts all investment in .Net today, .Net will still be around another 30 years at least with maintenance work alone.
- oblio 9y agoYeah, but its direct competitor is also fine in this regard. If all Oracle employees are nuked tomorrow, Java will still outlive Cobol.
- maxxxxx 9y ago"High-end web tooling is almost exclusively JVM based (Kafka, Cassandra, Elastic Search, Kibana etc). " This is what's making me want to move away from .NET. Most really interesting development is done in Java and Linux. With .NET and Windows you are often a step behind.
- wikibob 9y agoI have to agree. When evaluating what to learn next, all the interesting distributed systems I’d like to work in are all writen in Java, C++, and now a sprinkling of GoLang. All the C# I run across is line of business stuff. So it may very well be great for that, but it’s less interesting from a development perspective.
- sorrymate 9y agoI feel this is anecdotal, with the truth being that there are now more and more alternatives to the JVM for enterprise systems. Which could be one reason why the JVM has been loosing market share over the past few years. Not to say that Java, Scala or Clojure are not great languages. But I think its going to be trend that continues.
- maxxxxx 9y agoI agree with the stuff that's going around Go and others. But .NET is certainly not where the cool stuff is happening.
- manigandham 9y agoIt's definitely not dead. .NET runs everything from desktop apps to web infrastructure to mobile games - it's a lot more encompassing than building some websites. It also integrates into a vast ecosystem with Office, SQL Server, Active Directory and is backed up by the fast-growing Azure Cloud. Most small, medium and 100% of the Fortune 500 run on .NET code and services. HTTP/2 is just not part of Kestrel yet, which is the default new .NET Core web server. You can always use other libraries and this doesn't affect GRPC at all (which can easily generate the server from .proto stubs). And how are the front-end wars over? Asp.net has great integration with all these modern JS frameworks, along with MVC and WebForms which are both still viable and used often. Why does there need to be a "niche" when .NET already does far more? It seems like you found 1 missing feature and are proclaiming it a failure when the reality is that it's one of the most common frameworks today, and now also runs great on Linux. It'll be around for decades.
- NKCSS 9y agoI would find it hard to believe any new Projects would still use webforms. The fake statfull web MS tried to create with WebForms is just too bloated. With MVC they have something great, something you’d have to use generic handlers for in the past to get any sort of performance.
- Spearchucker 9y agoI'm a consultant and work across a number of accounts. Not sure what "fake statfull web" (assuming you meant state-full) means to you, but in one huge healthcare org and two medium-sized fin. services co's 4 new WebForms projects have started in the last 6 months. Smallest project is worth $1.2mm.
- cptskippy 9y agoWebForms was meant to loosely mimic WinForms and provide an easy transition for VB developers from desktop to Web, and it was mostly successful. The fake statefullness OP's referring to is FormState and the attempts to make WebForms more like WinForms. With the emergence of AJAX though most competent WebForms developers dumped it because of then overheads and used the framework more like Classic ASP while integrating AJAX.
- Dolores12 9y agohttp2? its too new to be supported. .net http client does not support http cookies rfc 6265 which is 6 years old.
- forgotpassagan 9y agoI abandoned .NET over a lack of http2 support as well. The reason? It uses an HTTP implementation baked into the windows kernel. Wtf? So not only does it lack HTTP2 support on Linux but also non-evergreen versions of windows. And yes Go is the new competitor for Java, .NET core is a footnote because it has no open source community support. I'll agree that C# is perhaps the best designed language I've ever used, but it seems that Microsoft decided to open it up many years too late to save it's market share. Their best bet is creating native Java library interoperability. Third parties have been offering for years, but if it was baked in MS might just have a chance
- hungerstrike 9y ago> What's holding .Net back is a lack of the vision thing. What gives you the impression that it's being held back? > High-end web tooling is almost exclusively JVM based... Pffffft. You can't just pick a few JVM tools and proclaim that those are the only "high-end" options. Far from it. Have you heard of Mongo? Redis? Azure Event Hub? ScyllaDB? > But even they are looking to move off Windows. Oh how convenient that your anecdotal evidence supports your argument. Well, I also consult for small and medium sized business including many, many Medical companies. None of them want to move off of Windows. Quite the opposite - some of them have Unix systems that they can't get away from fast enough.
- avenoir 9y agoI've been hearing that .NET is dead/dying for probably 8 years now. I work on an enterprise software platform comprised of mostly .NET microservices and some NodeJs sprinkled here and there on the back end. 80% of our .NET code is running in a container on a Linux distro. The other 20% just hasn't been ported to .NET Core or has some shitty dependency which can only run on a Windows environment. I see some of our devs switching to Macs for development already. All of this has occurred in just 2 years. I would say give it some time. The progress has been amazing in my opinion.
- mehrdada 9y agogRPC C# currently comes with its own HTTP2 implementation, and is basically a wrapper over the C code that implements gRPC and HTTP2 stack. It doesn’t rely on .NET’s implementation of HTTP2 at all. And it does run on Linux as well as Windows.
- scarface74 9y agoI was hoping your footnote was going to be a cite from a reputable source when you stated most startups and Enterprises are predominantly Linux, not just your own anecdotal experience. My own experience is that most large enterprises use Windows because that's what their network people are use to and finding Windows network admins and developers are easier.
- bad_user 9y ago> That's a shame, since in many ways it is a better designed framework, with a superior flagship language (C#) compared to the Java platform. Their framework and language designers are truly world-class, probably the best in the world. While I'm happy about the progress and I hope that .NET Core succeeds, I've heard this claim repeatedly and I must say that it doesn't stand up to scrutiny. The biggest problem of .NET's community and Microsoft's is that it fixated on Java the language, missing out on the improvements that happened in Java the runtime, not to mention the ecosystem. Just to give a small example, the "tiered compilation" coming in .NET Core has been in Java since version 1.4, so we're talking about 2002. That was the Java version coming with the Hotspot VM, inspired by Self and Strongtalk. And it has only gotten better since then. Java the language is terrible, we can all agree, however you can swap it with Scala, Kotlin, Clojure, Haskell (Eta), Groovy, JRuby and others, all of which benefit from running on the JVM, with the JVM itself turning out to be a much better host for other languages. Which is a little ironic given .NET's initial marketing. Also another problem is that the community is waiting to be spoon-fed by Microsoft. In Java's ecosystem on the other hand the endorsement of Oracle is almost irrelevant. Outside the OpenJDK JVM itself most interesting projects are not built by Oracle. And even in the JVM area you've got interesting alternatives like Azul's Zing, featuring an awesome "pauseless GC". Hopefully with the opening of .NET we'll see some actual competition to the JVM, but to those of us that have been in JVM's ecosystem for some time it's actually pretty clear why .NET lost thus far.
- JamesBarney 9y agoIt's not like when you switch to Scala you get all the advantages of java without having to deal with a crappy language. You're also giving up a large amount of tooling.
- bad_user 9y agoA lot of the tooling is reusable. Profilers, debuggers, build tools, libraries all work. And IntelliJ IDEA has been doing a good job with its support for multiple languages, having great support for Scala, Kotlin, Groovy and JRuby at least. There's also great support available for Clojure built by a third party. Yes, I think you get most of the advantages of Java. There's a learning curve involved for Java developers of course, but it's very incremental because the underlying platform is the same and this matters.
- Matthias247 9y agoRegarding HTTP/2: I felt the development of this feature went a little bit "strange". For a long time the feature was blocked by missing support for ALPN negotiation on SSL. There was some interest from the outside to work on it, but discussion on it was stuck for a loooong time (1.5 years). As far as I can see now ALPN support has finally been added to .NET core: https://github.com/dotnet/corefx/pull/24389 https://github.com/dotnet/corefx/pull/24389 HTTP/2 itself requires ALPN to talk to browsers, however a large part of the implementation can already been done without it. Out of personal interest I poured quite a ton of work in the beginning of this year into writing a solid HTTP/2 library for .NET, which could have been the base for webservers as well as things like GRPC: https://github.com/Matthias247/http2dotnet https://github.com/Matthias247/http2dotnet It's state should be good enough to enable HTTP/2 now with less than a 2 weeks of work. However unfortunately I never got any feedback around it or felt interest in it, even though I think lots of stakeholders should be aware about it. It seems like the ASP .Net core team is implementing now their own HTTP/2 library, which was far more barebones than mine when I last looked at it (https://github.com/aspnet/KestrelHttpServer/pull/1991 https://github.com/aspnet/KestrelHttpServer/pull/1991). Don't have the time and interest to review the latest state.