Developing an app – how difficult is it to learn app development (in Xamarin)?

I’ve been been developing and coding since I was 16 years old, and today I’m 27. I have a bachelor degree in software development and have spent most of my times doing websites in ASP.NET MVC.

I’ve never really worked with applications outside the web, which means I’ve always been very much used to the stateless way the Internet works.

But recently I was pushed into app development, which has been a very interesting experience – and thats why I made this blog post: To shed some light on the question: how difficult is it really to learn to code apps? 

This question obviously has a couple of answers.
If you’ve never developed anything before and never saw code, well, you’re going to struggle. In this case I would advise you to go to some of the many “learn to code” courses available online.

In this post I will reply the question as a .NET developer. I’m probably an average .NET developer. I’m not the guy that answers on StackOverflow, or you put as a head architect on a project. I’m the developer-gone-CTO type that understands business and marketing, but still code.

Learning to code apps as a .NET developer in Xamarin

After my old startup went bankrupt (good story coming on the blog – from 0 to 45 employees in roughly 1 year), I have made a new startup.

Unlike all my previous startups, this new startup needed an app. Heck, the app is the fucking product.

And when you need to develop a new app you need to do A LOT of features, so I could not outsource this. I needed to learn to develop an app.

The first decision was to decide: iOS, Android, HTML app or use a tool such as Xamarin which can do both.

I picked the lazy way, and did not start to learn Swift and iOS, or re-learn my happily forgotten Java from university in Android. However, I also know that HTML apps suck.

That’s why I decided to go with Xamarin Forms. Xamarin Forms is fucking amazing because you can basically get an Android app and iOS app out of the box.

Learning Xamarin Forms

The first thing I did, was to buy the Xamarin Forms course on Udemy (not an affiliate link). This is a 10 hour course with some assignments, teaching the basics.

I went through the course in two days, and a couple of things stroke me which surprised me:

  • I absolutely LOVE that apps are not stateless. Your old objects doesn’t die between every click, and you can use events. Awesome.
  • Unlike HTML+CSS+JS which is getting insanely complex (I still only know Knockout.js, so fuck me), making apps has a couple of base views, a few controls and that’s it. It’s so much simpler because there are very few basic building blocks
  • A LOT is delivered out of the standard framework box

After the 10 hours, I was surprised how far you got. I was able to take quite a lot of views from existing apps, and make something relatively close to is within a few hours.

From learning to building your own shit

When I learn, I usually skip to the premade solutions quite fast, because I’ve always been a lazy student (somehow I still got good grades in school – thanks to oral exams).

You cannot do this when you make your own app, because things need to look 100% the way you plan…

So when I started to develop our own app which looked like this, I ran into a couple of issues:

 

The first couple of issues I had was:

  • How do you apply a gradient in Xamarin Forms? HEEELP
  • Shadow? Heh, where is Box-shadow from CSS?
  • Where is a tab controller (hint, fucking none)

I had a couple of these issues..

Building the core functionality of our app was easy. I did this in a couple of days, by calling our Web API (ASP.NET MVC of course, #dotnet #fuckyeah ). However, there was just these things that did not work very well.

To solve this I outsourced these things to some developer I found on Upwork. He could fix my full list of problems in ten hours, and I learned a lot in the proces.

Dependency hell

The last times I had to worry about DLL’s and version numbers for real, was when I was in consulting and stole money from corporate clients by helping them with Sharepoint.

And because I just had to mention Sharepoint again, I’ll drop this random meme I found when I googled “Fuck Sharepoint”:

 

However, this came back to me now.

I experienced to annoying problems:

  • I had made a nice C# class library wrapper for my API. These do not work in Xamarin Forms – they need to be portable (PCL type)
  • I needed a DLL such as JSON.NET. However, you also need to add these to the native projects. But this gave me a lot of issues I spent days on solving

However, after these initial problems (which was annoying though), I haven’t had much problems.

Reusability

So after our first version of the app was live, it was pretty clear my code was a mess.

I had made so much code – a lot of copy paste of course – and nothing was reusable.

Again I had my Mexican guy on Upwork on the task, and he did an amazing job. He took all our uniquely styled labels and other controls and made them into a shared resource which was easy to use. Very important to use the resource sharing available in Xaml.

Summary after one month with Xamarin development

Developing apps was MUCH easier than I expected.

After I watched the Udemy course I was up to speed, and could actually develop useful stuff. Unlike HTML/CSS it’s really simple UI, and there are not many ways to do a single thing.

The difficult part of app development seems to be in other areas. it seems to be in the details and how things react. Examples of things we’ve stuggled with is:

  • Making sure the keyboard pops up and goes away correctly
  • Getting the camera to work properly
  • Customizing our input fields to use material design

But it’s pretty damn doable.

So if you’re a developer out there, and especially a .NET developer – don’t be scared. You’re probably a better developer than me, and we will still be live with something within weeks.

You can do it too.

I am on Twitter. If you found the post interesting, you should follow me. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *