It's been nearly a year since I made the decision to take my business in a new direction and develop native mobile apps, and a little more than four months since I pulled the plug on my thriving database consulting business so that I could make that transition as quickly as possible. I'm often asked how the transition has been going, what's been involved, and whether or not it's been difficult to make the jump. I thought I would share some of my experiences here.
Choosing The Best Tool
After I made the decision to move into the mobile development space, the first thing that I did was look for a development tool to work with. At that time, I thought that I wanted to develop apps for both iOS and Android devices. That presented a challenge, because while there are development tools that are designed for cross-platform development (iOS and Android in particular), I found that they leave a lot to be desired.
It was only after I decided to focus on developing for iOS that choosing a development tool became easier. I ultimately decided to go with Xojo, and have been using it ever since. I like how quickly I can put a basic iOS app together with Xojo, and I've been using it to create demos, proof of concepts, etc.
I've also been spending a lot of time developing with Swift. I use it for more complicated iOS projects, especially those that need access to a wider range of the features that iOS and device provides (push notifications, location services, and so on). While developing with Swift is not nearly as rapid as it is with Xojo, there are times when you need the extra power that Swift provides. There's a trade-off between speed and power, and it seems unavoidable at the moment.
It's More Than Learning A New Language
One of the surprising things that I've discovered is that learning to develop for mobile requires more than learning a new language. It also requires learning to develop for what it essentially a new platform. I'm not just referring to the form factor of mobile devices and the challenges of designing apps that work well on their small screens. There are other aspects of developing for mobile that are easy to overlook until you hit them head on.
For example, all of the apps that I've developed are database-driven, and use APIs to interact with the databases. In iOS, network calls need to be made asynchronously, or else your app will appear to be slow and unresponsive at times. Making asynchronous calls to an API (and in some cases multiple simultaneous asynchronous calls) can be complicated. I've never needed to develop that way before, and it was something that I struggled with.
There are other aspects of mobile development that I had never encountered before. For example, there's the very likely possibility that the user will close your app at any time, or that the device will start to run out of available memory and iOS will sacrifice your app to free up resources. These are things that you need to take into consideration when developing a mobile app - things that you might not have ever needed to worry about, especially if your experience is with desktop or web development.
Again, developing for mobile requires more than learning a new language. It requires learning to code in a slightly new way, and to take into account things that you've probably never had to think about or worry about before.
Plenty of Resources Available
The good news is that there are plenty of resources available to help you learn about mobile development and work through some of the new concepts that I described above.
With Xojo, the resources that Xojo (the company) makes available are very thorough and well organized. You'll find great documentation, sample code, videos and webinars, and more. Combine that with a thriving and helpful developer community, and an extremely helpful and creative developer evangelist, and it's easy to see why learning to develop with Xojo is such a pleasant experience.
Swift is a little trickier. There seems to be no end to the resources that are available to help you learn Swift, but that's not necessarily a good thing. While there are several extremely helpful resources available (courses, blogs, books, etc), there are just as many terrible resources available. Swift is a little more than a year old now, and it is sometimes difficult to tell the Swift experts from the.. Well, let's call them "tinkerers." This also makes finding best practices difficult.
Learning Swift can also be like trying to hit a moving target. It was first introduced by Apple at their 2014 Worldwide Developers Conference (WWDC). Swift 2 was introduced at this year's conference. This can make finding an answer to a question challenging, because some of the techniques that worked in the past are no longer applicable. Also keep in mind that a number of Swift developers are coming from the Objective-C world, and their code and techniques often reflect that.
I've often said that for whatever reason, people seem to want to overcomplicate things. That seems to be especially true of many Swift developers. Some of the code that I've seen can best be described as a jumbled mess. As a developer, I try to write clean, clear code, and to document everything. I'd much rather write code that is easy to read, understand, and maintain than code that is efficient and complicated.
My advice: As you're learning Swift, if something seems unnecessarily complicated, it might very well be. Keep looking around, and chances are that you'll find a nice, clean, clear example to refer to.
While studying other developers' code and techniques can be helpful, don't be afraid to come up with your own way of doing things. Find techniques that work well for you and that you feel comfortable with - whether it's how you choose to organize your projects, how you name things, or your overall development process and workflow.
Take Your Time, And Have Fun
Learning to develop for iOS has been challenging, but I'm really enjoying the process. And while I've learned a lot, I know that I still have a lot to learn. Also, I realize that, like most things in "tech," I'll need to continue to learn in order to keep up with the constant changes.
My advice for those who are looking to do mobile development is to take your time and feel your way through it. Start working on a simple project - and by simple, I mean very simple. Then gradually add new features and try new things.