New: Personalized (one-to-one) iOS Interview Training!

I am in the process of building a new iOS training program focused on helping iOS developers pass technical interviews. Through virtual mock interviews, weekly assignments, my book, and other activities, the goal will be to provide a unique and personalized multi-week learning experience. 

With the goal of launching the program sometime this summer 2017, I am seeking to enroll 20 students. If you are interested and would like to learn more, feel free to complete the following questionnaire:

Posted on May 22, 2017 .

iOS Interview Preparation with Design Patterns

For iOS developers, acquiring the skill to recognize and apply common design patterns is key. While numerous models exist, all solutions work toward building scalable apps. If you’re preparing for a technical interview, being able to identify, compare and code design patterns will directly impact your job success. In this essay, we’ll review some common models typically used in iOS / Swift development. 

As mobile developers, we have the benefit of working in a unique space on a highly specialized platform. However, design patterns aren’t exclusive to iOS development. On the contrary, their popularity is based on standards developers use to communicate ideas and organize code. In many cases, regardless of programming language or environment. 

Navigating the world of design patterns can sometimes be a challenge. Some patterns (e.g. Protocols) may work differently depending the programming language of choice. In the realm of iOS development, there are also specific patterns that are also considered best practice. 

Arguably, the most recognized way to organize code is through Object-Orientated (OO) programming. As such, an object-based model isn’t a single design pattern, but a group of concepts that form the foundation of most modern coding projects. At a basic level, code that serves a specific goal is grouped into an object or class. Equipped with specific characteristics, objects have the ability to communicate with other objects and can achieve advanced levels of functionality. They can also borrow (e.g. inherit) functionality from other objects.

Protocol-Orientated Programming (POP) offers an alternate way to organize code projects. As the name implies, the model is based on objects conforming to various rules. Rule-based protocols can also be found in other languages including Java and Objective-C. However, advancements in Swift take Protocols a step further by allowing them to store actions (e.g. methods) for conforming types.

Even if you don’t know the Delegation pattern, examples can be found throughout the iOS SDK and they are fundamental to creating any app. In an object-oriented environment, delegation is nothing more than particular objects assuming shared-responsibility for certain actions (tasks). One of their main benefits is communication. With the work of certain tasks handed off to a secondary delegate, these objects often communicate the status of work in progress or completed. As iOS developers, many of us are accustom to working with important classes such as UITableViewController and their related delegate methods. What is interesting, is that developers can also create their own objects along with custom delegate classes. 

A challenging design pattern to understand is Notifications. Unlike delegation, notifications are based on a loosely-coupled model of "registration and updates". As the phrase implies, notifications are largely systems-based and don’t follow many of the conventional interactions seen in OO development. Their power comes from being able to invoke actions by (potentially) any other object in an app. Their extended reach make them the ideal tool for monitoring system wide-operations or interactions between objects that aren’t connected through object instances, protocols or delegation. 

Beyond iOS specific patterns, other classic designs include Model-View Controller, Singleton and Factory. With so many patterns to choose from, how does one choose the best model for a specific problem? Here are some questions to help you define your own framework. These questions could also be used during a technical interview:

  • Is the communication between my objects tightly or loosely coupled?
  • What is the specific goal of my process or interaction? 
  • Will the solution need to process data asynchronously? 
  • Will the app reuse the same logic in different scenarios?
  • Do one or more objects track the progress of a specific action?
  • Will the solution be built on top of a traditional data-layer?


Liked this essay? Register for my upcoming webinar where I deep dive into iOS Design Patterns and provide code-level examples.  

Posted on May 1, 2017 .

How to Prepare for an iOS Interview

In the fast-paced environment of Swift and iOS development, chances are you could be preparing for a technical interview. Many a blog post has been written about surviving the gauntlet of the dreaded whiteboard. Having had the chance of hiring technical resources as well as being an “interviewee”, I’ve easily passed through some experiences and have been totally unprepared in others. This essay will provide some tips to hopefully make your next iOS technical interview a positive experience. 



If you’ve been asked to interview, you’ve probably already met with one or a few members of the hiring team. As with other standard interviews, the goal during these early rounds is determine your “personality fit”. Are you likable, reasonable and provide the appearance of working well with others? The real anxiety begins when your coding skills are assessed. The fear? The potential of being asked something you haven’t heard of, didn’t study enough or have no experience in. This is especially true when it comes to algorithms and data structures



To start, let’s break down the iOS technical interview into its individual components. Building any workable app requires at least 3 areas of expertise. These include an understanding of the programming languages (e.g. Swift, Objective-C) frameworks (e.g. iOS SDK) and tools (e.g. Xcode). In addition, there are many subjects tangential to core development that are considered best practice. Many of these are reviewed in my iOS Interview Program. Beyond basic algorithms, additional topics include unit testing, cocoapods, the build process, core data, push notifications, cloud based services etc..



