Two pieces of .NET news recently:
Microsoft has published a .NET Core 2.1 roadmap and says:
We intend to start shipping .NET Core 2.1 previews on a monthly basis starting this month, leading to a final release in the first half of 2018.
.NET Core is the cross-platform, open source implementation of the .NET Framework. It provides a future for C# and .NET even if Windows declines.
Then again, StackOverflow has just published a report on the most sought-after programming languages in the UK and Ireland, based on the tags on job advertisements on its site. C# has declined to fourth place, now below Python, and half the demand for JavaScript:
To be fair, this is more about increased demand for Python, probably driven by interest in AI, rather than decline in C#. If you look at traffic on the StackOverflow site C# is steady, but Python is growing fast:
The point that interest me though is the extent to which Microsoft can establish .NET Core beyond the Microsoft-platform community. Personally I like C# and would like to see it have a strong future.
There is plenty of goodness in .NET Core. Performance seems to be better in many cases, and cross-platforms is a big advantage.
That said, there is plenty of confusion too. Microsoft has three major implementations of .NET: the .NET Framework for Windows, Xamarin/Mono for cross-platform, and .NET Core for, umm, cross-platform. If you want cross-platform ASP.NET you will use .NET Core. If you want cross-platform Windows/iOS/macOS/Android, then it’s Xamarin/Mono.
The official line is that by targeting a specification (a version of .NET Standard), you can get cross-platform irrespective of the implementation. It’s still rather opaque:
The specification is not singular, but an incrementally growing and linearly versioned set of APIs. The first version of the standard establishes a baseline set of APIs. Subsequent versions add APIs and inherit APIs defined by previous versions. There is no established provision for removing APIs from the standard.
.NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.
APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature.
Microsoft also says that plenty of code is shared between the various implementations. True, but it still strikes me that having both Xamarin/Mono and .NET Core is one cross-platform implementation too many.
Xamarin needs to go away in favor of uwp made portable on .net core.
You should be able to take any uwp app and compile it for iOS and Android almost for free. (Of course there will be certain things like fluent that won’t translate)
And it should do it natively. iOS on xamarin is already like this. But Android compiles to Java bytecode which makes a mess. It should use the native support in Android instead which would both make it faster and get rid of an entire dependency.
Then they could have put xamarin and .net full on life support and had one and only one .net core with it compiling native code on all platforms.
Instead the xamarin team has been off playing around with macos,wpf, and a ton of other useless Mac features that no one really cares about because the xamarin team is Mac biased as shown in all of their presentations sitting on macs. Which isn’t helpful for Windows.
Instead another team should have been figuring a way around the “compile on Mac” rules for iOS and providing all msdn subscribers free remote build and debug with interactive simulator in the cloud so developers don’t need a Mac at all to create great, first class, uwp cross platform apps. To do this they should have leveraged hyperv to emulate iOS firmware and run the iOS simulators. Then when you wanted to build for deploy it should have used a hosted macos instance to actually compile and automatically deploy to the app store.
Instead it’s worse than ever: if you have hyperv installed you can’t do Android device because Ms dropped the Android emulators so they haven’t been updated in forever, so now you use Google’s which requires Intel’s emulator which won’t work with hyperv.
Worse, google switched to the cli for Android so getting sdks, and emulators is a disaster right now on xamarin with bets tools that don’t work right etc.
The end result is that it is easier to use Android studio and learn klotin or Java that it is to get a stable build and deploy environment up on windows.
And even if you do get it working, either way you’re now locked out of doing docker development on windows because docker requires hyperv.
And you need a Mac…. To build iOS.
On the Mac, you can do docker dev, Android dev, and iOS dev all on the same machine without hassle. It basically just works.
And if you’re using react and react native you can do all of it in ms code in one language that is consistent and seamless and just about as fast as xamarin forms if not faster in most cases.
So what they’ve created is an argument to NOT use Windows for development and a complete dissaster.
But no one is listening at the xamarin team or the visual studio team or the .net team. This is a complete failure of leadership from the CEO on down. The xamarin people need to get sat down and told to row the boat in exactly the same direction as the rest of .net core and rolled into the uwp team and if they don’t like it, leave.
Same goes for web development. They’ve given up on SPA when SPAs need Ms more than ever. Angular and react are a mess with compilation and tree shaking that takes longer to compile 10,000 lines of code than msbuild takes to compile 10 million lines of c# to native. (Not intermediate)
With web assembly and blazor they have a chance to fix the disaster area and create a compelling model that extends mvc.net to work natively compiling JavaScript from c# with an integrated server and client side model fixing all of the server side rendering problems with angular and react because the c# code and be natively executed on the server for server side rendering and client when the user’s browser fully loads.
Instead they’re going with the mono mess behind it if anything and doddling around instead of getting a project going and letting us test the stuff. We didn’t need mvc.net pages, we need pages to be a full SPA with server side rendering functionality. They have a huge opportunity here but are frittering it away.
And then there is AI. C# tools no longer work on Hadoop. They haven’t been properly updated since 2014 and the ones for there other version of Hadoop are crippled so there is no usable interface for storm, or hbase as it stands. You’re forced to use old tools or Java.
And then all of the AI stuff is in python. Even R which they bought is going away. Litterally the future of computing and you can’t use c# to do it.
The only bright star is cosmosdb which has good c# support.
As of right now I see little reason for .net developers to stay with Ms. They have exactly one more developer presentation, which should have happened already to get their heads out of their you know where before I abandon Ms and .net entirely. And from comments all over the web I’m not alone.
It’s sad, because with the right leader they could have last fall been announcing UWP universal as the fruits of the xamarin purchase AND anouncing mvc.net SPA pages that also allowed for native compile to Windows, iOS and Android too and an integrated, clearly thought out single direction big data with ai analytics in .net to back all of the front end.
This is just one of the verticals that Satya Nadella has destoryed for MS. And worse because he’s busy whipping out out the consumer and business windows space and destoryed development through neglect, the shining star he’s fixated on in azure will decline because it’s success is driven by developers and it staff running Windows and having a comfortable transition to the cloud as well.
He will be remembered as the guy that made Microsoft into IBM.
Thanks for the comment. While I do not share your view completely, it was a better read than the blog post.
I see. Net core as a framework for sever side cross platform development while Xamarin is rather dirrcted to the client. This is a sensible strategy, but Microsoft is messing it up by not supporting Android to the extent that is required.
Thanks!
The problem is that Mono is a Frankenstein. And Xamarin is full of half-measures and people chasing shiny objects instead of working to the finished line of a solid product that is reliable.
That was forgivable when they were their own company. Now they’re MS and this isn’t forgivable anymore, this is woeful incompetence by leadership at MS.
If you want to use Mono, go ahead. But one way or another, Xamarin shouldn’t be a separate product, UWP should be it, and it should work across all 3 platforms with little extra effort. Since UWP is mostly .NET Core with stuff on top of it and .NET core can run on ARM and Linux it doesn’t make sense to me to port UWP presentation to Mono when it could be ported to .NET Core as the base and Mono could go away and then you have a single code base for .NET with addons.
And really, this isn’t that hard: Make all of Google’s VMs for Android run in HyperV. Do the same for iOS or build an iOS emulator black-box style. If anyone can do that, it’s MS. Then use VSTS build process to compile for release and do full testing on virtual simulators there and then one click release to the iOS App store.
MS has an opportunity to make it so that I don’t need to own a Mac, and don’t need to own devices to test in all but extreme cases, and use a single language that is highly expressive, and very performant (i.e. way better than React etc. because it’s not using a web browser) to create top tier apps with almost 0 additional effort.
When they focus on getting that done, they’ll realize that this solves their app store problem faster than PWAs ever will because if I can cut my dev time down by 40%, using a single language across the entire stack and not have to buy a ton of hardware to do it, you’ve just created a massive value prop.
And with Blazor now, the same can be said about web. Node came along because of Macs being forced on developers to write for iOS and a hack job being created to make things work so that the one piece of hardware that they invested in could do all of their development. Microsoft needs to undo that and make Windows the best place to do all of it, in one language: C# (with XAML or HTML/CSS presentation).
Then small shops don’t have to have one guy for back-end and another for front-end. And that’s a huge portion of all software development in the world. That’s why they went node. Front and back-end, all in JavaScript. And that’s why they’ll switch back to the vastly superior C# again.
But that would require leadership at MS that I just don’t see outside of the Azure team. (even that’s a little bit of a Frankenstein still, but it looks like it’s consolidating into a clear message under ComsosDB, just need to see what they’re going to do to make AI better under C# than python)
They need someone to see this central vision and demand that it be executed. You’ve got 12 months until beta of the entire seamless stack and 18 months to a working, smooth product that executes. That should have started 18 months ago. Now you have to do it in less than 12 and show your warts while you’re building it to the public so that they can see what you’re doing and stay onboard long enough.
There’s no one at MS right now that has that type of leadership. They need to hire outside and give that person carte blanch. It will be ugly and people will be fleeing while it happens because the culture will have to be shaken up A LOT but the end result would be revolutionary and put MS back on top and give MS a real path back to mobile. Ask the CEO of the company where I’m at right now what it took to change the culture and fix development. I’ve done this before, it’s ugly at first but then people get excited about the results. I just hope MS can find someone that can do it and that they have the guts to make it happen.
(And in the mean time they need their Surface Phone to run Android apps. Yes you won’t get UWP apps built, but that’s ok, because you’ll solve that with a cohesive dev strategy, and in the mean time your mobile platform has a full slate of apps. They could basically turn it on tomorrow if they wanted, so this is an easy short term fix.)
easier to use Android studio
easier to use Xcode
if your happy making inferior Xamirin apps , go for it.
this single source whole world dominance fever dream is a joke,
what I find esp entertaining is the please kill full framework so us losers can compete, guess what you whinnies , UWP/core/Xamarin is already dead, it’s a “hell no” from the pros, it’s in a spiral of disinterest, tiny number of the gullible fantasy amateurs, it’s a buggy mess for the sake of a few clowns desperate to be relevant at MS, has anyone even seen a half arse anything from any on this, no , are there a few dorks desperate for any win going to waste time on it, sure, the rest of us look on and laugh, the dorks are used to being laughed at their whole lives, so plod along undeterred , then when the thing is clearly dead to even them they want to blame someone else for the sh!t judgement, the world of suck epic fail that is UWP/Core/Xamarin has zero to do with Saytya, it’s YOU DUMMY
Sorry for typos and lack of proper capitalization. Stuck on a phone at the moment.