Lately, I've been helping some of my friends start learning iOS development and was asked to come up with some sort of list of what they should know to get started. This seems like a good topic for a blog post. So without (much) further ado, I give you my list of what you should know to become an Entry Level iOS Developer (in no particular order).
Basic CS Knowledge
I don’t believe that being a computer science PhD is a requirement for getting into mobile application development. I think it falls into the “definitely helps” category, however, I think that a grasp of at least the basic data structures and algorithms will definitely prevent the novice developer from coding themselves into a corner. So, for the novice, I would recommend watching the Harvard CS50 courses on Youtube as a great place to get started; they're easy to follow and actually pretty interesting to watch.
Swift or Objective-C?
Again, I'm not saying you have to know them to the point of writing a blog on it, or teach classes, but you should be able to write in at least one of these languages without having to look up syntax very often. API is a different story, especially in iOS; frameworks are updated yearly and methods are frequently deprecated. It's not unusual for me to work with the Apple Documentation up in a Safari tab most of the time. There's just too damn much to try to memorize. Just get yourself to a point where you can write classes, structs, loops, functions (class and instance), assign variables and evaluate expressions without help.
Right now we're in a strange time where it’s still acceptable to be hired only knowing Objective-C. Swift is pretty new and unless you're applying to a company that has a lot of project turnover, you'll mostly be writing in Objective-C anyway. That said, there are plenty of companies taking the plunge to Swift (including the one I work for) and I don’t think it will be too difficult to find a job if it’s the only language you know. I would say the important thing is to be fairly proficient in whichever you choose, and at least get familiar enough with the other that you can read the code.
Frameworks and API
As I've said before, I don’t think its necessary that you memorize all of the iOS API’s, but you should have a good idea of where to go.
- UIKit (UITableView, UIButton, UINavigationController, GestureRecognizers)
- Interface Builder (Storyboards, Segues, and the odd .xib)
- Foundation Types (NSArray, NSDictionary, NSString) and their Swift counterparts (Array, Dictionary and String), HTTP API (NSURLSession, Basic REST API concepts, JSON Parsing with NSJSONSerialization)
- Grand Central Dispatch (GCD, NSOperationQueue)
- Persistence (NSCoding, NSUserDefaults, CoreData)
- Memory Management (what Retain Cycles are and ARC fundamentals)
Patterns are important; they make development easier and they make your code cleaner. Make sure you understand these basic patterns, they're used A LOT in the iOS Frameworks and it is not likely that you'll be able to do much without knowing them (there are many more, but you can learn those as you go).
- Delegation (This is sort of the workhorse of most iOS API’s, you should DEFINITELY understand this.)
- Model View Controller (I don’t think Apple did the best job of encouraging best MVC separation, but it’s an important pattern that can help improve your code if you take the time to implement it properly. Also, it’s pretty much guaranteed to be on any iOS job interviewer’s question list.)
- Subclassing (Almost all user interface code will be a subclass of something.)
- Singleton (This one can definitely be abused… use sparingly.)
Familiarity with the Environment
This might seem obvious, but if you don’t have a Mac, get one! If you don’t have an iOS device, get one! It’s going to be really hard to develop for a device you haven’t used or are not familiar with. likewise, it’s gonna be hard to code without a Mac to code on. I started out with a 2009 MacBook Pro 13″ and a first-gen iPod Touch. It is quite possible to get by with the lower end devices to start. A nearly $1,500 investment, but totally worth it in the long run.
Usually, UX and UI are taken care of by a designer, but you should understand the Apple Human Interface Guidelines. You should probably know the difference between mockups and wireframes and how to use both in your development process.
You should be familiar with a few of the common development tools.
- Xcode (Of course.)
- Git Source Control (Some companies might use Subversion or Mercurial, but git should be enough to get you in a door somewhere.)
- JIRA or Bugzilla (Most likely JIRA. Again, you don’t need to be a pro with this, but you should probably at least play with it enough to not be scared the first time you see it.)
- CocoaPods (This is a tool we use to manage dependencies and third-party code. I haven’t heard of a company that isn’t using this.)
Having an opinion about iOS, Swift, or even a specific API is a great way for interviewers to understand how deep your knowledge about a topic goes. It also allows us to see your passion. If you're having an interview and you are asked, “So, what do you think of Swift?” saying, “It’s alright, I guess.” is not the correct answer. You should tell them what you think of options and how you like using a specific feature. There aren’t many wrong answers here; the important thing is to have something to say.
Actions speak louder than words. If you really want to nail that interview, put together a couple of simple apps (or even better, launch them on the AppStore). Showing an ability to complete a project on your own speaks volumes. I cannot recommend this enough. GitHub is nice too, but if you go this route, try to make your code easy for the interviewers to compile if they want to test it out.
I have created a article on how to build an app portfolio, you can check that out here.
If you're wanting more resources to get started, please checkout my iOS Developer Resources page where I link to blogs and pages I found helpful when I started out.
I guess the last thing I would add is JUST DO IT! Right now iOS developers are in high demand and if you can get yourself to a decent skill level, you won’t be without work for a while. It’s a rewarding job that allows you to practice both engineering skills and creativity.