- I tried to reflect on programming language development history and the reasoning behind it.
- I tried to write some real-world apps using JavaScript and Go.
- I still didn't find the unicorn and felt bad about wanting to write more server-side JavaScript.
What fit me well and allowed me to write the most logic per hour was actually Django, because of some embedded stuff like roles, an ORM, security features, user management, and not overloading me with technical stuff. But my requirements emerged, and now I want the following as well:
- Components on the server-side like JSX
- CLI tools for standard development tasks
- Cross-platform with desktop and mobile
- Consistent language syntax (not like "===" in JS)
- Probably still object-oriented and compiled
Of course, it should be open-source and permissive to write any apps I want – that's just non-negotiable, but something worth checking when you are dealing with Microsoft.
Go is great – it really pushed me in terms of thinking, but if you take a "machine-human" scale, it's somewhere on the machine part. These are not roadblocks, it just made me realize one more time what I'm capable of:
- Expressing human logic with Go concepts can be hard, and it's more on the low-level and do-it-yourself end for technical stuff.
- Go pushes towards a SQL-first approach and away from ORMs, although real-life apps like Gitea do use ORMs to be able to support different DBMSs.
And with all that said, I'm going to try another ecosystem that introduced a few exciting changes recently: .net 10.
.net 10 perks
Actually, .net 10 has got everything from the above, specifically:
- Components with Razor pages
- An ORM, Entity Framework Core, supporting a really wide range of DBMSs
- An open-source web server is there as well
- C# fits all the requirements for a server-side compiled language with garbage collection, AOT, and co.
- All the aforementioned "batteries-included" features like role management
- The courses and documentation are all there
And there's Avalonia for a unified, modern UI across Linux, Windows, and macOS desktop as well as mobile (iOS and Android).
At the moment, I tried to cross-compile a simple desktop app from WSL to Windows, and it worked. I compiled one for Linux, and it worked as well. The drawbacks? Sure:
- A minimal desktop app was about 200 MB, because .net 10 was included and it's naive to expect that it should be pre-installed; it's the opposite of Go's approach, thus requiring packaging for installation and dependency management, which is different on every platform and Linux distribution. 120 MB without .net, by the way, and I could probably trim that.
- The language is huge; it would probably take a lot of time to comprehend all of its features and be able to use them.
- The legacy of being tied to the Microsoft ecosystem, which can still be true for some add-ons; and... Microsoft behaving inconsistently.
Conclusions
I always looked at C# as Java for Microsoft fanboys, but technically it was an effort to make Java normal. The surprise for me is that in .net 10, all the critical components are open-source and cross-platform. Even Microsoft itself hasn't produced apps leveraging all the features of .net 10. Teams could do that, but it has a legacy codebase and is a web-first app, so it makes sense for them to continue struggling with React. Let's review one reason pro and one reason contra.
The reason contra is that I've heard a lot of stories of rewriting Java apps in Go, but I don't know any examples of rewriting a Java app in C# and .net. It's especially strange because C# is similar to Java, while Go is not. What I think is that .net got this critical package of features in .net 10 quite recently, while Google and Go have been consistent for more than 10 years. It's about trust, which is a weak side of Microsoft. Again, what forced Microsoft to make the right choices finally? Maybe they feel they are losing ground, and locking users into their ecosystem is not enough anymore. It's like companies making their tech stack open-source before filing for bankruptcy. And the next question is: will Microsoft remain consistent with open-source components if .net gains traction? With the reputation Microsoft built (or destroyed) over the years, it's a risky business to invest in C#. By the way: who is doing it? There are quite a few well-known examples built on this stack, although it's widely used (as well as Visual Basic). Can you build Docker or Twitch on a .net stack (for those who don't know, these are Go apps)?
If you want to enter B2B apps with your product, you'll need to connect with very specific Microsoft stuff like domains and policies, and as business is conservative, it will not jump off this stack soon. It's kind of painful with any other tech stack, so it's a nice-to-have option.
Even if .net occupies the place for custom apps for just one company, it was a viable option before for companies using the Microsoft stack, and the good news is that now it's a viable option even if you don't want that Microsoft dependency.
- Previous
A Process Map In ASCII Is a Thing