(UPDATE: I’ve decided to update this post slightly to also reflect my increasing level of experience.)
I was asked to help out a neighbouring startup in Berlin with their interview process for an iOS developer. Seeing as I continually seem to be the resident expert (I really don’t know how this happened and I look forward to the bigger fish!) I thought I’d put my thoughts down on paper as to how I would prepare for such an interview.
So, here it is, should you be in a situation where you need an iOS person. Feel free to comment. There is always a bigger fish, but I have amassed a lot of iOS experience so far.
- How much experience / how long have you worked with Objective-C / Cocoa / iOS ?
- What was the first version of iOS you worked with?
- How are your memory management skills? (I only know ARC, I know about release/retain, I know about how to make both types work together)
- Do you have experience with…
- Customizing UIViews with drawRect: (i.e. CoreGraphics / QuartzCore )
- CoreAnimation / CALayer manipulation
- Container View Controllers ? (i.e. childViewControllers on iOS 5+)
- Customizing standard UI Components (UINavigationBar, UITabBar, etc.)
- Custom UITableViews, UITableViewCells
- Laying out Views (i.e. all layout code, setting frames, belongs in layoutSubviews)
- What Networking Frameworks are you familiar with / prefer? e.g. ASIHTTPRequest, AFNetworking, RESTKit, MKNetworkKit, etc.
- Have you ever worked with blocks / written Block-based API’s ?
- What about categories? Why would you typically write categories? And with code you have source for?
- How do you tend to handle persistence on the device? (e.g. NSCoding, CoreData, NSData with filepaths)
- Do you have experience with Asynchronous Image Loading? i.e. subclass/category on UIImageView
- What do you have to be careful of? (e.g. cancel image loading request when view disappears / is to be reused in tableView, don’t block UI on main thread, instead do image operations on a background thread)
- Do you have any favourite open source libraries for this, or do you create your own?
- In addition, what are your favourite Open Source Libraries / Use most often? Why?
- Back to asynchronous communication. How do you approach this in general? (e.g. you update one data object from the server on which other objects in your App need to know about) KVO? NSNotificationCenter? etc
- Have you discovered the greatness of NSOperation technology and are you competent with concurrency? How might you create a block-based API that does work on a background thread and returns its result to the main thread?
- Do you have a public repository or a .zip file you could provide so we might look at your code examples?
- If you have a problem you need to solve and aren’t sure at the beginning how, what are your typical strategies to solving such problems? (A vague question)
- How good are you at debugging? i.e. NSLog tracing, breakpoints, Instruments, or what?
- (There is no correct answer, only to get a sense of the candidate’s style) Are you formal in your design approaches (e.g. UML Diagrams), or are you more of a cowboy? (Code first, design later). How do you approach writing your classes? (i.e. write headers first, comment what they are supposed to do, then implement later. Pen and paper first, then coding. Etc etc)
- What is your opinion / commentary on the topic of encapsulation?
- How many Apps have you worked on that have been published to the AppStore?
- Any you are particularly proud of, and why? What was your role on them?
- Do you have experience dealing with Provisioning Profile management?
- What part of iOS Development do you like most? e.g. writing custom components, designing the App’s architecture, integrating foreign services (like other webservices), etc.
or, If someone asked you what area of the app you would like to primarily develop, what would you pick and why? (basically to determine what *kind* of programming he’s into)
- Experience with working with Maps (MapKit framework?)
- (on formality) To what extent do you document your code? e.g. Zero, Commented Headers, Official doxygen/appledoc style headers.
- To what extent do you use Instruments for debugging?
(UPDATE: As a companion to this post, please also see my thoughts on technical interviews)
SECOND UPDATE: I also have the ultimate iOS Developer technical test you can assign a potential hire. It should take 1-3 hours. It is easy to communicate, allows a lot of freedom of implementation so you can really get a better picture into how a developer thinks, and will make sure this developer knows the absolute fundamentals. Ready for it?
Calculate the and display each Fibonacci number from 1 -> max N possible on an iPhone with unsigned integers, and display each F(n) in a table view. The UITableView scrolling MUST remain smooth.
That’s it. You’ll be amazed at how profoundly simple this task sounds and yet how much iOS knowledge can be demonstrated. Not just what they know, but how they structure their work. You can assess their APIs, their separation of concerns when designing classes, the considerations they’ve made for performance, and their knowledge of concurrency. (Not to mention their knowledge of recursive functions.) It is ok to give them the formula, and allow them to use Google. F(n) = F(n-1) + F(n-2).
Please let me know if any of this post was useful to you! Cheers, S.