Like with anything new, the best way to tackle a subject is to determine how it can be applied towards a goal. Many readers of the Swift Algorithms Book comment how it helps them reinterpret problems they’ve been stuck on. Working through tough problems is same objective of a technical interview. As a result, anticipate (at least) three to four questions that will review the different areas needed to build an app. The depth and complexity of each problem will vary based on the organization. A good rule of thumb? Plan at least 20 minutes to 1 hour to work through each question. 


If you’re not actively working on a project, stretch your skills by contributing on Github. With thousands of projects available through the open-source network, it's free and easy to brush up on valuable skill sets including Swift and source code management. Since Swift is also open-source, be sure to understand the Swift proposal / review process, API design guidelines and impact of major events like WWDC.



Nervous? Start with the basics and download the interviewing company’s app. This simple step can pinpoint your interview efforts by helping you focus on specific iOS frameworks (e.g, MapKit, CoreLocation, CoreAnimation) beforehand. If the company doesn’t yet have an app, research their vertical market and / or competing services. At the very least, doing your homework will arm you with (intelligent) questions that can be used throughout your experience. 


As the interviewee, a (hidden) advantage you also have is time. It may come as a surprise, but many top-level companies don’t hire based on specific salary requirements or timeframe. As a result, they are willing to grant candidates weeks or even months to prepare for a major technical interview. Use that time to your advantage. 



Regardless of the solution, much of it boils down to being able to present information on a screen. As a result, understand the UIView lifecycle and supporting technologies such as AutoLayout and Storyboards. Knowing the basics of Model-View-Controller, IBAction / IBOutlet, UIViewTableViews, Recognizers and GCD (Grand Central Dispatch) will also demonstrate your proficiency with managing application state and presenting data. 



Without a doubt, the biggest drawback to interviewing is having to endure the process without the aid of a computer. As developers, we know a good portion of our work is dependent on awesome tools like auto-complete, StackOverflow and Google. The workaround? Develop experience explaining concepts on paper.  

As you work through the details, don’t worry (initially) about memorizing the latest Swift syntax. Smart interviewers know this information can be easily obtained online. Instead, focus on what models could apply given a particular scenario. For example, learn when to apply generic models like hash tables and / or graphs versus iOS-specific patterns such as key-value observation or delegation. Finally, know how to express your ideas through Big O Notation as well as UML (unified modeling language), as doing so will remove any consideration to programming language or coding syntax.



How can we use these points to actually solve coding questions? Let’s begin with this common framework:

1. Ask clarifying questions
2. Create a conceptual diagram
3. Express a brute force solution in pseudocode
4. Refine your solution with workable code
5. Check for errors or omissions


Much of the anxiety created during interviews is when candidates fail to immediately see a codeable answer. Before diving in, be sure to take a step back and make sure you fully understand the question. It may seem counterintuitive, but many times interviewers know it may not be possible for candidates to write a coded solution in the time provided. 


As a result, people may be more interested in seeing how you handle yourself when faced with a difficult assignment. Can you methodically deconstruct a problem into its individual components and test your hypothesis before attempting to write production-level code?  Interestingly, the steps for answering technical interview questions can also be used for writing entire apps.



Liked this essay? If you're preparing your next technical interview consider registering for the iOS Interview Program.  

Posted on March 11, 2017 .

new international Shipping Options!

We've expanded shipping options for the printed book to include more than 70 countries! This comes after many requests from our international readers. With the book being read by folks around the globe, we couldn't be happier with this update.


How It Works

If you reside outside the US and would like a printed book, just choose the printed book-playground option. You'll pay our standard $6.00 shipping fee and that's it! We expected shipments to arrive in around 10-15 business days. We are especially pleased to start shipping books to new regions such as Asia, Australia, South America, Mexico and Eastern Europe. If you have any questions just let us know.

Posted on December 18, 2016 .

Student & Reader Discounts

With many developers now immersed in their new Swift 3.0 projects, I've been getting numerous inquires about possible book discounts for students and / or readers of the 1st edition of Swift Algorithms (e.g. Swift 2.2). I'm happy to announce these are both available!


If you already own the 1st edition, just contact us with your original order number and we'll send you a discount code for 50% discount off the new book. Similarly, students who provide documentation about their active online or in-person course will receive a 30% book discount. With the new Swift 3.0 book now shipping in print as well as digital format, now's a great time to take advantage of this offer.

Posted on November 14, 2016 and filed under E-Commerce.