I am now coming up to 5 months in my current job as a mobile app developer. To some, it’s the nirvana of jobs in the tech field. Discussions with friends pictured bright airy offices with exposed brickwork, grass floors, meditation pods and giant slides - a Silicon Valley inspired ultra hipster utopia fuelled by vegan, gluten-free charcoal lattes. ‘What do they do?’ I was asked many times - ‘anything I’ve used?’ 'The next Instagram/WhatsApp/Fortnite?'
Joining a small mobile development agency in Brighton, the work would be varied but plans for social media app dominance would have to wait. Brightec's core principles are to be an agency that builds long-lasting relationships with customers and delivers well designed, high quality, maintainable apps that users will love to use. Luckily for me the coffee was good and beards weren’t required.
Having had no previous experience of mobile development, I started my probationary period with some trepidation at the steep learning curve that lay before me. I thought that it would be immediately discovered that I didn’t have a clue what I was doing.
Don’t get me wrong, during the job interview it was made clear on both sides that I had no mobile experience but that was ok, and I certainly wasn’t new to software development. I started my career as an embedded software engineer, followed by 4 years in a certain cyber security company developing full disk encryption and management software for businesses.
This post is not meant to be a step-by-step guide to get you from zero to a fully fledged mobile app developer in 3 months, there are plenty of online courses that promise to help you with that. It’s more a reflection on my first few months getting to grips with a new sphere of software development and some of the thing things I found helpful along the way.
After the introductory meetings and induction I was given a book called “iOS Programming: The Big Nerd Ranch Guide” and told to have a browse through it and look around online for courses that might be useful.
iOS or Android?
The first point of note is a question that comes to mind when starting mobile development; iOS or Android? Or perhaps both. In time I think experience of both is definitely the best plan but you can’t really learn 2 different programming languages, 2 development ecosystems side-by-side and expect to be useful to a company in a few months. Pick one, but which one? Preferably the one that you have the most interest in.
I have started out on the iOS path because that's what I am most interested in. I use an iPhone, iPad, MacBook etc, and have an interest in Apple as a company. If you don’t have an interest in the wider ecosystem of your chosen development platform then you won't be interested in new products and features that Apple/Google are releasing and the new mobile app ideas and development practices that are made possible by these new features. From what I’ve seen so far, especially in the mobile development world, if you don’t keep up with where the industry is going, you quickly get left behind. If you have no interest in the wider mobile sphere then it’ll be hard work and perhaps mobile isn’t for you.
Pick a training course
So after the first day, I found an online course that I thought might be good. There are hundreds of different online courses and course directories; Udacity, Udemy, Treehouse, Lynda, PluralSight to name a few. I ended up picking one from Udemy which was recommended by a colleague.
These courses generally take you through an introduction to what mobile development is, why it’s great, setting-up your development environment, exploring the IDE, writing some simple hello world style program, e.g a button on a screen, and systematically taking you through some of the important features that are used in most basic mobile apps along with generic programming objects. Reading down the list of course sections I had buttons, text fields, image views, arrays, dictionaries, loops, classes, objects, strings, auto layout, navigation, view controllers, animations, location, gestures, web content, APIs, JSON data, - and the list went on.
I proceeded to make my way through the book and online course, writing mini basic apps for about a week. These exercises were well put together and gave a good sense of progression in learning, but all it really did was to help get me familiar with the IDE. There’s only so much following along to an instructor you can do before it starts to feel very repetitive and dull.
The second point I noticed when working through the course was how little writing actual lines of code there was; coming from a job where the UI was almost an afterthought. The courses almost always start out each exercise dragging interface objects onto a screen, then wiring them up with some code and I was amazed at how quickly and easily simple user interfaces could be put together. This may not be a surprise for anyone who has worked in web or other fields with a heavy UI focus, but for me it was quite a change. When it comes to good mobile apps, design and user experience are of utmost importance.
The third point I noticed was that I learned the most from the ‘extra credit’ exercises, the part where the course would say to try and extend the app in some way and try it out on your own. This undoubtedly led to Googling and finding answers on Stack Overflow. In all spheres of development, if you have a question about something, someone has asked it on Stack Overflow.
Moving on from moving cats
After about a week, I was a bit tired of mindless code mimicry and creating buttons that made pictures of cats move across the screen. Armed with a mastery at crafting Google search terms to instantly find the answer to any coding question, I was ready to take a look at a real app.
So, given the git repo url and a Jira task to start on I looked through the code and found that there wasn’t the single storyboard with view controllers neatly segued together. There wasn’t even a single project! What is a POD file? Why are there so many xib files?
Point number 4: training course environments are nothing like a real development environment. Any code base that has been around for any length of time has features of coding practices that change and evolve over time with the developers. Code you write today should be better than code you wrote last year, it should be organised better, it should be easier to test, it should be easier to read. Once you have learned how to use the IDE and how to find answers to questions, get familiar with design patterns and the design patterns that are being used in the company. This is key to understanding existing code bases and being able to contribute to the code. If you are learning in order to get a new job, look at some of the open source projects in the language you are learning, understand how the code works and perhaps make contributions to fix bugs, if nothing else it’ll look good on the CV.
Book some time in the libraries
Another difference between these demo apps and a real project is the heavy use of these 3rd party open source libraries. Take a look at GitHub and you’ll find thousands of libraries that users have created to help with iOS development. If you find yourself writing lots of code to do something that sounds pretty simple e.g make an API call to a server, you’re pretty much guaranteed to find a library to save you writing the code yourself, (we use Alamofire for HTTP networking).
Learn about package managers, CocoaPods, Carthage, Swift Package Manager, how to use them and get a handle on what open sources licences are and how they affect your code and releases. There are libraries to help with nearly all aspects of app development, networking, layout, transitions, animations, code style, notifications etc.
One final thing I noticed when starting to work on real apps is the prevalence of network API calls; currently in the UK app store chart over 90% of the top 100 free apps make network API calls as part of their primary function. Make sure you understand how different API calls are made and received, and the importances of building apps to be responsive in an asynchronous environment.
A lifetime of learning
Finally, the more I delve in to app development (reading iOS SDK documentation finding new useful libraries and tutorials, keeping up to date with new iOS and Swift developments), the more I realise that there is a lifetime's worth of knowledge out there. In the projects I’ve worked on so far I haven’t got anywhere close to a lot of areas of the iOS SDK; SpriteKit, Metal, MusicKit, ARKit, CoreML, but that doesn’t mean I shouldn’t understand the basics of these frameworks so when a project requires the use of these technologies I don’t have to start from scratch when the project starts.
Learning to become a software developer, in mobile app development or any field, never stops. After you’ve landed your dream job, you haven’t “made it” as a software developer - you’ve just begun your journey. Bob Martin in his book “The Clean Coder” suggests your should be spending 20 hours a week on top of your daily job developing yourself and enhancing your career to be considered a “professional”.
I can’t pretend that I spend that much time myself and I think it's quite a bold and broad statement to suggest people who don’t spend that much time can’t be considered professionals, but I agree with the sentiment. You should make it a priority to set aside time for personal learning and development. There have been many articles about the “5 hour rule” which discusses the personal history of several widely admired and successful business leaders, all of whom set aside at least an hour a day or 5 hours in a week specifically for reading and learning. This sounds far more achievable to set yourself as a goal than 20 hours a week.
Read blogs on app development, design patterns, new technologies. Read into areas not related to software development, sometimes your brain needs a break from software problems to keep the learning fresh and keep your brain sharp.
- It sounds obvious but make sure you are interested in the field you are developing in! And keep up-to-date with new features and technologies in your field.
- Online courses and books are a good way to start getting familiar with your IDE and language syntax but the real learning comes from working on real mobile apps, so get started soon.
- Always look out for 3rd party libraries that can help you with your app.
- Learning is a life time practice. Make it a priority to set out time to read and learn new things every week.