[HN Gopher] .NET Myths Dispelled
___________________________________________________________________
.NET Myths Dispelled
Author : geekydev
Score : 77 points
Date : 2022-03-12 19:30 UTC (3 hours ago)
(HTM) web link (blog.devgenius.io)
(TXT) w3m dump (blog.devgenius.io)
| skeeter2020 wrote:
| Most of these are strawman setups, except for #6 (Boomer code)
| which is not a myth but a truth. I've spent a lot of years in the
| MS ecosystem and despite their attempt to entice many younger
| developers to .NET (and making the world more complex as a
| result) it's grey-haired devs like myself that have stayed loyal.
| wrs wrote:
| I agree .NET is fantastic technology. I think a lot of the
| hesitancy in adopting it is from the historical churn described
| in the article. It's normal for languages/runtimes to have churn
| in their features, performance, and library. .NET has that in
| spades, plus continual churn in its _very reason for existence_.
| The corporate and cultural forces behind .NET may be aligned with
| your situation right now, but five years from now, who knows?
| There's not yet historical evidence that it will remain stable.
| bennysomething wrote:
| The switch from full fat .nets support life cycle to the
| current dot net cores totally confusing life cycle is currently
| pissing me off and the higher ups in my firm. Which should be
| worry for ms. I want stability , not breaking changes.
| thrower123 wrote:
| Yes, this. We will see how well support for the supposedly
| LTS DotNet 6 actually is long term...
|
| I'm not a great fan of how the whole dotnet open source
| ecosystem has sped up to monthly and biweekly releases.
| Official Microsoft packages are some of the worst.
| spaetzleesser wrote:
| That's the problem. They don't have a steady design approach.
| They do something here, something there, then abandon the
| first, then go back to it. Desktop is a complete mess. Core
| looks quite good but who knows what they will do in a few
| years?
| EMM_386 wrote:
| > (Note: there's some debate on whether it's 20 or 21 years, but
| Microsoft's Professional Developers Conference in October, 2001
| definitely already referenced .NET in production systems)
|
| I can clear this one up.
|
| I was lead on a .Net production system launched in August, 2001.
| It's 21 years.
| Yoric wrote:
| Out of curiosity, did you also work on EMM386, as your username
| implies?
| formerly_proven wrote:
| In terms of language C# always seemed to me like it was a
| language that expects you to use a (the) IDE, much like Delphi.
| Which is really unfortunate in my opinion, because I usually read
| code outside an IDE and also spend more time strictly reading
| code than writing.
| DoctorOW wrote:
| > Myth 2: It's Slower than Node/Python/Go/Rust
|
| This feels disingenuous. The author uses this heading for proof
| that ASP.net performs faster than similar frameworks in
| Node/Python. I could be convinced C# is faster than Go, but
| absolutely not for Rust. The simplicity modern C# provides (look
| at those code samples) comes at the cost of runtime performance
| optimizations.
| pharmakom wrote:
| Benchmarks would be required to prove it, but I could actually
| see .NET outperforming Rust in a few scenarios. First, C# can
| be written in a way that stack allocates almost everything
| (much like Rust) and second, the runtime information and JIT
| compilation may allow it to make better optimisations.
| DoctorOW wrote:
| Only if you're including compile time in the benchmarks.
| Binary to binary, JIT is a great example of Rust having a
| compile-time optimization that .NET implements at runtime.
| Yoric wrote:
| Well, some optimizations can only be implemented at
| runtime, so comparing Rust and C# without knowing the
| actual scenario doesn't seem to make much sense.
| woodruffw wrote:
| Optimizing compilers and JITs are difficult to compare
| directly: JITs have optimization pressures (e.g., selecting
| instructions/register slots as rapidly as possible) that
| AOT compilers don't (and vice versa), and (similarly) tend
| to have simpler IRs.
|
| In general, even the best JIT is going to underperform an
| AOT optimizing compiler for those reasons. Microbenchmarks
| (and compiler quality) will always vary, but the macro
| picture is difficult to change.
| Yoric wrote:
| I'm a big Rust fan but I fully expect that C# can beat Rust
| in _some_ benchmarks and actually in _some_ useful scenarios.
|
| However, claiming outright that .Net outperforms Rust feels
| like an apple-to-petticoat comparison.
| Nuzzerino wrote:
| > the runtime information and JIT compilation may allow it to
| make better optimisations
|
| That's a very, very slim "may", at least before .NET 6 (I
| don't keep up with .NET anymore.)
|
| https://web.archive.org/web/20100627105951/http://blogs.msdn.
| ..
| pcwalton wrote:
| > the runtime information and JIT compilation may allow it to
| make better optimisations.
|
| In practice this mostly means speculative devirtualization.
| This is absolutely true for C++, which tends to use virtual
| methods a lot, but Rust doesn't use virtual methods much.
| Moreover, profile-guided optimization (PGO), which Rust
| supports [1], allows the Rust compiler to take advantage of
| these speculative sorts of optimizations just as .NET does.
|
| Granted, PGO is annoying to set up compared to the .NET VM,
| which "just works". PGO'd Rust is deployed in production,
| though.
|
| [1]: https://doc.rust-lang.org/rustc/profile-guided-
| optimization....
| Rochus wrote:
| > _but absolutely not for Rust_
|
| Right. Here are measurement results based on the Are-we-fast-
| yet benchmark suite: https://github.com/rochus-
| keller/Oberon/blob/master/testcase.... The version of the
| benchmark translated to C and compiled with GCC or CLANG -O2
| runs about twice as fast as the CLI/.NET version. Rust's
| performance is close to C's. And before you say that Mono is
| slower than the CoreCLR have a look at these measurements:
| https://www.quora.com/Is-the-Mono-CLR-really-slower-than-
| Cor....
| mhh__ wrote:
| JITs precisely _can_ provide _runtime_ performance
| optimizations.
|
| What makes C#/Rust special? If you can't name anything in rust
| that would actually effect the dataflow analysis then you may
| need to reconsider.
| FridgeSeal wrote:
| Rust having one of the most sophisticated optimising compiler
| backends? And a whole suite of language design choices that
| enable fast, correct code?
| mhh__ wrote:
| The parent comment is clearly talking about language design
| rather than the backend.
|
| I say this because I often see Rust people say isn't a
| great that rust can do xyz and then I look into it and it's
| actually just basic dataflow analysis that any compiler
| does or just LLVM being clever.
| ourmandave wrote:
| The actual title is: _6 .NET Myths Dispelled -- Celebrating 21
| Years of .NET_
|
| And they forgot 2...
|
| Myth 7: The .NET branding dept sucks.
|
| Myth 8: The .NET desktop strategy has sucked since Build 2011.
|
| Oh wait, both of those are still true.
| alexklark wrote:
| Author should submit it to ms propaganda/evangelist department to
| get a MVP medal for best bs of the month. Of course MS bs
| regarding .NOT is nothing new. It was windows only for 21 years
| and marketed as portable/high speed/modern/backward compartible
| all that time. All that time it was a cherry picked lie. For the
| last 6 years they not even mange to offer GUI library. Try to use
| Winforms. You can't? Too bad, linux is just for servers anyway,
| right? Go get Xamarin trash and suffer. "We are on journey, busy
| with our foundations/pr so fk off." The right answer was not
| changed for 10 years: - never use ms tech for web, or you be
| vendor locked and ripped off - ms technologies in core not
| changed since 00s, it is same old st in a layers of chocolate. As
| soon as you get inside, you puke. - never trust ms or you be
| vendor locked and end up with inferior legacy technologies,
| without reach to support and with huge tech debt and eventually
| need to just throw away everything you build - remember, facebook
| and google not using ms, your grandma do
| achtung82 wrote:
| If the language and framework has been changing isnt it a good
| idea to inform about these things that used to be true but no
| longer is.
|
| "never use ms tech for web, or you be vendor locked and ripped
| off"
|
| How exactly do you mean this, .Net can be run on most
| platforms. Or could it be that you didnt read the article since
| you assumed it was propaganda?
| omginternets wrote:
| The charitable interpretation of the parent post is that the
| .NET team has lost all credibility, and that one should not
| trust them to make developer-friendly decisions.
|
| I don't know whether or not that statement is true, but I
| think this is the point worth discussing.
| tester756 wrote:
| >but I think this is the point worth discussing.
|
| then somebody has to say some some specific stuff instead
| of "ms will lock you"
| FridgeSeal wrote:
| > .NET isn't open source friendly
|
| The language runtime might technically be open source, but it's
| got a huge number of closed-source packages and the ecosystem
| appears to be only begrudgingly open source.
|
| > It's slower than Node/Python/Go/Rust
|
| One of 2 of these things, aren't like the others. I'd believe
| modern .net can outpace Python, but matching or outpacing Rust is
| something I'd have a hard time believing, especially in the "vast
| majority of code" sense-I'm aware that .net can be written to
| stack allocate everything. I'm also aware that basically no .net
| code I've ever seen in business world has ever done that
| (precluding games here, because I've not worked with them).
|
| > It's for boomer enterprise development
|
| Yes. Uncharitable presentation and framing, but yes. Every single
| place I've worked at that has used .Net has had the same attitude
| and approach to solving problems and writing code. Use Kafka for
| our events like every other company in industry? Nah, use some
| bizarre MS thing that nobody outside of .Net has heard of or can
| use. Use websockees or SSE? Nah, use some bizarre .Net version
| instead. Use Postgres because it's more than good enough and
| other teams might need to use the database? Nah MSSQL, and all
| the tables are named and optimised according to EntityFramework
| and if you have to suffer through ODBC issues that's a you
| problem!
|
| Never mind the obtuse naming and the dogged insistence on
| dependency injection at every possible turn.
|
| Am I not a fan of .Net? Correct. Is it because every time I've
| had to touch it, it's a painful and frustrating experience.
| radicalbyte wrote:
| You know that Rx in .Net kind of inspired all of the popular
| reactive libraries/frameworks, right?
|
| Other than that: if you go to a .Net shop who want Microsoft
| Certified Developers and you expect anything than low quality-
| stay-on-the-Enterprise-support-contract-rails then that's the
| problem.
|
| > Nah MSSQL, and all the tables are named and optimised
| according to EntityFramework and if you have to suffer through
| ODBC issues that's a you problem!
|
| That's not in any way true - it's an ORM and it can handle any
| database naming scheme you happen to have. I still wouldn't use
| it - ORMs in general are a bad idea outside of a couple of use-
| cases (i.e. CRUD-heavy systems).
| ramesh31 wrote:
| Unfortunately Nuget package management is abysmal, and a
| development environment lives and dies by that nowadays. There's
| also the legacy reliance on XML. It's easy to forget that the
| reason Node took off exponentially when it did is not really
| because it was that great itself, but because NPM (and its' small
| package philosophy) was a bit of a revolution in package
| management that led to network effects of adoption.
| cglan wrote:
| Gonna be honest, .NET seems to have a weird cult following on
| here and Reddit but I find the naming to be absolutely atrocious
| and I hate developing with it. Everything is .Net including .net
| classic but not everything is compatible making documentation a
| huge pain to find. It's also ridiculously over complicated and
| enterprisy with a lot of heavy weight boilerplate that reminds me
| of Java. It also copies a lot of the mistakes of the spring
| framework where you'll have side effects or code paths that occur
| that aren't really able to be found with a debugger. The language
| itself is fine but the framework around it is just repeating all
| the same mistakes of everything else
|
| One of the reasons I love go is that everything seems to be
| explicit. Notice something occurring? Well chances are you can
| set a breakpoint and trace what's happening
| procinct wrote:
| I definitely don't find modern .NET (ie .NET Core) to be overly
| enterprisy or boilerplated at all. Certainly nothing like .NET
| framework or Java.
| bluefirebrand wrote:
| Gotta admit GP has a point about naming though.
|
| Search for info on .NET and you will find stuff on ASP.NET,
| .NET Framework, .NET Core at the very least. Probably more.
|
| You have to really know what you are looking for and that's
| hard sometimes because everything is just .NET
| achtung82 wrote:
| The thing i see a lot of people bringing up as the large
| problem with .Net is naming and branding. I could agree with
| those sentiments but dont really how those are serious
| criticisms. Thats like saying i hate Java cause i prefer tea.
|
| Anyway if you hate developing in .Net dont do it but I
| personally find it a lot more enjoyable than other languages
| ive worked with.
| wvenable wrote:
| I can't agree with this assessment. I'm curious as to what
| environment you are comparing it to?
| nick_ wrote:
| A list of the top ten weird cult followings on HN and Reddit
| would not include .NET
| tester756 wrote:
| >It's also ridiculously over complicated and enterprisy
|
| What does it mean? dependency injection?
| radicalbyte wrote:
| There are some older libraries which are horrible enterprise-
| ware: WCF (Windows Communication Foundation, think SOAP) and
| older Entity Frameworks in particular.
|
| From the tone of the OP I would assume that things such as
| encouraging good engineering practises such as good interface
| design and using appropriately sized units of code are also
| "problems" with .Net. You hear that a lot from inexperienced
| developers.
|
| The thing is - the modern framework is far nicer and has
| largely avoided the problem. Even to the point that I prefer
| occasionally having to deal with some of the ugly enterprise
| libraries to the constant hunting down of broken
| dependencies, vague runtime bugs or massive framework churn
| you see in the Python/Javascript world. Or having an overly
| verbose and ugly language like Go or Java.
| spaetzleesser wrote:
| I have worked with .NET for a long time and recently did some
| work with Java, node and python. .NET has a lot going for it but
| i feel MS is making things more complicated than they have to be.
| When I need to achieve something a little off the beaten path in
| the non .NET technologies this is often pretty straightforward to
| achieve whereas in .NET I have to find some obscure interface and
| overrides to implement and then deal with weird side effects. I
| think .NET has become too big for its own good to be maintained
| by one party. The documentation also has a lot of volume but
| almost no structure. When .NET started out it was pretty coherent
| but in the last few years it felt very disjointed without a
| central design philosophy. Don't even mention desktop development
| which is a complete mess since Windows 8.
|
| Maybe I am too negative on .NET but personally find the open
| source alternatives easier to work with and more fun.
| R0b0t1 wrote:
| The .NET frameworks (blazor, etc) are too complicated. Peak
| FizzBuzzEnterpriseEdition there.
|
| The interop layer than you have to go through to do a lot of
| stuff is actually quite tame. It just needs more time on Linux.
| userbinator wrote:
| That's the normal Java culture, which is not surprising given
| that MS created .NET as a competitor to Java.
| tester756 wrote:
| >The interop layer than you have to go through to do a lot of
| stuff is actually quite tame. It just needs more time on
| Linux.
|
| What do you mean?
|
| I have software on prod on Linux for years and the only
| problem I had was lack of some fonts installed that made some
| problem when it comes to pdf generation
| R0b0t1 wrote:
| Binding to C/C++ libraries or other system libraries is not
| something that's well documented, officially. On Windows
| there's a lot of 3rd party effort that is easily
| searchable. But for a long time the interop layer was not
| (and still may not be?) working on Linux.
|
| The first iterations of .NET were _just_ for webapps. You
| could only work with and call .NET code, the only functions
| provided were basic IO and network.
| johndfsgdgdfg wrote:
| .NET is an amazing tech built by MS. I wish more people would use
| .NET ecosystem instead of Go, which is pushed by Google so Google
| can make more money.
| bayindirh wrote:
| > .NET is an amazing tech built by MS. I wish more people would
| use .NET ecosystem instead of Go...
|
| After years of witnessing or being on the receiving end of the
| things Microsoft did, I'd rather not develop with .NET. Same
| goes for Google's Go. Rather I'd happily use C++ / Python /
| Rust / Java / Perl, and never look back.
|
| I think it's bitter to be associated with acts done to
| undermine and stifle competition for whatever it takes rather
| than being a tech company known with good products. Yes, I pay
| for an Office license and like their hardware, but I can't
| forget what they've done over the years.
| phillipcarter wrote:
| .NET exists because it is used by Microsoft to make Microsoft
| more money. That's literally what a platform play is. What is
| bad about Google doing this with Go?
| hughrr wrote:
| I have used both from day one. I prefer Go. 900% less faffery
| with it.
| steve_taylor wrote:
| How much does Google charge for Go?
| DoctorOW wrote:
| I disagree with the point that Go is a big money maker for
| Google. I assume the implication is that Go helps make sales
| for Google Cloud the same way .Net acceptance leads to Azure
| sales. That said, in my experience this isn't true. Some of
| the biggest adopters of Go (Uber, Netflix, Twitch) are AWS
| based. The real profitable part of Go for Google is the
| scalability and efficiency of the language for Google
| projects but that's not a very effective argument to switch
| away from Go.
| qbasic_forever wrote:
| How is Google making money off of golang?
|
| Are they selling tools for it? Not that I see.
|
| Are they selling the compiler? Nope (they don't even 'own' it,
| it's open source)
|
| You really need to explain your thought process here because it
| doesn't sound based in reality.
| renox wrote:
| So this article claims that .Net is portable, what about GUIs?
|
| I doubt very much that this is the case..
| lucidone wrote:
| I used .NET Core for a backend API relatively recently (3.1) with
| no background in .NET prior (mostly javascript/typescript, php,
| and ruby). I found it incredibly productive and to be an
| enjoyable developer experience. Entity framework is one of the
| best ORMs I've ever worked with. Solutions and projects took some
| getting used to but I like it in retrospect. I now use IntelliJ
| products as a consequence of having used Rider for that project
| (developing on a mac) and enjoying the experience. C# as a
| language is now one of my favourites. I find it hard to convince
| colleagues and peers to give it a chance (mostly ruby and
| javascript devs) which is a shame.
| manigandham wrote:
| > _" incredibly productive"_
|
| That's the best summary of the .NET stack, unfortunately it
| requires first-hand experience to figure it out.
| oconnor663 wrote:
| > Myth 2: It's Slower than Node/Python/Go/Rust
|
| I guess apples-to-apples benchmarks are so hard to agree on that
| _any_ statement of the form "A is slower than B" is always to
| some degree a myth. If that's the author's position, fair enough.
| But if we actually want to make comparisons, "C# is faster than
| Rust" is a bold claim.
| Yoric wrote:
| ...especially when in two out of the author's three screen
| captures, C# is actually shown as slower than Rust.
|
| I didn't spent time to investigate further because I feel that
| this headline is not really useful in the first place.
| phillipcarter wrote:
| The reason why it's a myth worth dispelling now is that The
| (legacy) .NET Framework, which used to be ".NET" back in the
| day, actually was hilariously slow for any kind of web or
| networking work. It had decent CPU crunching power, but also
| only on Windows machines.
|
| Comparisons of benchmarks with C# vs. Rust or whatever are
| unproductive and it's a shame that the article focuses on that.
| The reality is that you can write C# or F# code today, focus on
| solving your problem instead of performance, and have it handle
| a production workload admirably well. That used to not be true
| circa ~2010. Thankfully it is true now :)
| bastardoperator wrote:
| This is my experience with dotnet. Considerable amount of
| legacy code coupled with different web frameworks along the
| way. While the app was slow, I found the amount of time it
| took to make changes to be the unbearable part, mostly a
| whack a mole situation. Maybe I worked with some bad
| developers, but they all acted as if dotnet was the best
| thing ever with constant mentions of dependency injection and
| blaming the GAC for problems they clearly created..
| hughrr wrote:
| I disagree. It was pretty good even back in 2005. There were
| a couple of very large high traffic sites I ran on it back
| then.
|
| I wouldn't use it now because the big cost is always humans
| in a project and anything .Net turns into a damage amplifier
| because of the amount of fettling and dealing with churn you
| have to do to get anything done. Even with .net 6.
| userbinator wrote:
| That reminds me of all the "Java is not slow" articles that
| came out back when Java was more popular.
|
| If it really wasn't slow, why would they have to defend it? We
| don't see "C is not slow" articles.
| stakkur wrote:
| The author makes a few good points (mostly about performance),
| but the 'myths' about open source friendly, enterprise
| development, and cost are disingenuous at best, and just plain
| wrong at worst.
|
| I work in a large corporate environment, and .NET _is expensive_.
| Nobody just 'uses the Community Edition', because there are pre-
| established licensing arrangements and costs. I've seen the
| costs.
|
| .NET, whether it's good or not, is slowly going the way of the
| dodo. What keeps it around is the corporate lock-in they've
| established for the Microsoft stack, and that's a hard thing to
| crack.
___________________________________________________________________
(page generated 2022-03-12 23:00 UTC)