7 ms·
Why I Left the .NET Framework (2013)
- deleted 11y ago[deleted]
- ipozgaj 11y agotl;dr version - it's mostly about the portability, shortcomings of Windows as OS, and accompanying software (VS, TFS, IIS, MSSQL etc) being bloated. Zero critics about the .NET framework itself.
- frugalmail 11y agoI think that does a great disservice to the article by not acknowledging the commentary about the availability of quality OSS and the poor quality of the community/culture
- aggieben 11y agoMeh, not a great disservice.
- crusso 11y agoMy takeaway from the article was the last sentence: And that's why I left the .NET Framework because it kept reasserting itself and wanting to be more than it was: an implementation detail.
- jbigelow76 11y agoIt's interesting to see how many of the critiques the author cited in 2013 no longer apply to the .NET ecosystem. To name a few: * Git is now a first class VCS for use with Visual Studio * .NET development no longer tied to Visual Studio thanks to things like VS Code or OmniSharp with Submline * .NET development no longer tied to Windows, dev with a Mac or Linux using .NET core
- asdf1234 11y ago> .NET development no longer tied to Windows, dev with a Mac or Linux using .NET core .NET core hasn't seen an official release and there's still quite a bit of work to be done. Even with that, the overwhelming majority of .NET libraries don't work on OS X or Linux and it's going to take a significant amount of time to port just a small fraction of them. .NET core might turn out to be a great cross platform solution but it's nowhere near that right now.
- jonathanoliver 11y agoOP here. My concerns have been or are being addressed. We're still a ways off from having things solid on Windows and Linux. All things considered, I'm happy with Satya's leadership of Microsoft over the last few years.
- wdmeldon 11y agoI only wonder how far these new attitudes will seep into the general .NET developer culture.
- s73v3r 11y ago.NET is still tied to Visual Studio. Neither of the other two alternatives, nor the Mac or Linux ports, are ready for prime time yet.
- minionslave 11y agoFrom the comments: "Why do people have to "leave" technologies? Why can't they just add new technologies to their arsenals without dramatic quitting blog posts? You don't see musicians who have just learned to play the guitar writing "why I'm leaving the piano" posts. Go is great; Node.js is great; some JVM languages are fine; .NET has a hell of a lot going for it too. Evaluate your options at the start of every project and use the best tool for the job at hand."
- mrspeaker 11y agoDid anyone else feel happy wave of nostalgia when reading this title? I haven't seen a "Why I'm leaving X" post for many years!
- jonathanoliver 11y agoI wrote this article almost 2 years ago.
- khoury 11y agoThat's the more successful way of thinking, if you ask me.
- wymy 11y agoI think it has more to do with fragmentation. While it's great, in theory, to have broad skills in many different languages and technologies, it is difficult to be an expert in any of of them without working with them for a significant amount of time. When I start a new project I'm looking to leverage my expertise in my areas of focus rather than trying to find the perfect technology fit. Without significant knowledge in all options, I may not even be qualified to provide a reasonable evaluation.
- manifestsilence 11y agoThat's great for short term projects, but the musician metaphor breaks down in two ways in my experience: 1. A whole team must use a given stack, so it's more akin to trying to get your whole band to switch to amplified so you don't drown them out with your electric guitar. 2. For continuously supported and developed projects, you're in it for the long haul, and rewrites can become a daunting enough task to actually kill a company, so that first choice of software stack for a little project can start to look pretty significant. Who knows which quick and dirty little web app will end up bloating to a million lines of code and running a company for the next twenty years? I guess the music metaphor for this part is forming a punk band and realizing years later you wanted to play Bach, and trying to get your guitarist to switch to violin, etc. Edit: my fun C# anecdote of the morning is I just got to deal with how new TFS branches can end up quietly running your Main branch code due to cruft in your Windows user folder. Thanks, Microsoft! http://stackoverflow.com/questions/15818364/vs-2012-launching-app-based-on-wrong-path http://stackoverflow.com/questions/15818364/vs-2012-launchin...
- camkego 11y agoAuthor states "Using the Disruptor (a lock-free ring buffer on the JVM), you can easily process 20M+ events per second. On .NET using ordained "best practices" anything more than a dozen transactions per second is considered decent-to-good performance and at that point, you just need bigger/better/more hardware." WTF? This is inane.
- cachemiss 11y agoYeah, he's comparing one of the best optimized ring buffers on the JVM to actual transactions, that's one of the worst comparisons I've ever seen. I've shipped large scale systems on .NET and on the JVM, the issues you run into with .NET are that windows isn't as easy to administer IMO as linux variants, and your ecosystem isn't as strong, that's about it. .NET doesn't have a runtime profiler that will deoptimize / recompile etc., which can cause slowdowns in certain use cases, it does have a better unsafe story, and value types, and reified generics which can make things faster for you.
- jonathanoliver 11y agoOP here. I still really like the Disruptor style. You're right, it's not an apples-to-apples comparison.
- UK-AL 11y agoThe comparison is silly. Disrupter is a completely different way of working compared to the standard java way. If you use standard Java style and compare that .net style then it would be the same.
- droz 11y agoIt's also incredible hyperbole. Makes it difficult to take anything else the author wrote seriously.
- dozzie 11y ago> C# is awesome. I think it's a spectacular language. OCaml, Haskell and Lisp are spectacular. Erlang is spectacular. Tcl and Python are spectacular. C# is an OK-language at best. > I'm not aware of any non-Java JVM languages prior to the CLR [...] Except JVM/Java had JPython, JRuby, and Rhino (JavaScript) earlier. Those are interpreted, sure, but they were running inside JVM and talking to Java code already when .NET was first published. The compilation to JVM bytecode is a minor implementation detail.
- V-2 11y agoWhat are advantages of Python over C#?
- Alupis 11y ago> What are advantages of Python over C#? Well, a major one that comes to mind (and may change as things progress) is application portability. The open CLR project hasn't gotten far enough yet to truly be cross-platform capable. It's also smaller in weight and baggage, some argue faster to prototype/develop-in, community driven (no decade of a single company's inner departments fighting over features and behaviors), it wasn't born out of NIH syndrome, etc... In a lot of ways, it is a lot more attractive than C# will ever be.
- V-2 11y agoPortability is a valid concern - depending on the context - but it's not an innate quality of the programming language, in and of itself. Ease of prototyping is a general advantage of scripting, dynamically typed languages, so this is apples and oranges really. Or like insisting that Yamaha is superior to Mercedes, of all car manufacturers, because motorbike is more useful in heavy traffic :) Statically typed languages bring other advantages to the table, they shine is bigger projects. As for NIH syndrome, once again this is "ancestral sin" at best, not a downside of the language as such. Still, it wasn't exactly that way. Microsoft didn't try to tout a brand new language at first, they attempted to improve on Java with J++, but they got sued by Sun and this pushed MS to announce C#. This being said, C# wasn't a corporate rebranding, it's offered substantial improvements over Java, and to this day Java is either playing catch-up (eg. Streams vs. LINQ, abysmal DateTime API only replaced with something more reasonable in java 8), or just remains inferior (type erasure vs. reified generics, checked exceptions etc.) I don't really code in Python, but at first glance it is missing some goodness you can get in C#, for instance the support for functional programming (or elements thereof) - I'm thinking about lambda support limited to single expressions.
- aggieben 11y agoI think this post is interesting, but mostly at this point useful as a frame of reference for all the changes that have happened in the .NET ecosystem in 2 years. For example, the server produced by the ASP.NET team (Kestrel) has now been benchmarked at over 300K req/s, and it's using libuv under the hood as an event-based IO engine. That's also not to mention that Mono has benefited tremendously from the new open-source nature of the entire .NET framework, and is a far more viable portability story for .NET than it ever has been (although it still has its pain points). Soon enough, Microsoft will have its own port of CoreCLR for Linux. Also, relatedly, I think this post is also mostly about the characteristics of the .NET community and its culture, and less about technology. The aforementioned recent changes are indicative of substantial growth and diversification of that community, and I think likely heralds a lot more good changes to come.
- pbz 11y ago> Soon enough, Microsoft will have its own port of CoreCLR for Linux. CoreCRL alerady runs on Linux -- it's all very much beta though.
- V-2 11y agoSome of this criticism was outdated already, or has gone out of date since. WebForms (with their underlying concept of abstracting away how web really works) were already in decline two years ago, replaced by MVC. As a former C# developer, turned Android developer, of course I have to admit there is some walled garden mentality among .NET devs, but I think they get stigmatized for that way more than average. If a Rubyist never sticks nose outside their beloved technology stack, noone makes such a big deal out of it. Also it's nothing in compare to vitriolic anti-M$ hater mentality, often directed at developers themselves. Or bizarre anti .NET-bias, case in point: http://blog.expensify.com/2011/03/25/ceo-friday-why-we-dont-hire-net-programmers/ http://blog.expensify.com/2011/03/25/ceo-friday-why-we-dont-... (I'm sure Jon Skeet was devastated). And what's changed since 2013? Quite a lot: Roslyn... open-sourcing .NET...
- aggieben 11y ago> they get stigmatized for that way more than average. If a Rubyist never sticks nose outside their beloved technology stack, noone makes such a big deal out of it. Yes, exactly right. > to vitriolic anti-M$ hater mentality Right on - this isn't what OP was demonstrating, I think, but general reactions to Microsoft technologies are pretty bizarre. Use it or don't, but I don't get all the hate.
- V-2 11y agoTo be clear, I certainly wouldn't put OP in hater category, I disagree with some of his statements but his article is balanced and substantive. Unfortunately this is not the standard
- digler999 11y agoThe hate comes from the iron-fist mentality MS has and had toward its users, and their lack of reliability and lack of responsibility for their part in delivering an unreliable product. Why don't you "get" that ?
- aggieben 11y agoBecause I don't agree? What I don't "get" is why people like you assume that your opinion is completely undebateable, or that it's any more than what it is: an opinion.
- platz 11y agoInteresting that he didn't mention the core idea of this piece that got a fair amount of attention: http://www.aaronstannard.com/the-profound-weakness-of-the-net-oss-ecosystem/ http://www.aaronstannard.com/the-profound-weakness-of-the-ne... Namely, hat .NET developers don't really solve any hard problems
- UK-AL 11y agoIronically I think there a lot of distributed platforms for .net. NServiceBus, MassTransit. Akka.net, Orleans, etc
- edgyswingset 11y agoThe author who write that blog post is actually one of the co-founders of Akka.NET, which was created before Orleans was out.
- jonathanoliver 11y agoOP here. I also worked on NServiceBus extensively as well as a lot of event sourcing and CQRS stuff.
- maxxxxx 11y agoI think there is a point to that. But I am almost tempted to add github users to that list too. Recently I see a lot of young guys who seem to have forgotten that you can write algorithms yourself and instead they will spend hours and days looking for something on github.
- intrasight 11y agoThe best language is the one that can get your job done and for which you are able to hire competent developers.
- chris_wot 11y agoPHP?
- gregmac 11y agoCompetent developers can be good in any language. Bad developers are bad regardless of language. You don't hear people say things like "Oh, that guy was an amazing <language> developer, and could build awesome, solid easy-to-read and high-performance code, but his <other_language> code is so bad nothing short of a complete rewrite can help".
- intrasight 11y agoYes, as much as it pains me to admit it, even PHP
- Const-me 11y ago“traditional Windows devs are typically only good at Windows” — why? I developed for Windows, Nintendo, iOS, OSX… “NIX guys on the other hand are typically familiar with multiple operating systems” Nope, they aren’t familiar with Windows. Just an example, I only see *nix developers started using I/O completion ports (which is the best I/O strategy for a Windows network servers since Windows NT 3.51) only couple of years ago, in node.js and libuv. Before that, most Windows ports of cross-platform servers failed miserably. “The typical, multi-threaded paradigms in C, Java, and C#” — for C#, those typical multi-threaded paradigm has changed in 2011-2012 with the release of TPL, Rx, async-await.
- Mikeb85 11y ago> Before that, most Windows ports of cross-platform servers failed miserably. No one cares about a Windows port of a cross-platform server because most will just deploy to a Linux or BSD server instance anyway... People only really care about Windows GUI apps...
- Const-me 11y ago“No one cares about a Windows port of a cross-platform server” — then who ported Node.js, Apache, MySQL, PostgreSQL, and the rest of them?
- andyana 11y agoI have to agree with the author: the Window's guy are usually the ones focused on Window's only solutions. Like, for example, a Windows admin having not heard of nmap. This is common.
- sadkingbilly 11y agoI've been on two interviews recently, and both saw experience in .NET as a negative. I found myself having to down-play experience in .NET in both cases, in order to guide the discussion toward more applicable skills for the role. Even when you may be a polyglot programmer, interviewers tend to label you as .NET or Microsoft. Which, has apparently become a bad thing. Unless you're interviewing with a Fortune-100 company, in which case, .NET is still somewhat popular.
- Cakez0r 11y agoIt would probably be pretty crappy to work under technical leadership with that kind of mind set anyway.
- pm90 11y agoI would think twice about joining an organization that thinks negatively of your former experience in a different stack. Sure, they may not be relevant to the job at hand, but good programmers will write good code in whatever stack they have to work in.
- bitwize 11y agoNon-Java JVM languages have been part of the Java ecosystem sincw the beginning, from Pizza and Kawa on forward. Maybe .NET made more developers comfortable with that, but I think it had more to do with that the JVM enjoys HUGE cross-platform library support, solving the bootstrapping problem for getting a new language out there and used.
- DanielBMarkham 11y agoI find I agree with the author on the details of his argument yet have reached a different conclusion. Dude. It's not .NET -- it's the Windows/SQL Server/VS/etc toolchain. Dump the toolchain and work on linux in Mono. Yes, it is a second-class citizen. But even then, it's a hell of a bag of goodies for free. I got really tired of the MS ecosystem as well. And I feel for those still stuck in it. But why would I want to ditch the CLR, a big honking beast of code that is being tested billions of times daily? Why give up all the libraries created by devs all over the world? I went with F# and mono and am really happy with it. If I need database support, I pick up something off the shelf. Simply because I use .NET doesn't make me a prisoner of .NET-think.
- jonathanoliver 11y agoOP here. You're correct that most of the problems were related to the toolchain and Windows. I did a lot of work using Mono for over a year. After submitting dozens and dozens of bug reports and pull requests to the project, I finally had to get some work done.
- potato 11y agoOutdated. Microsoft has clearly embraced open source, and is facilitating cross-platform .NET development (OmniSharp, ASP.NET 5). Async is a thing. SQL Server is not a con, switch to something else. Mono is reason to leave mono, not .NET.
- jonathanoliver 11y agoOP here. The post was written 2 years ago before async/await were a thing and .NET only worked on Windows.
- WorldWideWayne 11y ago"In fact, I don't even use a mouse anymore--my hands are always on the keyboard or trackpad and I can gesture to my computer and actually have it respond--unlike Windows." I use a keyboard all day with Windows. I can do every single thing that I need to do with just the keyboard, no problem. I also use Gnome 3 and OS X and I honestly don't think keyboard support is as good in either of those. So I am sure that I don't know what this gentleman is talking about.
- cptskippy 11y agoAfter reading about halfway through this I scrolled to the bottom to look for the punch line but there was none. This article comes off as the frustrations of a developer who was forced to use Windows and didn't like it (Boo hoo). A lot of the "issues" he had left me scratching my head and a lot of the observations he's made seem to be very anecdotal. > As covered previously, Windows is not a good player when it comes to network-based server software. What is the definition of "network--based server software"? His "as covered previously" article doesn't even contain the word network in it, so it's really unclear what he's complaining about to begin with. > One other really big problem I see with Windows is that traditional Windows devs are typically only good at Windows and get lost very quickly outside of their comfort zones, which is not true for Linux devs. That's an anecdotal observation at best. In my opinion most developers have comfort zones and get lost very quickly outside of them. The difference between a good developer and a great developer is that the great developer doesn't back down from a challenge outside their comfort zone and are willing to learn new things in-depth. I know plenty of good developers who are only good in their language of choice and have no interest in moving outside of that tool-chain. I've worked with plenty of PHP and Ruby developers who deployed to Linux and they didn't know their ass from a hole in the wall regardless of their OS of choice. I've also worked with a few Linux C/C++ developers on some projects and they had a very thin understanding of C#, often coding things from scratch that were built into the language. Not to mention their love of nested loops. I've also worked with some amazing OSX developers who had the same level of comfort on Linux that I do and were about as comfortable in Windows as I was on OSX (i.e. better than average). But none of that matters because it's all anecdotal. > I had a Core i7 3770K 3.5GHZ desktop I built with 16 GB of RAM and a Vertex 4 512 GB SSD. It literally maxed out the Windows Experience Index and Windows + VS was still slow. I HAVE a Core i7 Q820 1.73Ghz laptop issued by work with 20 GB of RAM and a Seagate Momentus 320GB HDD with McAfee software based full disk encryption. It literally has a Windows Experience Index of 5.9 and Windows + VS IS perfectly fine. I'm really not sure what he's done to his system, maybe he forgot to mention that he was running Windows 7 in a VM on Linux and everything down to the disk was virtualized and there was no hardware acceleration. I see no other reason why his performance would be intolerable. > Now I dev on a MacBook Pro which has less CPU horsepower than my beefy desktop and things are noticebly faster and the UX is infinitely better after a small learning curve. Seriously? Linux is better than Windows because you use a MacBook Pro and OSX's UI is better than Windows? Is that's what you're arguing? It's at this point that I stopped reading and scrolled to the bottom.
- droz 11y agoI began writing C# in 2004. I've been writing it since for business and pleasure. Since Microsoft began adopting a more open source approach, it's been, well, amusing to see the open source culture collide with has been historically a closed system. "Why isn't there a free, open package that solves hard problem X, it's 2015 after all. How preposterous!" The naivety displayed in these kinds of statements is amusing. There are probably many solutions to hard problem X locked away in proprietary "Microsoft Shop" code bases around the world. It's incredibly daft to assume otherwise. Does this approach lead to a lot of duplicated effort- yes; are there a lot of hacked together half working solutions out there- yes; has the .NET community been ok with this- yes. As is the culture of .NET. It's the fine art of not giving a shit because you're going to get paid anyways. "Oh these poor .NET bastards, they're just sooo clueless of the world around them; they only know Windows." I'm sure this could be said of just about anyone. All tech stacks have their stars and fry cooks. As with many things, it's a matter of how you want to dedicate your time. Could I spend my time focused on file system design, memory issues, and network architectures. Absolutely! It's great that people enjoy this stuff; I personally don't. It's boring to me same reason I don't enjoy futzing around with Linux. I don't care about how it works; just that it does work. When I write for the .NET/C# stack, my focus is on the business problem. How do I impact the end-user (ie Shannon over in accounting, or little Timmy dipshit in Iowa) in a positive way. "VS also has this really nasty habit of creating "csproj" and "sln" files. I hate those things." this is like bitching about make files. It's beyond silly. Could it be improved- probably, does it need to be- no. I think make files are a horrible way to do things, do I bitch about it- no. I understand that that is the preferred approach of the environment. Learn what I need to do to make it work and get on with my day. And really, these types of complaints are just childish. You're a professional. Deal with it. As far as IIS is concerned, we can have a ceremonial burning of the source code one day. That product is beyond useless. The selling point of C#/.NET isn't it's community- it's its productivity. A company can hire a small team of developers and they can crank out a bunch of code in short order to solve some specific problem. The code will be written the ".NET way" not because that's what's best for performance, but because that's what's best for development. Same thing happens in other technology stacks. Code is written to follow a well followed pattern by its community so that new hires and other developers can quickly suss out what's going on without having to stop and think. It's the same song and dance of using third-party libraries. Bit like a royale with cheese instead of a big-mac. Dress it up different, but the same principles are at play. Fundamentally, there's going to be some cultural exchange between the traditional .NET crowd and the open source crowd. Both parties stand to learn a lot from one another, and have lots of opportunities to discover overlap. Rather than throwing in the towel and saying .NET is bullshit and used by dullards who solve inconsequential problems is short sighted. Find a place for .NET in your stack, look for opportunities to mix it in with your existing open source technologies. If you can't find a spot for it, then move on to whatever works for you. It's not rocket science.