I may suggest .Net for new WebAPI development (minimalist or otherwise), typically with a deployment target of containers and or Linux. It is a strong web back-end language in a similar way to Java but with Linq support, async/await, and a better primary programming language (C#). It has strong integrations into corporate software and all popular DBMS. But, frankly, Linq is the magic that makes .Net special.
Otherwise, for new development, I'd pick something else for creating user interfaces. Like Electron on the desktop and a popular TypeScript based JavaScript framework De jure on the web (utilizing WebAPI in .Net behind the scenes).
That's why I'm for isolating the front end from back end frameworks via something agnostic like WebAPI.
Maybe I use the term hybrid wrong, I am talking about the fat client hosting blazor/web view one. Basically electron shell just without js
My wife has worked QA for a number of .NET teams and it just seems like something I should at least keep my thumb on, but I've had nothing but frustration with it so far, even just trying to figure out what template to start with.
There's a pretty good starter tutorial for the Web API one here: https://learn.microsoft.com/en-us/aspnet/core/tutorials/firs...
Or here for the Web App MVC one: https://learn.microsoft.com/en-us/aspnet/core/tutorials/firs...
There's always more than a comment can talk about, but that's the gist. One good thing is that Visual Studio should be able to help you with a lot of stuff. It's pretty good at keeping you on a good path in the code and pointing out how to fix things.
- New stuffs integrate nicely with existing features.
- C# and F# gets yearly updates.
- Somehow they manage to get the platform faster every year.
- Microsoft Orleans.
The tooling is all CLI based anyway so do what feels best. :)
Spring boot vs .NET is pretty similar, they both offer DI, Filters, Middlewares, etc. The ways I really proved to switch (given my development team is usually freshers) is to showcase the power of the Identity framework, LINQ (especially with EF Core and the ability to still use Raw Queries), and just overall being easier than Java (LINQ methods, extensions, syntax sugar).
Another big one is how damn easy it is to update and the performance posts MS does with the improvements. So you literally change one line in simple web apps and get performance boosts. Java doesn't really have that PR and the language (imo) is very verbose and painful to use (like their stream API).
All in all, we are building our rewrite in .NET (and Angular 17) and my team and I couldn't be happier.
Besides the controllers, models, and other things that might be separated from the views, I can mix my html and C# right there in the view - this is the biggest benefit IMO. In combination I use the Entity framework to interact with the DB, which adds to the simplicity.
The costs to run the internal application for several users is going to be around $6 a month for the Azure database. Hosting the web app is also on Azure, and it's free with the basic MSFT domain, which isn't a big deal to clients who use the software internally. This specific client will be saving over $200 a month once I release the app to them.
I can't tell you all the small details that the cool kids might be able to tell you, but I can produce reliable apps in lightening time and make my clients happy, which is ultimately my #1 goal with freelancing.
You simply don't have to spend too much time researching what to do, just follow the docs and get started writing code and delivering features.
If you stray from the full integration of MS products, you start to lose some of the value proposition.
It's crucial for other major players on the market to participate in .NET if we want to ensure its longevity.
The more time I spend with AWS the less I like it. Simple issues are left unfixed, implementations are half baked, tooling incomplete.
e.g:
Their configuration extensions package still doesn't support loading a single SSM parameter, despite someone going to the effort of submitting a PR nearly a year ago.
There's zero support for YAML cloudformation templates in their VS extension.
There's no package that allows you to send OpenTelemetry data directly to XRay, they expect you to run an entirely separate container.
The whole platform feels like a jumble of half baked, and poorly exposed services that end up being outright painful to work with.
I think you can always learn something from trying totally different tech, so i'm game to try it for a personal project, but want to hear what people love about it so I can dig in the right direction.
What are you comparing C# and .NET to?
If you prefer loosely typed languages such as Perl, Python, JavaScript then you will find C# too picky about types. Personally, I prefer to have the discipline.
If you are doing low-level stuff where a GC is out of the question then you would prefer C++ or Rust.
But in the in-between space; for most web or business apps, it's very good.
.NET and Java ecosystems are the only ones with tooling and developer experience that is somehow comparable to the Xerox PARC world. Note for the pedantic, comparable, not exactly the same.
Given the way .NET was born, there is a kind of yin/yang with both platforms.
Some scenarios or guest languages are better in other platform, while some other scenarios or guest languages are better in the other one.
Given this, when would I suggest .NET over Java?
It is closer to C++ in language features (as CLR was designed to accomodate C++ as well), and C# is getting some of those runtime features exposed since C# 7.
Because of this, and XNA/Unity, also got the love from many game studios (Capcom even has their own fork).
Microsoft also understands GUI much better than UNIX shops, so even with the ongoing GUI civil war in Redmond, most of the GUI offerings are still better than what Swing and JavaFX are able to do out of the box.
Blazor looks really cool as technology, however I was in the trenches with WebForms and JSF, so not really something I would like to experience again.
Example, using RichFaces, and then trying to use something from PrimeFaces, IceFaces, or something else Faces, was always open to surprises mixing their lifecycle expectations.
I was involved with a RichFaces based JSF framework, during three years, and afterwards going back to something like plain JSP and tag libraries felt quite refreshing.
Very strong tooling. Compiler APIs, debuggers, very strong IDEs (Visual Studio with free extensions and Rider)
I'm sorry but if you compare and contrast the rhetoric and tone of people who are in the .NET ecosystem there is certainly a fanaticism/love for it. And it's often done in a manner that puts other stacks/communities down.
I can't really let this comment stand since it's simply not true.
I say this as someone who has been in the .NET space since 2009.