Hello everyone,
I’m a python developper, and I’ve recently switched to C# as a main language.
However, I’d need you to help me figuring out where should I go.
I’m looking to get into desktop/mobile app development. I’ve seen I need to learn about WPF and Xamarin mostly. Is it correct ?


What would be a good learning path ? What other skills would I need ?
Even though I know how to code, I’m still a very C# beginner. I’d really appreciate some help.
I wish you all a nice day, Thank you for reading
This gets asked a lot, part of the problem is Microsoft has made this a damn hard question to answer. Your MS-supported choices are:
WinForms
WPF
Xamarin Forms
Your third-party choices are:
Avalonia
Uno
Just use Electron instead of C# like Microsoft does
There are other choices, but in my personal opinion those other choices have more downsides than upsides and aren’t worth discussion. Here’s the skinny. For full disclosure, note I’m a little cynical about this so feel free to listen to people who disagree with me.
The important word here is “architecture”. When you are writing a small program that does a simple thing, you can ignore a lot of “advice” and use “bad practices”, get finished really fast, and be completely correct. But when you start to try to build bigger things, those “bad practices” make it harder to add new features. “Good practices” make you work slower. You have to spend time writing code that technically doesn’t do anything. The payoff comes much later, when adding features next year is easy because you spent an extra week of work today. When you use “good architecture”, the idea is if you do a week of work today, it saves you from spending 10 weeks rewriting large parts of the application later. But this only works for large applications we think will end up with problems that take weeks to solve.
Good: Very intuitive to learn.
Good: Based on GDI, so people have been solving its problems and blogging about it since the mid-1980s.
Good: Since the tech is 40 years old, for most “advanced” problems there are at least 100 different blogs with 5 different solutions.
Good: Very focused on raster graphics, if you need that WinForms is a natural fit.
Bad: Doesn’t support the architecture used in modern frameworks like WPF, UWP, Xamarin Forms, Android, Mac Cocoa (mid-1980s), iOS Cocoa, Blazor, ASP .NET Core, Angular, React, or Vue.
Bad: People love to hate VB6, WinForms is VB7 and nobody admits it.
Bad: It’s based on tech that assumed most people had one of three monitors. It’s hard to make WinForms support high-resolution displays.
Bad: Windows-only. Technically Wine might run a WinForms app on Mac/Linux, but whether this works or not is its own special skillset.
Good: Supports the same kind of architecture every modern framework uses.
Good: Every replacement for it MS has made is just more features on top of WPF, so it’s easy to learn the framework of the year if you understand WPF.
Good: More naturally supports a wide range of monitor resolutions.
Bad: MS destroyed the community with some stupid bad-will moves, so around 2013 or so 90% of WPF devs decided to be Ruby or iOS devs instead. This means most blogs about WPF are very out of date and hard to trust.
Bad: People who have never spent more than 10 minutes with WPF hate it, so if you ask a random WPF question you’ll get page-long essays about why you should use something else instead of actual answers.
Bad: WPF focuses on vector graphics and has no native facilities for raster graphics, so if you want to make very interesting custom controls you have to use a third-party library for raster graphics.
Good: It’s inspired by WPF, so it has modern opinions about architecture.
Good: It’s cross-platform, you can make an app that runs on Windows 10 (via UWP), iOS, and Android.
Good: Because it supports Mobile/Tablet in addition to UWP desktop, it’s very aware of resolution issues and has flexible layouts that let you support all of these cases.
Bad: MS doesn’t use it so occasionally it’s held back by crippling bugs while they focus on something more important like adding a sixth syntax sugar for auto-properties in C#.
Bad: Other mobile cross-platform frameworks exist but, unlike Xamarin, the people who crated these frameworks use them so they work a little better.


Bad: Very few people use Xamarin Forms so if you find a bug, nobody can help you.
Good: It’s inspired by WPF, so it has modern opinions about architecture.
Good: It’s cross-platform, and in some cases like Uno you can make a Desktop AND mobile app with the same codebase.
Bad: It’s third-party so MS doesn’t give a flip about making it work well in new VS versions. You have to hope they stay up to date.
Bad: Not widely accepted, but then again neither is WPF.
Bad: Microsoft didn’t make it and we’re supposed to hate things from other companies..
Good: Microsoft used this for its cross-platforma apps like Skype and Teams because they had no faith C# could deliver.
Good: Can work on both desktop and mobile.
Good: Used by millions of devs so most problems have hundreds of blog posts detaling solutions.
Good: Follows Microsoft’s advice given when they discontinued Silverlight: “Stop writing Windows-only apps, use JavaScript and HTML to write cross-platform apps so you don’t need to buy Windows.”
Bad: You have to use JS, and the build chain is very Byzantine.
Bad: Microsoft didn’t make it and we’re supposed to hate things from other companies.
Good: It’s a Xamarin Forms that’s supposed to work cross-platform on Windows/Mac/iOS/Android/UWP.
Bad: We won’t see previews until 2021, and we’ll have to see if it’s even released before 2022.
Bad: Microsoft won’t use it for their own apps, instead preferring to use native or Electron.
Bad: Instead of slowly adopting MAUI, MS is going to announce its replacement in Q2 2022, probably based on Blazor.
In short:
You should either use WPF and commit to Windows-only, or use Electron plus a frontend framework like React, Angular, or Vue. Everything else is in the air but both of these choices use architectures that modern UI devs understand and support.
What an answer. Thank you so much for your time and that knowledge.
According to what you’ve wrote, I’d say either Electron or Xamarin.forms seem to be a good idea. What do you think?
Do you think sticking with Xamarin.forms and UWP (in the case of desktop apps) can be a good idea ?
I must admit I’m a little bit lost.
Otherwise, Is it possible to learn JavaScript STRICTLY for desktop/mobile app development, without going through web development ?
Thank you again, I couldn’t expect any better answers.
Take care!
I’m doing this too! I bought this book, about 100 pages in – it’s good. book link
Oh, nice! Didn’t know about this one. I’ll take a look at it. How do you feel about it?
Don’t use C# to create a front end. Use javascript. .net is awesome for backend, is like 100th on list of choices for front end, at best.
Not even Microsoft uses C# for any front end interfaces, even though they have blazor. They’re using JavaScript.
C# devs
null reference exceptions

source